Современные модели микроконтроллеров MCS-51

PAGE 7

Дисциплина «Микроконтроллеры в системах управления», 3-й курс, семестр 6. Модуль 3 – Тема 3

Модуль 3 – Тема 3 Современные модели микроконтроллеров MCS-51

3.1 Обзор современных моделей микроконтроллеров MCS-51

Первые микроконтроллеры с ядром MCS-51 были разработаны в 70-х годах прошлого столетия фирмой Intel одновременно с микропроцессорами серии i8086, которые являются «предками» современных МП для ПЭВМ. С тех пор ядро
MCS-51 приобрело огромную популярность, и в настоящее время десятки корпораций по всему миру производят несколько сотен моделей микроконтроллеров этого семейства. Хотя фирма Intel свернула производство контроллеров MCS-51, другие известные производители (Atmel, Philips, Siemens, Analog Devices, Silicon Labs) продолжают развивать это направление.

В модуле 2 уже упоминались некоторые базовые модели семейства MCS-51 разработки Intel. Напомним, что модели отличаются типом РПП (по послендним цифрам обозначения):

31 – без резидентной памяти программ;

51 – с РПП однократного электрического программирования;

751 – с РПП на основе репрограммируемого ПЗУ с ультрафиолетовым
стиранием.

Остальные характеристики в этих моделях совпадают с базовой моделью.

В контроллерах с цифрами 52/752 реализован еще один таймер – Т2, который функционирует в 16-битовой конфигурации и обеспечивает такие режимы:

– автоперезагрузка 16-битового стартового числа;

– захват текущего содержимого счетных регистров по внешнему сигналу, т.е.
копирование состояния таймера в специальную пару регистров;

– генерация внешних импульсов;

– тактирование порта UART.

Существенным недостатком всех контроллеров MCS-51 младших моделей является сложная технология перепрограммирования РПП – контроллер нужно извлекать из схемы, использовать специальные программаторы.

Данная проблема впервые была устранена в контроллерах семейства хх89xxxxx, в частности, в МК AT89xxxxx, разработанных фирмой Atmel, благодаря использованию Flash-памяти программ. Это позволяет выполнять перепрограммирование контроллеров непосредственно в целевой системе, в том числе в процессе работы. Такая возможность получила название ISP – in-system programmability.

Технология ISP может быть реализована в двух вариантах:

  1. через последовательный интерфейс SPI – serial peripheral interface, для которого использованы несколько линий порта P1; SPI реализован в моделях AT89Sxxxx; интерфейс SPI может также использоваться для обмена данными между двумя и более микроконтроллерами;
  2. через последовательный порт UART, который переводится в режим программирования; для поддержки процесса используется также специальная загрузочная программа, предварительно размещенная во Flash-памяти; эта технология реализована, в частности, в модели AT89C5115.

Микроконтроллеры с обозначением AT89Cxxxx программируются через параллельный интерфейс, для которого используются практически все линии портов. Процедура выполняется на внешних программаторах, т.е. возможность ISP не поддерживается.

Flash-память микроконтроллеров AT89 может быть перепрограммирована до 1000 раз, что существенно удешевляет процесс отладки программного обеспечения на реальной системе. Особенность протокола программирования Flash – стирание и перезапись всего массива памяти.

Другие возможности, реализованные в различных моделях серии AT89:

  • расширенное внутренне ОЗУ – до 256 байт;
  • наличие памяти XRAM – дополнительное ОЗУ на кристалле, по способу доступа соответствующее внешней памяти – т.е. по командам MOVX;
  • энергонезависимая память данных типа EEPROM; в отличие от Flash, допускает перезапись каждой отдельной ячейки непосредственно из прикладной программы; количество циклов перезаписи – до 100000 раз;
  • WD – сторожевой таймер (Watchdog Timer), сигнал переполнения с которого вызывает «сброс» процессора; таким образом предотвращается «зависание» программы;
  • PCA – programmable counter array – многорежимные программируемые таймеры, обычно используемые в системах управления как ШИМ-генераторы;
  • наличие двух регистров DPTR – во всех моделях AT89Sxxxx.

Микроконтроллеры AT89 имеют единственное ограничение их широкого использования в системах сбора аналоговых данных – отсутствие встроенного АЦП (кроме моделей AT89C5115 и AT89C51AC2 – в которых реализован АЦП, но определенной проблемой является загрузка программ через UART).

Поэтому достаточно большую популярность для создания систем сбора аналоговых данных приобрели микроконтроллеры ADuC8xx фирмы Analog Devices. Дополнительно к уже упомянутым возможностям в этих МК реализованы (в модели ADuC812): 8-канальный 12-разрядный АЦП с временем преобразования 5 мкс, два потенциальных 12-разрядных ЦАП, шинный последовательный интерфейс I2C.

Большое разнообразие Flash-микроконтроллеров создано фирмой Philips. В контроллерах семейства P89C51Rx+ реализованы объемы Flash от 8к до 64к, WDT, PCA, XRAM, 8- и 10-разрядные АЦП, 8-разрядные ЦАП, ШИМ, интерфейсы программирования – SPI, шинные – I2C и CAN.

Сравнительно недавно появилась на рынке очень разнообразная серия МК MCS-51 разработки фирмы Silicon Labs – обозначение C8051Fxxx. По ресурсам они даже превосходят упомянутые МК Philips (РПП до 128К, РПД до 4К, быстродействие до 100MIPS, два многоканальных (8..24)-разрядных АЦП со скоростью 100–500ksps, 12-разрядные ЦАП, интерфейсы JTAG и USB). Цена от 40 до 1500 грн.

Из других производителей, выпускающих МК семейства MCS-51, можно упомянуть Winbond, ISSI, SST, Cygnal и др.


3.2 Характеристика микроконтроллера модели AT89S8252

Данная модель использована в качестве основного микроконтроллера в двухпроцессорной системе УУМС, созданной на каф. 301 ХАИ для проведения лабораторных работ.

В модели AT89S8252 реализованы:

  • Flash-память программ объемом 8К, программируемая через SPI;
  • EEPROM данных объемом 2К;
  • внутреннее ОЗУ объемом 256 байт;
  • три 16-битовых таймера (Т0, Т1 и Т2);
  • поддержка 9-ти источников прерываний;
  • последовательные интерфейсы UART и SPI;
  • программируемый сторожевой таймер WDT;
  • два регистра DPTR для работы с внешним адресным пространством.

Нижние 128 байт внутреннего ОЗУ имеют структуру, стандартную для MCS-51. Верхние 128 байт по значениям адресов (80h–FFh) совпадают с адресами области РСФ. Поэтому служебные регистры в РСФ доступны через прямую адресацию (т.е. по именам регистров), а байты ОЗУ – только через косвенную адресацию.

Flash-память программ занимает адресное пространство 0000h–1FFFh. При программировании через интерфейс SPI перезаписывается весь массив памяти.

3.2.1 Управление сторожевым таймером и доступом к EEPROM


Проводится с помощью регистра WMCON, который не имеет битовой адресации.

Имя бита

Номер

Назначение бита

PS2

PS1

PS0

7

6

5

Задание периода срабатывания сторожевого таймера: при “000” – 16 мс,
“001” – 32 мс, “010” – 64 мс, “011” – 128 мс, “100” – 256мс,
“101” – 512 мс, “110” – 1024 мс и при “111” – 2048 мс

EEMWE

4

Разрешение записи в EEPROM. Перед записью нужно установить в “1”.
По окончании записи нужно сбросить в “0”

EEMEN

3

Разрешение доступа к EEPROM. При установке в “1” команды MOVX на основе DPTR работают с областью EEPROM. При сбросе в “0” команды
MOVX работают с внешней памятью данных

DPS

2

Выбор активного регистра DPTR. При DPS = 0 (по умолчанию) активен основной DPTR (DP0H:DP0L). При DPS = 1 активен (DP1H:DP1L)

WDTRST
RDY/BSY

1

Сброс сторожевого таймера / признак занятости EEPROM.

При записи в этот бит “1” сторожевой таймер сбрасывается, а данный бит автоматически переходит в “0” (это не влияет на состояние EEPROM).

При чтении бита анализируется состояние EEPROM: если бит равен “0”,
то запись в EEPROM не закончена, если “1” – то EEPROM доступна

WDTEN

0

Бит запуска сторожевого таймера. При WDTEN = 1 таймер запускается и будет генерировать сброс МК через интервал времени, определяемый
битами (PS2-PS1-PS0)

Особенность использования сторожевого таймера состоит в том, что он должен быть настроен на период TWD > T0 max, где T0 max – максимальный из периодов дискретности, реализуемый в данной системе.

В каждом периоде дискретности T0 max нужно выполнять сброс сторожевого таймера для того, чтобы он начинал новый период контроля TWD.

Предположим, что в микроконтроллерной системе T0 max = 100 мс. Тогда период сторожевого таймера должен составлять, как минимум TWD = 128 мс. Соответствующая двоичная комбинация для разрядов [PS2–PS0] = 011.

В инициализирующем блоке программы нужно выполнить настройку:

mov WMCON,#01100000b

Перед началом циклических действий по алгоритму запускаем WDT установкой в “1” бита WDTEN:

orl WMCON,#00000001b

В подпрограмме, обслуживающей завершение основного периода дискретности T0 max , нужно выполнить сброс сторожевого таймера (бит WDTRST = 1):

orl WMCON,#00000010b

Обращение к блоку памяти данных EEPROM выполняется, как к внешней памяти, командами MOVX A,@DPTR и MOVX @DPTR,A по адресам от 0000h до 07FFh (2 кбайта). Для указания, что обращение производится к EEPROM, нужно в программе установить бит EEMEN:

mov WMCON,#00001000b

Особенность обращения к EEPROM состоит в том, что цикл записи происходит гораздо дольше, чем во внешнюю память (около 2,5 мс). Поэтому в программе нужно ожидать завершения текущего цикла записи в EEPROM перед последующей записью или чтением. Для этого служит бит RDY/BSY. Кроме того, запись стробируется установкой бита EEMWE = 1. Чтение из EEPROM занимает столько же времени, как и чтение из внешней памяти (2 МЦ). Пример процедуры записи одного байта в EEPROM следующий:

mov A,#data ; Данные для записи

mov DPTR,#Address ; Задаем нужный адрес памяти

orl WMCON,#00011000b ; Установка EEMWE=1 и EEMEN=1

movx @DPTR,A ; Инициируем запись

wt: mov A,WMCON ; Цикл ожидания завершения записи

. . . ;

jnb ACC.1,wt ; Проверяем бит RDY/BSY

anl WMCON,#11100111b ; Сброс битов EEMWE и EEMEN

В цикле ожидания можно выполнять любые другие действия по обработке данных, не связанные с обращением к EEPROM и внешней памяти.


3.2.2 Структура и использование таймера Т2

Программная модель таймера Т2 содержит следующие регистры:

  • счетные регистры TH2 и TL2;
  • регистры RCAP2H и RCAP2L для (стартового числа) / (захвата значения);
  • регистр выбора режимов и управления T2CON;
  • регистр дополнительных режимов T2MOD.

Регистры (TH2, TL2) и (RCAP2H, RCAP2L) всегда работают в парах, поэтому таймер Т2 является полностью 16-разрядным.

Для работы таймера Т2 по внешним сигналам служат линии порта Р1:
линия Р1.0 (имя Т2) – вход импульсов для режима счетчика или выход генератора;

линия Р1.1 (имя T2EX) – вход управления захватом/перезагрузкой таймера Т2.

Основное управление таймером Т2 выполняют с помощью регистра Т2CON. Данный регистр имеет битовую адресацию.

Имя бита

Номер

Назначение бита

TF2

7

Флаг переполнения таймера Т2 (при переходе из FFFFh в 0000h). Должен обнуляться программно. В режиме тактирования порта UART этот флаг не устанавливается (т.е. при RCLK=1 или TCLK=1).

EXF2

6

Флаг внешнего события таймера Т2. Устанавливает по перепаду 10 на входе T2EX (линия Р1.1), если бит EXEN2=1. Обрабатывается как прерывание. Должен обнуляться программно.

RCLK

5

Выбор источника синхронизации для приемника UART в режимах 1 и 3.
При RCLK =1 используется таймер Т2, при RCLK = 0 – таймер Т1

TCLK

4

Выбор источника синхронизации для передатчика UART в режимах 1 и 3.
При TCLK =1 используется таймер Т2, при TCLK = 0 – таймер Т1

EXEN2

3

Разрешение внешнего события таймера Т2. При EXEN2=1 разрешено восприятие перепада 10 на входе T2EX и установка бита EXF2.

TR2

2

Бит запуска/останова таймера T2. При TR2 = 1 таймер запускается и работает в соответствии с настройками C_T2, CP_RL2, RCLK и TCLK.

C_T2

1

Выбор режима работы: при C_T2 = 0 – таймирование (счет импульсов от ГТИ), при C_T2 = 1 – счетчик внешних импульсов по входу Т2 (линия Р1.0 микроконтроллера)

CP_RL2

0

Выбор конфигурации таймера Т2.

При CP_RL2 = 0 – автоперезагрузка стартового числа. Копирование значений из пары (RCAP2H, RCAP2L) в счетные регистры (TH2, TL2) происходит или по переполнению таймера (при EXEN2=0), или по перепаду 10 внешнего сигнала T2EX (при EXEN2=1).

При CP_RL2 = 1 – захват текущего состояния таймера. По перепаду 10 внешнего сигнала T2EX (при EXEN2=1) происходит копирование текущего состояния счетных регистров (TH2, TL2) в пару регистров (RCAP2H, RCAP2L).

Если RCLK=1 или TCLK=1 (тактирование UART), бит CP_RL2 игнорируется, а таймер Т2 работает в конфигурации автоперезагрузки по переполнению.

Таким образом, захват текущего состояния таймера Т2 может быть инициирован только внешним сигналом T2EX.

Обобщенная таблица режимов таймера Т2 следующая:

RCLK+TCLK

CP_RL2

Режим работы (при включении по TR2=1)

0

0

16-разрядный таймер/счетчик (в зависимости от C_T2) с автоперезагрузкой стартового числа из регистров (RCAP2H, RCAP2L)

0

1

16-разрядный таймер/счетчик (в зависимости от C_T2) с захватом текущего состояния таймера в регистры (RCAP2H, RCAP2L)

1

x

Задающий генератор для последовательного порта

В регистре T2MOD нет битовой адресации, используются только два разряда:

Имя бита

Номер

Назначение бита

T2OE

1

Разрешение выдачи сигнала программируемой частоты от таймера Т2 на внешний вывод P1.0

DCEN

0

Разрешение задания направления счета таймера Т2 в режиме автоперезагрузки стартового числа.

При DCEN = 0 таймер Т2 всегда считает в прямом направлении от стартового числа, взятого из регистров (RCAP2H, RCAP2L), до FFFFh. При достижении максимума формируется флаг прерывания TF2 ипроисходит перезагрузка стартового числа.

При DCEN = 1 направление счета таймера Т2 зависит от сигнала на внешнем входе T2EX.
При T2EX=1 – прямой счет от (RCAP2H, RCAP2L), до FFFFh с формированием флага TF2=1 и перезагрузкой числа из (RCAP2H, RCAP2L).
При T2EX=0 – обратный счет от FFFFh, до значения, содержащегося в регистрах (RCAP2H, RCAP2L). При этом формируется флаг TF2=1 и в счетные регистры (TH2, TL2) загружается число FFFFh.

Состояние входа T2EX фиксируется в разряде EXF2, который в этом случае не является флагом прерывания. Значение EXF2 можно использовать для программного определения, в каком направлении считает таймер.

Приемник и передатчик последовательного порта в микроконтроллерах AT89S8252 могут управляться от разных источников (таймер Т1 или Т2).

При использовании таймера Т2 для тактирования UART (при RCLK=1 или TCLK=1) или генератора внешней частоты (при T2OE=1) значения частоты генерации определяются соотношениями:

FУАПП = FQ / [32 (65536 – (RCAP2H,RCAP2L))] и

FOUT = FQ / [4 (65536 – (RCAP2H,RCAP2L))] соответственно.

При тактовой частоте FQ = 11,0592 МГц наборы значений стартовых чисел:

для скорости передачи через UART 9600 бит/с – FFDCh, 19200 бит/с – FFEEh, 38400 бит/с – FFF7h; 57600 бит/с – FFFAh, 115200 бит/с – FFFDh. При FQ = 12 МГц для скорости 9600 бит/с – FFD9h, другие значения скорости точно не реализуются.

Прерывание TF2 от таймера Т2 в обоих случаях обрабатывать не нужно.

Перепад 10 на входе T2EX фиксируется в разряде EXF2 (при EXEN2=1) и обрабатывается как дополнительное внешнее прерывание (вектор 002Bh).

Как указывалось ранее, таймер Т2 в принципе может формировать два запроса на прерывание – TF2 (от таймера) и EXF2 (от внешнего входа P1.1 – T2EX). Оба запроса связаны с одним вектором – 002Bh. Поэтому идентификацию источника запроса нужно проводить программно. По этой же причине флаги запросов также должны сбрасываться программой (по аналогии с запросами от УАПП).

В регистр разрешения прерываний IE добавлен бит с номером 5 – имя ET2, который разрешает обработку прерывания от таймера Т2. В регистр управления приоритетами IP добавлен бит с именем PT2 для задания высокого приоритета этого прерывания.

