Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 14

Тема: Быстрый старт на mk s8051f320. Начало.

  1. #1
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761

    Lightbulb Быстрый старт на mk s8051f320. Начало.

    У меня есть знакомые радиолюбители, с большим опытом работы с различной электроникой, но по разным причинам не освоившим работу микроконтроллеров.
    Попытаюсь тут изложить мой вариант учебного курса для этой категории "начинающих эмбеддеров".

    Рассматриваю только варианты на микроконтроллере 8051 (совместимый с 8052).

    Для создания собственного проекта на МК 8051 нужно сделать несколько вещей:

    1. Купить программатор и демоплату.
    2. Нужно установить на компьютер компилятор (среду программирования) поддерживающий программатор и выбранный МК.
    3. Найти в интернет демопроект соответсвующий среде программирования и МК. Или написать свой.

    Варианты с прграммированием на Ассемблере не рассматриваю, т.к. они сложны для "этой категории" начинающих эмбеддеров. Язык Си намного проще в освоении - с ним и будем работать.
    У меня есть несколько вариантов демоплат, но так как мне нужны в настоящий момент микроконтроллеры фирмы SiLabs и я уже купил программатор и демоплату для МК S8051F320, то буду рассматривать этот вариант. Мне так проще.
    Фирма SiLabs предлагает свою среду программирования IDE, в которую можно подключить несколько разных компиляторов. Компиляторы могут быть платные и бесплатные - их выбор предлагается сделать пользователю. Одновременно с этим делается упор на программный продукт фирмы Keil, предлагают специальный драйвер программатора и т.д.
    В интернете пишут, что Keil взяли за основу компилятор Franklin (купили фирму вместе с ее продуктом) и усовершенствовали его. Мне приходилось раньше работать с компилятором Franklin, поэтому выбор среды программирования Keil предпочтителен.
    Есть еще популярный компилятор фирмы IAR, для МК 8051. Кстати, на его досовском варианте (DOS) мне посчастливилось изучать язык ANSI C.
    В ДОС удобно изучать еще и потому, что там все этапы компиляции видны, наглядны и доступны. Имеется его полное описание на русском языке. Что есть большая редкость.
    Предлагаю изучать язык программирования ANSI C и принципы работы компилятора на ДОС версии IAR. А сам учебный проект делать на современной windows версии Keil.
    Среды программирования Keil и IAR дают возможность делать небольшие учебные проекты с размером кода до 2 или 8 кБайт ( у всех фирм по разному, бывает до 32 кБайт). Обьем 8 кБайт достаточно для работы очень многих устройств. Трудно в 8 кб реализовать расчеты с плавающей точкой или интернет приложения, а портативный измерительный прибор или устройство автоматики - без проблем.

    Микроконтроллер Intel 8052 отличается от Intel 8051 расширенными возможностями. Традиционно их называют i8051, но фактически выпускаются только 8052.
    В старых моделях на кристалле был только микропроцессор. Например, в отечественном аналоге КР1816ВЕ31 (i8031) вообще не было никакой памяти - ни ПЗУ, ни ОЗУ. Только "голый" процессор. Вся память была внешней. В современных МК 8052 на криссталее установлена многократно перепрограммируемая память программ (Flash), электрически программируемая память (ПЗУ) данных , оперативная память (ОЗУ), а кроме этого АЦП, ЦАП, компараторы, ШИМ, Интерфейсы с аппаратной поддержкой - I2C, SPI, UART, USB, Ethernet и т.д. Все, что кроме памяти и ядра называют "периферией".
    В старых 8051 одна команда (типовая пересылка одного байта из регистра в регистр) выполнялась за 12 тактов генератора. Если частота генератора 12 мГц, то МК имел производительность 1 млн операций в секунду. Во многих современных 8052 одна операция выполняется за 1 такт, соответственно производительность равна тактовой частоте, при 25 мГц - 25 млн операций в секунду. Для сравнения IBM PC имел 8 Мгц генератор, 8-разрядную шину данных и одну команду выполнял за 12 тактов.
    Есть модели МК 8051 с тактовой частотой 400 мГц и более.
    Ядро 8051 удобно изучать по книге: Однокристальные микро ЭВМ. Справочник. Бобрыкин А.В. и др. М.: МИКАП, 1994 - 400 с.
    В интернете много электронных копий этой книги, - позже выложу ее на файлообменник.
    Язык программирования ANSI C подробно описан в документации к компилятору DOS IAR.
    Там же описание работы компилятора DOS IAR для МК 8051, что тоже является общим для всех других компиляторов - есть небольшие отличия, но не существенные. Сам принцип общий.
    Для начала нужно изучить материал, в книге "Однокристальные микро ЭВМ" начиная с 107 страницы, о принципах работы ядра 8051.
    Затем изучить описание языка ANSI C.
    Далее прочитать документацию на компилятор DOS IAR.
    Это необходимый минимум.
    Компилятор создает файл обычно формата HEX (расширение типа - name.hex, но бывают и другие форматы) который с помощью программатора загружается в область памяти программ (Flash). Этот код выполняется МК. Обычно всегда бывают ошибки - среды программирования предоставляют различные инструменты для отладки кода программы. Собственно этим они и отличаются друг от друга.

    Продолжение следует...
    Последний раз редактировалось Leff; 21.05.2012 в 10:10.

  2. #2
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761

    Lightbulb

    Применение дисплейных модулей 1602.

    Подключаем дисплей WH-1602C-YYH-CTK, ЖКИ 16х2 англ/рус (DV-16236S1FBLY-H/R), например этот - http://www.platan.ru/cgi-bin/qwery.p...70&group=21103. к демоплате EX-320.
    В плату дисплея WH-1602C запаиваем разьем IDC-16. Запаиваем с обратной стороны разьема подстроечный резистор 10 ком (ползунок резистора на 3 пин разьема). Распайка разьема дисплея в даташите.
    Используем для подключения дисплея к плате специальные провода с "однопиновыми" разьемами.
    Шина данных дисплея подключается к порту МК - Р1 (линии D0 дисплея к линиям Р1.0 порта демоплаты и т.д.)
    Выводы управления к линиям порта P0: RS -> P0.5, R/W -> P0.6, E -> P0.7
    Выводы подсветки 15 и 16 не используем.
    Питание на плату подаем с лабораторного источника питания - 5 Вольт. Переключатель в соответствующем положении - см. фото. При подключенном программаторе питание может поступать от USB (если небольшой ток потребления платы).
    Открываем проект в IDE Keil.
    Нажимаем кнопку Download - должна быть произведена загрузка кода программы во Flash МК.
    На дисплее должна появиться надпись:
    " Hello, World!!
    Привет RFCD "
    Изображения Изображения
    • Тип файла: jpg PICT2.jpg (16.6 Кб, Просмотров: 12)
    Вложения Вложения
    Последний раз редактировалось Leff; 28.05.2012 в 19:02.

  3. #3
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761
    Подключил к плате, с программой для дисплея 1602, дисплейный модуль 1604 - тоже работает!
    Очевидно, что понадобится небольшая корректировка программ, чтобы можно было выводить текст в 3 и 4 строки дисплея 1604.
    Изображения Изображения
    • Тип файла: jpg PICT3.jpg (15.1 Кб, Просмотров: 6)

  4. #4
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761

    Подключение дисплейного модуля 1604

    Во вложенном файле доработанный код проекта lcd1602 поддерживающих подключение четырехстрочных дисплейных модулей 1604.
    Вложения Вложения

  5. #5
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761
    Не все дисплейные модули поддерживают русский алфавит.
    Изображения Изображения
    • Тип файла: jpg PICT4.jpg (13.1 Кб, Просмотров: 8)

  6. #6
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761

    Подпрограмма для инициализации МК s8051f320, демоплата ex-320.

    1. Файл настраивает внутренний генератор 12 Мгц, (кварцевый резонатор отключен)
    2. Порт UART - 9600 бод (с переходом к п\п обработки прерывания) TxD -> P0.4; RxD -> P0.5;
    3. Дисплейный модуль 1604 подключается: шина данных дисплея подключается к порту P1 (D0 -> P1.0 и т.д.), RS -> P2.0; R\W -> P2.1; E -> P2.2;


    //************************************************** **************************************************
    // Autor: Leff
    // Date: 29.05.2012
    // File: INIT_S8051F320
    // Hardware: S8051F320
    // Description: init S8051F320
    //************************************************** *************************************************
    void INIT_S8051F320( void ){

    PCA0MD &= ~0x40;
    XBR1 = 0x40;
    XBR0 |= 0x01;

    TH1 = 0x64;
    TL1 = TH1;

    //************************************************** *********************
    // 8 bit PORTs
    //
    P0 = 0xFF;
    P1 = 0xFF;
    P2 = 0xFF;

    P0MDOUT = 0xFF; // 0xFF: Corresponding P0.n Output is push-pull.
    P1MDOUT = 0xFF; // 0xFF: Corresponding P1.n Output is push-pull.
    P2MDOUT = 0xFF; // 0xFF: Corresponding P2.n Output is push-pull.
    P3MDOUT = 0xFF; // 0xFF: Corresponding P3.n Output is push-pull.

    P0MDIN = 0xFF; // 0xFF: Corresponding P0.n pin configured digital.
    P1MDIN = 0xFF; // 0xFF: Corresponding P1.n pin configured digital.
    P2MDIN = 0xFF; // 0xFF: Corresponding P2.n pin configured digital.
    P3MDIN = 0xFF; // 0xFF: Corresponding P3.n pin configured digital.

    // P0SKIP = 0x00;
    // P1SKIP = 0x00;
    // P2SKIP = 0x00;

    //************************************************** *********************************
    // Oscillator Control

    OSCICN |= 0x03; // Internal Oscillator

    //************************************************** *********************
    // Serial Mode control
    // SCON0 = 0x98;
    SCON0 |= 0x10;

    // S0MODE = 0;
    // MCE0 = 0;
    // REN0 = 0;
    // TB80 = 0;
    // RB80 = 0;
    TI0 = 1;
    // RI0 = 0;

    // Clock Control register ************************************************** **
    // CKCON = 0x8E;

    CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
    CKCON |= 0x01;
    // CLKMUL = 0x00;


    // PCA Register ************************************************
    // PCA0CN = 0xD8;
    // CF = 0;
    // CR = 0;
    // CCF4 = 0;
    // CCF3 = 0;
    // CCF2 = 0;
    // CCF1 = 0;
    // CCF0 = 0;

    // Programm Status Word **************************************************
    // PSW = 0xD0;
    // CY = 0;
    // AC = 0;
    // F0 = 0;
    // RS1 = 0;
    // RS0 = 0;
    // OV = 0;
    // F1 = 0;
    // P = 0;

    // Timer-Counter 0 and 1 ************************************************** ******
    // TMOD = 0x89;
    TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
    TMOD |= 0x20;

    // TCON = 0x88; // TCON - Control Register

    TF1 = 0;
    TR1 = 1;
    TF0 = 0;
    TR0 = 0;
    IE1 = 0;
    IT1 = 0;
    IE0 = 0;
    IT0 = 0;

    // Timer-Counter 2 ************************************************** *********
    // TMR2CN = 0xC8;
    TF2H = 0;
    TF2L = 0;
    TF2LEN = 0;
    T2SOF = 0;
    T2SPLIT = 0;
    TR2 = 0;
    T2XCLK = 0;


    // Interrupt System ************************************************** ******
    // IE =0xA8; Interrupt Enable Register
    //
    // Interrupts Vector
    //
    // INT0 0
    // TIMER0 1
    // INT1 2
    // TIMER1 3
    // UART0 4
    // TIMER2 5
    // SPI0 6
    // SMBUS0 7
    // USB0 8
    // ADC_WINDOW 9
    // ADC0_EOC 10
    // PCA0 11
    // COMPARATOR0 12
    // COMPARATOR1 13
    // TIMER3 14
    // VBUS_LEVEL 15

    EA = 1; // all interrupt sources.
    ESPI0 = 0; // SPI0 interrupt.
    ET2 = 0; // Timer 2 interrupt.
    ES0 = 1; // UART0 serial port interrupt.
    ET1 = 0; // Timer 1 interrupt.
    EX1 = 0; // External Interrupt 1 (INT1).
    ET0 = 0; // Timer 0 interrupt.
    EX0 = 0; // External Interrupt 0 (INT0).


    // IP - Interrupt Priority Register **************************************************
    // IP = 0xB8;

    PSPI0 = 0; // SPI0 Interrupt Priority
    PT2 = 0; // Timer 2 Interrupt Priority
    PS0 = 0; // UART Serial Port Interrupt Priority
    PT1 = 0; // Timer 1 Interrupt Priority
    PX1 = 0; // INT0 (External Interrupt 1) priority
    PT0 = 0; // Timer 0 Interrupt Priority
    PX0 = 0; // INT0 (External Interrupt 0) Priority

    // ADC Interface ************************************************** *******************
    // ADC0CN = 0xE8;
    // AD0EN = 0; // ADC0
    // AD0TM = 0; // ADC0
    // AD0INT = 0; // ADC0
    // AD0BUSY = 0; // ADC0
    // AD0WINT = 0; // ADC0
    // AD0CM2 = 0; // ADC0
    // AD0CM1 = 0; // ADC0
    // AD0CM0 = 0; // ADC0

    // SMB interface ************************************************** ******
    // SMB0CN = 0xC0;
    // MASTER = 0; //
    // TXMODE = 0; //
    // STA = 0; //
    // STO = 0; //
    // ACKRQ = 0; //
    // ARBLOST = 0; //
    // ACK = 0; //
    // SI = 0; //

    // SPI interface ************************************************** *******
    // SPI0CN = 0xF8;
    // SPIF = 0; // SPI0 Interrupt Flag
    // WCOL = 0; // Write Collision Error Flag.
    // MODF = 0; // SPI0
    // RXOVRN = 0; // SPI0
    // NSSMD1 = 0; //
    // NSSMD0 = 0; //
    // TXBMT = 0; // SPI0
    //
    // SPIEN = 0x00; // SPI
    // SPICFG = 0x00;
    // SPI0CFG = 0x00;
    // SPICKR = 0x00;
    // SPI0CKR = 0x00;
    // SPIDAT = 0x00;
    // SPI0DAT = 0x00;

    //************************************************** *********************************
    // Comparator Control register
    //
    //
    // CPT1CN = 0x00;
    // CPT0CN = 0x00;
    // CPT1MD = 0x00;
    // CPT0MD = 0x00;
    // CPT1MX = 0x00;
    // CPT0MX = 0x00;
    //
    //************************************************** *********************************
    //External Memory Control
    //
    // EMI0CN = 0x00;
    //
    //************************************************** *********************************
    // Flash Scale Register
    // FLSCL = 0x00;
    // FLKEY = 0x00;
    //
    //************************************************** *********************************
    // Regulator Control Registor
    // REG0CN
    // REG0CN = 0x00;
    //
    //************************************************** *********************************
    // Voltage Reference Control Register
    // REF0CN
    // REF0CN = 0x00;
    //
    //************************************************** *********************************
    }
    Последний раз редактировалось Leff; 31.05.2012 в 13:17.

  7. #7
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761

    Подпрограмма обработки прерывания uart

    // Принятый байт равен переменной - recive.

    bit flag=0, f_RD=0;
    unsigned char data recive;

    unsigned char getc(void); // RS-232
    void putc (unsigned char); // RS-232


    //************************************************** **************************************************
    void RS232() interrupt 4 {
    if(TI0) goto st335;
    RI0=0;
    f_RD=1;
    recive=SBUF0;
    st335: TI0=0;
    flag=0;
    }

    //************************************************** **************************************************
    unsigned char getc(void) {
    while(!f_RD);
    f_RD=0;
    return (SBUF0);
    }

    //************************************************** **************************************************
    void putc (unsigned char byte) {
    flag=1;
    SBUF0=byte;
    while(flag);
    }

    //************************************************** **************************************************
    Последний раз редактировалось Leff; 30.05.2012 в 23:16.

  8. #8
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761
    Во вложенном файле схема демоплаты EX-320 и внешний вид - выкладывал ее в другой ветке, но тут она тоже нужна.
    Плата очень проста, кроме микроконтроллера F320 и микросхемы стабилизатора 3.3 v, на ней больше ничего нет.
    Раза три микросхему F320 выпаивал и запаивал в плату - вполне реально вручную паять эти корпуса. Под стереомикроскопом это значительно удобнее делать.

    PS как выяснилось схема в даташите существенно отличается от схемы самой печатной платы.
    Как говорится: "Производитель имеет право вносить изменения в конструкцию изделия, не ставя в известность потребителя".
    Изображения Изображения
    Вложения Вложения
    Последний раз редактировалось Leff; 31.05.2012 в 18:58.

  9. #9
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761
    Во вложении файл конфигурации регистров микроконтроллера С8051F320.
    Он почему то отличается от типового для Keil.
    Этот файл нужно поместить в папки
    C;/Keil/C51/INC/Cygnal/
    C;/Keil/C51/INC/SiLABSl/
    В папке SiLABS файл должен называться S8051F320
    Вложения Вложения

  10. #10
    Moderator Аватар для Leff
    Регистрация
    26.04.2012
    Адрес
    Царевококшайск, Россия.
    Сообщений
    6,761
    Недорогие LPT программаторы для МК SiLabs. http://www.silabs.org.ua/sp_ru.htm#6N137

    Недорогой адаптер USB-LPT, для тех у кого нет LPT порта в компьютере http://www.nix.ru/autocatalog/adapte...AM_112622.html

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •