Характеристики микроконтроллера модели AT89S8252
Данная модель использована в качестве основного микроконтроллера в двухпроцессорной системе УУМС, разработанной на каф. 301 и изучаемой на лабораторных работах.
В модели AT89S8252 реализованы:
· Flash-память программ объемом 8К, программируемая через SPI;
· EEPROM память данных объемом 2К;
· внутреннее ОЗУ объемом 256 байт;
· три 16-битовых таймера;
· 9 источников прерываний;
· последовательные интерфейсы UART и SPI;
· программируемый WD-таймер;
· два регистра DPTR.
Нижние 128 байт внутреннего ОЗУ имеют стандартную для MCS-51 структуру. Верхние 128 байт по значениям адресов (80h–FFh) совпадают с адресами области РСФ. Поэтому служебные регистры в РСФ доступны через прямую адресацию (т.е. по именам регистров), а байты ОЗУ – только через косвенную адресацию.
Flash-память программ занимает адресное пространство 0000h–1FFFh. При программировании через интерфейс SPI перезаписывается весь массив памяти.
Управление сторожевым таймером и доступом к 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 и внешней памяти.
Особенности структуры и использования таймера Т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. Данный регистр имеет битовую адресацию. В среде MCStudio биты 1 и 0 имеют имена C_T2 и CP_RL2 соответственно, остальные биты именуются так, как показано в таблице.
Имя бита
|
Номер
|
Назначение бита
|
TF2
|
7
|
Флаг переполнения таймера Т2 (при переходе из FFFFh в 0000h). Должен очищаться программно. В режиме генератора для УАПП флаг не устанавливается (при RCLK=1 или TCLK=1).
|
EXF2
|
6
|
Флаг внешнего события таймера Т2. Устанавливает по перепаду 1®0 на входе T2EX (линия Р1.1), если бит EXEN2=1. Обрабатывается как прерывание. Должен очищаться программно.
|
RCLK
|
5
|
Выбор источника синхрочастоты для приемника УАПП в режимах 1 и 3. При RCLK =1 используется таймер Т2, при RCLK = 0 – таймер Т1
|
TCLK
|
4
|
Выбор источника синхрочастоты для передатчика УАПП в режимах 1 и 3. При TCLK =1 используется таймер Т2, при TCLK = 0 – таймер Т1
|
EXEN2
|
3
|
Разрешение внешнего события таймера Т2. При EXEN2=1 разрешено восприятие перепада на входе 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), или по перепаду 1®0 внешнего сигнала T2EX (при EXEN2=1).
При CP/RL2# = 1 – режим захвата. По перепаду 1®0 внешнего сигнала T2EX (при EXEN2=1) происходит копирование текущего состояния счетных регистров (TH2, TL2) в пару регистров (RCAP2H, RCAP2L).
Если RCLK=1 или TCLK=1 (работа на УАПП), бит 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 в качестве задающего генератора для УАПП (при RCLK=1 или TCLK=1) или генератора внешней частоты (при T2OE=1) значения частоты генерации определяются соотношениями:
FУАПП = FOCS / [32 ×(65536 – (RCAP2H,RCAP2L))] и
FOUT = FOCS / [4 ×(65536 – (RCAP2H,RCAP2L))] соответственно.
При тактовой частоте FT = 11059,2 кГц наборы значений стартовых чисел:
для скорости 9600 бит/с – FFDCh, 19200 бит/с – FFEEh, 38400 бит/с – FFF7h; 56800 бит/с – FFFAh. При FT = 12 кГц для скорости 9600 бит/с – FFD9h, другие значения скорости точно не реализуются.
Прерывание TF2 от таймера Т2 в обоих случаях не формируется.
Перепад 1®0 на входе T2EX фиксируется в разряде EXF2 (при EXEN2=1) и обрабатывается как дополнительное внешнее прерывание.
Как указывалось ранее, таймер Т2 в принципе может формировать два запроса на прерывание – TF2 (от таймера) и EXF2 (от внешнего входа P1.1 – T2EX). Оба запроса связаны с одним вектором – 02Bh. Поэтому идентификация источника запроса должна производиться программно. По этой же причине флаги запросов также должны сбрасываться программой (по аналогии с запросами от УАПП).
В регистр разрешения прерываний 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 имеют приоритет ниже, чем у последовательного порта.
|