Кроме того, в МК AT89S8252 есть дополнительный регистр задания приоритетов IPH, имеющий такую же битовую структуру, как IP. Имена всех битов имеют дополнительную букву “H” в названии (PT2H, PSH, …, PX0H). Таким образом, за счет комбинации значений в разрядах с одинаковым номером в регистрах IP и IPH можно задавать 4 уровня приоритетов:

(IPH.x = 0, IP.x = 0) – уровень 0 (низший)

(IPH.x = 0, IP.x = 1) – уровень 1

(IPH.x = 1, IP.x = 0) – уровень 2

(IPH.x = 1, IP.x = 1) – уровень 3 (высший)

Приоритеты внутри уровня такие же, как в базовой модели 80С51, а новые прерывания TF2 и T2EX имеют приоритет ниже, чем у последовательного порта.

3.3 Интерфейс внутрисистемного программирования SPI

В микроконтроллерах AT89Sxxxx реализована возможность изменения содержимого памяти программ даже при работе МК в целевой системе – ISP – in-system programmability. Эта возможность обеспечивается наличием последовательного интерфейса SPI. Этот интерфейс, кроме целей программирования, в некоторых моделях может также обеспечивать обмен данными между несколькими микроконтроллерами. Скорость обмена – до 1,5 Мбит/с.

Согласно стандарту интерфейса SPI, в нем присутствуют такие сигналы (в скобках указана соответствующая физическая линия порта МК):

MOSI (P1.5) – master output slave input – информационный выход контроллера, инициирующего обмен (ведущего) – вход ведомого контроллера;

MISO (P1.6) – master input slave output – информационный вход контроллера, инициирующего обмен (ведущего) – выход ведомого контроллера;

SCK (P1.7) – serial clock – линия синхронизации; тактовые импульсы формирует ведущий контроллер;

SS (P1.4) – slave select – линия выбора ведомого устройства; ведомое устройство должно формировать на этом выходе “0”.

Настройка интерфейса SPI для обмена данными с другими микроконтроллерами производится путем установки битов специальных РСФ:

SPCR – SPI control register, SPSR – SPI status register и SPDR – SPI data register. Битовая структура этих регистров в данной теме не рассматривается.

Для целей физического программирования Flash-памяти интерфейс SPI используется совместно с сигналом Reset, а линия SS не задействована. При подаче высокого уровня на вход Reset контроллер переходит в режим сброса и одновременно в режим записи памяти программ.

Физическое программирование Flash-памяти может быть выполнено непосредственно с ПЭВМ. Для выдачи сигналов программирования можно использовать LPT-порт, а необходимый протокол (последовательность команд, адресов и данных для записи) реализуется специальным программным обеспечением. Таким образом, через линии параллельного LPT-порта происходит побитовая передача данных.

Программирование выполняется через кабель, построенный по схеме:

Линия
интерфейса SPI

Линия МК
(номер вывода)

Линия LPT-порта
(контакт разъема DB-25)

MOSI

P1.5 (6)

7

MISO

P1.6 (7)

10

SCK

P1.7 (8)

8

RST

Reset (9)

6

GND

GND (20)

18-25 (все соединить)

Кабель рекомендуется изготовить таким образом, чтобы каждый сигнальный провод образовывал витую пару с проводником GND (можно использовать плоский многожильный кабель с индивидуальной экранировкой проводов). Длина кабеля не должна превышать 1,5 м.

В качестве специализированного программного обеспечения можно использовать, например, программу-загрузчик AEC_ISP.exe, свободно распространяемую фирмой AEC Corp. Входной информацией для загрузчика AEC_ISP является скомпилированный файл прикладной программы, представленный в формате Intel HEX (такой формат файла формируется практически всеми компиляторами, в том числе и средой Visual MCStudio). Загрузчик позволяет выполнить физическое программирование контроллеров типов AT89S51, AT89S52, AT89S8252, AT89S53. Одновременно с памятью программ может быть выполнена запись данных в EEPROM. Также загрузчик автоматически проводит верификацию (проверку содержимого) Flash- и EEPROM-памяти. Программа-загрузчик AEC_ISP реализована как приложение MS DOS.

Альтернативным решением является использование встроенного загрузчика по интерфейсу SPI в составе интегрированной среды Visual MCStudio. Достоинством является выполнение физического программирования МК непосредственно из среды разработки программ.

Автор конспекта: Джулгаков В.Г., доцент каф. 301, ХАИ

Современные модели микроконтроллеров MCS-51