Программная модель микроконтроллера 8051

  0FFFH
   
  23H TI, RI
   
  1BH T/C1
   
13H INT1
   
  0BH T/C0
   
03H INT0
   
  00H
   
15 8  
    PC
 
7 0  
   
  Рис.1.Структура резидентной памяти программ микроконтроллера 8051  
       
 

В предыдущей главе было отмечено, что ядром семейства MCS-51 является микроконтроллер 8051 (отечественный аналог КР1816ВЕ51). В связи с этим представляется целесообразным рассмотрение особенностей программирования указанного семейства на примере именно этого микроконтроллера.

Программная модель МК 8051 содержит резидентную память данных, регистры специальных функций, резидентную память программ и программный счетчик PC.

Резидентная память программ (рис.1) имеет байтовую организацию и доступна только по чтению, при этом ее ячейки (4 Кбайт) адресуются с использованием двенадцати младших разрядов PC. Резидентная память программ может быть дополнена внешней памятью. В этом случае общий максимально допустимый объем памяти программ составит 64 К. Младшие адреса резидентной памяти программ отведены под обработку внешних прерываний , , прерываний от таймеров/счетчиков T/C0, T/C1 и прерывания от последовательного порта. В случае возникновения какого-либо из указанных прерываний происходит обращение к соответствующей ячейке резидентной памяти программ (например, при возникновении прерывания в PC записывается код 0003H).

Резидентная память данных (рис.2) состоит из 128-ми 8-разрядных ячеек с адресами 00H-7FH и может быть дополнена внешней памятью данных емкостью до 64 К. При этом пространства резидентной и внешней

 

Резидентная память данных     Регистры специальных функций  
  7FH   F7 F6 F5 F4 F3 F2 F1 F0 0F0H
      E7 E6 E5 E4 E3 E2 E1 E0 0E0H
  30H   D7 D6 D5 D4 D3 D2 D1 D0 0D0H
7F 7E 7D 7C 7B 7A 2FH   - - - BC BB BA B9 B8 0B8H
2EH   B7 B6 B5 B4 B3 B2 B1 B0 0B0H
6F 6E 6D 6C 6B 6A 2DH   AF - - AC AB AA A9 A8 0A8H
2CH   A7 A6 A5 A4 A3 A2 A1 A0 0A0H
5F 5E 5D 5C 5B 5A 2BH   SBUF 99H
2AH   9F 9E 9D 9C 9B 9A 98H
4F 4E 4D 4C 4B 4A 29H   90H
28H   TH1 8DH
3F 3E 3D 3C 3B 3A 27H   TH0 8CH
26H   TL1 8BH
2F 2E 2D 2C 2B 2A 25H   TL0 8AH
24H   TMOD 89H
1F 1E 1D 1C 1B 1A 23H   8F 8E 8D 8C 8B 8A 88H
22H   PCON 87H
0F 0E 0D 0C 0B 0A 21H   DPH 83H
20H   DPL 82H
R7 1FH   SP 81H
      80H
R0 18H      
R7 17H      
         
R0 10H      
R7 0FH      
           
R0 08H     Рис.2. Структура резидентной памяти данных и регистров специальных функций микроконтроллера 8051  
R7 07H      
         
R0 00H      
                                             

памяти не пересекаются, так как доступ к ним осуществляется с помощью разных команд.

Младшие 32 байта РПД сгруппированы в 4 банка по 8 регистров R0-R7 в каждом. Отметим, что Банк0, Банк1, Банк2 и Банк3 занимают соответственно адреса 00H-07H, 08H-0FH, 10H-17H и 18H-1FH. Следующие после банков регистров 16 байт (адреса 20H-2FH) или 128 бит (адреса 00H-7FH) образуют область ячеек, к которым возможно побитовое обращение. Набор команд МК 8051 содержит значительное количество инструкций, позволяющих работать с указанными битами.

Область регистров специальных функций (РСФ) (рис.2) содержит 21 регистр, назначение которых приведено в табл.2.1. Как видно из рис.2 и табл.2.1, 11 РСФ допускают побитовое обращение (биты с адресами 80H-0F7H).

 

Таблица 2.1

Наименование Назначение Адрес
P0* Порт 0 80H
SP Указатель стека 81H
DPL Младший байт указателя данных DPTR 82H
DPH Старший байт указателя данных DPTR 83H
PCON Регистр управления потреблением 87H
TCON* Регистр управления таймеров/счетчиков 88H
TMOD Регистр режимов таймеров/счетчиков 89H
TL0 Таймер/счетчик 0. Младший байт 8АH
TL1 Таймер/счетчик 1. Младший байт 8BH
TH0 Таймер/счетчик 0. Старший байт 8CH
TH1 Таймер/счетчик 1. Старший байт 8DH
P1* Порт 1 90H
SCON* Регистр управления последовательным портом 98H
SBUF Буфер последовательного порта 99H
P2* Порт 2 0A0H
IE* Регистр разрешения прерываний 0A8H
P3* Порт 3 0B0H
IP* Регистр приоритетов прерываний 0B8H
PSW* Регистр состояния программы 0D0H
A* Аккумулятор 0E0H
B* Регистр B 0F0H

* - регистры, допускающие побитовую адресацию.

 

Рассмотрим регистры специальных функций более подробно.

Порты P0, P1, P2, P3являются двунаправленными портами ввода/вывода и предназначены для обеспечения обмена информацией МК с внешними устройствами, образуя 32 линии ввода/вывода. Помимо обычного ввода/вывода указанные порты могут выполнять ряд дополнительных функций. В частности, при работе МК с внешней памятью данных или с внешней памятью программ через порты P0 и P2 выводятся соответственно младший и старший байты адреса, кроме того через порт P0 выдается (принимается) байт данных (байт данных или байт команды). При этом обмен байтом данных, ввод байта команды и вывод младшего байта адреса внешней памяти мультиплексированы во времени. Линии порта P3 имеют следующие альтернативные функции: P3.0 (P3.1) - вход (выход) последовательного порта; P3.2 (P3.3) - вход внешнего прерывания ( ); P3.4 (P3.5) - счетный вход 0 (1); P3.6 (P3.7) - выход сигнала записи (чтения) во внешнюю память данных (из внешней памяти данных).

Указатель стека SP (Stack Pointer) - регистр, содержимое которого инкрементируется (увеличивается на единицу) перед записью данных в стек при выполнении команд PUSH и CALL. Начальный сброс устанавливает указатель стека в 07H, а область стека в РПД начинается с адреса 08H. При необходимости, путем переопределения указателя стека область стека может быть расположена в любом месте РПД.

Указатель данных DPTR(Data PoinTeR)предназначен для хранения 16-разрядного адреса внешней памяти данных и состоит из двух программно доступных регистров DPH (Data Pointer High) и DPL (Data Pointer Low), которые могут использоваться в качестве независимых регистров общего назначения, если нет необходимости в хранении упомянутого адреса. Кроме того, DPTR служит базовым регистром при косвенной адресации в некоторых командах пересылки или перехода.

Регистр PCON (Power Control). Конструкция регистра PCON определяется технологией изготовления микроконтроллера. Для варианта изготовления по технологи n-МОП (8051) регистр PCON имеет всего один бит - SMOD, управляющий скоростью передачи последовательного порта. Для варианта изготовления по технологии КМОП (80С51) наименование и назначение разрядов регистра PCON приведены в табл.2.2. Для 8051 и 80С51 расположение и назначение разряда SMOD идентичны. Биты GF0 и GF1 пользователь может задействовать по своему усмотрению. Если в PD и IDL одновременно записана "1", то преимущество имеет PD.

Особенности режима холостого хода и режима микропотребления заключаются в том, что при первом блокируются только узлы, составляющие центральный процессор микроконтроллера (тактовый генератор продолжает функционировать), а при втором блокируется работа всех узлов. Токи потребления микроконтроллера 80С51 в режимах холостого хода и микропотребления составляют соответственно не более 4,2 мА и не более 50 мкА. Для окончания режима холостого хода имеются два способа. Активизация любого разрешенного прерывания автоматически приведет к сбросу бита IDL в "0", оканчивая режим холостого хода, при этом состояние резидентной памяти данных и РСФ остается таким же, каким оно было на момент перехода в указанный режим. После исполнения команды (инструкции), обеспечивающей выход из подпрограммы обслуживания прерывания, будет выполняться инструкция, которая следует за командой, переведшей микроконтроллер в режим холостого хода. Другим способом окончания режима холостого хода является инициализация (сброс) микроконтроллера. В этом случае сохраняется только содержимое РПД. Указанный способ используется и для окончания режима микропотребления.

 

Таблица 2.2

Биты Наименование Назначение
SMOD Бит удвоения скорости передачи через последовательный порт. При установке в "1" скорость передачи удваивается. Доступен по чтению.
- Не используется.
- Не используется.
- Не используется.
GF1 Программно управляемый флаг пользователя.
GF0 Программно управляемый флаг пользователя.
PD Бит включения режима микропотребления ("1" - включение, "0" - отмена). Доступен по чтению.
IDL Бит включения режима холостого хода. ("1" - включение, "0" - отмена). Доступен по чтению.

 

Регистры TH0, TL0, TH1, TL1 (Timer/counter Low (High) byte). Исходное (текущее) состояние j-го таймера/счетчика T/Cj в микроконтроллере определяется (отражается) программно доступными регистрами THj, TLj. Причем регистр THj - старшие, а регистр TLj - младшие 8 разрядов. Указанные регистры могут быть программно прочитаны или загружены как при выключенных, так и при работающих таймерах/счетчиках. Новая загрузка THj, TLj сразу же означает новую величину с которой будет начат счет в T/Cj, а старая теряется. Если загрузка произведена при включенном T/Cj, то счет продолжается с новой величины. Очередность загрузки регистров THj, TLj произвольная. Выключение T/Cj не искажает код, находящийся в THj, TLj. Таймер/счетчик T/Cj можно выключить, через произвольное время вновь включить и счет начнется с той величины, которая была в регистрах THj, TLj на момент выключения.

Регистр TCON (Timer/counter Control). Наименование и назначение разрядов регистра TCON приведены в табл.2.3. Все разряды этого регистра доступны по записи и по чтению.

 

Таблица 2.3

Биты Наименование Назначение
TF1 Флаг переполнения T/C1.
TR1 Бит включения T/C1. TR1=1 - включен, TR1=0 - выключен.
TF0 Флаг переполнения T/C0.
TR0 Бит включения T/C0. TR0=1 - включен, TR0=0 - выключен.
IE1 Флаг запроса внешнего прерывания .
IT1 Бит, определяющий вид прерывания . IT1=0 - прерывание по уровню (низкому), IT1=1 - прерывание по фронту (переход из"1" в "0").
IE0 Флаг запроса внешнего прерывания .
IT0 Бит, определяющий вид прерывания . IT0=0 - прерывание по уровню (низкому), IT0=1 - прерывание по фронту (переход из"1" в "0").

 

Флаг TFj аппаратно устанавливается в "1" при переходе T/Cj из состояния "все единицы" в состояние "все нули". Если прерывание от T/Cj разрешено, то установка флага TFj вызовет прерывание. Бит TFj аппаратно сбрасывается в "0" при обращении к подпрограмме обработки прерывания. Флаг IEj аппаратно устанавливается в "1" от внешнего прерывания : от низкого уровня или перехода из "1" в "0" сигнала прерывания. Если при этом внешнее прерывание разрешено, то осуществляется переход к подпрограмме его обслуживания. Сброс флага IEj выполняется аппаратно при обслуживании прерывания только в том случае, когда ITj=1.

Регистр TMOD (Timer/counter Mode). Наименование и назначение разрядов регистра TMOD приведены в табл.2.4. Все разряды этого регистра доступны по записи и по чтению.

При работе в качестве таймера содержимое T/Cj инкрементируется с частотой , где f есть частота синхронизации микроконтроллера. При работе T/Cj в качестве счетчика внешних событий, его содержимое инкрементируется в ответ на переход из "1" в "0" сигнала на j-ом счетном входе микроконтроллера. Для надежной работы T/Cj в режиме счетчика необходимо, чтобы максимальная частота указанного сигнала была не более , а уровень этого сигнала оставался неизменным в течение как минимум одного машинного цикла ( ).

 

Таблица 2.4

Биты Наименование Назначение
GATE1 Бит разрешает (запрещает) управлять T/C1 от внешнего вывода . GATE1=1 - управление разрешено, GATE1=0 - управление запрещено.
Бит определяет работу T/C1 в качестве таймера ( =0), счетчика внешних событий ( =1).
М1.1 М0.1 Биты определяют один из 4-х режимов работы T/C1.
      M1.1 M0.1 Режим    
         
         
         
         
GATE0 Бит разрешает (запрещает) управлять T/C0 от внешнего вывода . GATE0=1 - управление разрешено, GATE0=0 - управление запрещено.
Бит определяет работу T/C0 в качестве таймера ( =0), счетчика внешних событий ( =1).
М1.0 М0.0 Биты определяют один из 4-х режимов работы T/C0.
      M1.0 M0.0 Режим    
         
         
         
         

 

Таймер/счетчик T/Cj в режиме 0 (1) представляет собой устройство на основе 13- (16-) разрядного регистра, состоящего из 8-ми разрядов регистра THj и 5-ти младших разрядов (8-ми разрядов) регистра TLj. В режиме 2 T/Cj представляет собой устройство на основе 8-разрядного регистра TLj. При каждом переполнении TLj кроме установки в регистре TCON флага TFj происходит автозагрузка регистра TLj содержимым THj, причем указанная автозагрузка не влияет на содержимое регистра THj. Таймер/счетчик T/C1 в режиме 3 заблокирован (значение кода в регистрах TH1, TL1 не изменяется). Эффект такой же, как при сбросе TR1 в "0". Таймер/счетчик T/C0 в режиме 3 представляет собой два независимых устройства на основе регистров TH0 и TL0. Устройство на основе TL0 может работать в режиме таймера или в режиме счетчика и при переполнении устанавливает флаг TF0. За этим устройством сохраняются биты управления TR0, GATE0, . Устройство на основе регистра TH0 может работать только в режиме таймера. Оно использует бит включения TR1, при переполнении выставляет флаг TF1. Других битов управления устройство на основе TH0 не имеет.

Регистр SCON (Serial port Control) предназначен для приема и хранения кода, который управляет последовательным интерфейсом. Наименование и назначение разрядов регистра SCON приведены в табл.2.5. Все разряды этого регистра программно доступны по записи и чтению.

 

Таблица 2.5

Биты Наименование Назначение
SM0 SM1 Биты определяют один из 4-х режимов работы последовательного порта
    SM0 SM1 Режим Характеристика режима
    Сдвиговый регистр. Скорость (частота) приема/ передачи f/12.
    8-битовый универсальный асинхронный приемник/ передатчик (УАПП). Скорость (частота) приема/ передачи задается частотой переполнений T/C1.
    9-битовый УАПП. Скорость (частота) приема/ передачи f/64 или f/32.
    9-битовый УАПП. Скорость (частота) приема/ передачи задается частотой переполнений T/C1.
SM2 Бит разрешения многопроцессорной работы.
REN Бит разрешает (запрещает) прием. REN=1 - прием разрешен, REN=0 - прием запрещен.
TB8 Девятый бит передаваемых данных в режимах 2, 3.
RB8 Девятый бит принятых данных в режимах 2, 3.
TI Флаг прерывания передатчика.
RI Флаг прерывания приемника.

 

В режимах 2 и 3 при SM2=1 флаг RI не активизируется (не устанавливается в "1"), если девятый принятый бит данных равен "0". В режиме 1 при SM2=1 флаг RI не активизируется, если не принят стоп-бит равный "1". В режиме 0 бит SM2 не используется и должен быть сброшен в "0". Флаг TI аппаратно устанавливается в "1" в конце периода передачи 8-го бита в режиме 0 или в начале периода передачи стоп-бита в других режимах. Флаг RI аппаратно устанавливается в "1" в конце периода приема 8-го бита в режиме 0 или в середине периода приема стоп-бита (девятого бита) в режиме 1 (в режимах 2 и 3) при SM2=0.

Режим 2 и режим 3 последовательного порта позволяют организовать работу микроконтроллеров 8051 в многопроцессорных системах, использующих для обмена информацией между МК разделяемый моноканал (коаксиальный кабель, витая пара, оптоволокно и др.). В этих режимах флаг RI установится только в том случае, когда либо SM2=0, либо принятый девятый бит данных равен "1". Указанную особенность работы последовательного порта можно использовать для организации межконтроллерного обмена следующим образом. Пусть ведущему МК требуется передать блок данных некоторому (нескольким) ведомому (ведомым) МК. С этой целью ведущий МК в протокольном режиме "широковещательной" передачи (всем ведомым МК) выдает в моноканал байт-идентификатор абонента (код адреса МК-получателя), который отличается от байтов данных только тем, что в его девятом бите содержится "1". Программа реализации протокола сетевого обмена информацией должна быть построена таким образом, чтобы при получении байта-идентификатора во всех ведомых МК произошли прерывание прикладных программ и вызов подпрограммы сравнения байта-идентификатора с кодом собственного сетевого адреса. Адресуемый МК сбрасывает свой управляющий бит SM2 в "0" и готовится к приему блока данных. Остальные ведомые МК, адрес которых не совпал с кодом байта-идентификатора, оставляют неизменным состояние SM2=1 и передают управление основной программе. Байты данных, поступающие по моноканалу в последовательный порт ведомых микроконтроллеров у которых SM2=1, прерывание не вызывают (не устанавливается флаг RI), т.е. игнорируются.

Регистр SBUF (Serial port Buffer). Через SBUF обеспечивается программный доступ к регистрам передатчика и приемника последовательного порта. Причем передача начинается любой командой микроконтроллера, использующей SBUF в качестве регистра назначения, т.е. выполняющей операцию "запись в SBUF".

Регистр IE (Interrupt Enable) используется для разрешения или запрещения прерываний от соответствующих источников. Наименование и назначение разрядов регистра IE приведены в табл.2.6. Все биты указанного регистра программно доступны по записи и чтению.

Регистр IP (Interrupt Priority) используется для установки уровня приоритета прерывания для каждого из пяти источников прерываний. Наименование и назначение разрядов регистра IP приведены в табл.2.7. Все биты этого регистра программно доступны по записи и чтению. Наличие в заданном разряде регистра IP "1" устанавливает для соответствующего источника высокий уровень приоритета, а наличие "0" - низкий уровень приоритета.

 

Таблица 2.6

Биты Наименование Назначение
EA Бит управления всеми источниками прерываний одновременно. EA=0 - прерывания запрещены, EA=1 - прерывания могут быть разрешены индивидуальными разрешениями EX0, EX1, ET0, ET1, ES.
- Не используется.
- Не используется.
ES Бит управления прерыванием от последовательного порта. ES=0 - прерывание запрещено, ES=1 - прерывание разрешено.
ET1 Бит управления прерыванием от T/C1. ET1=0 - прерывание запрещено, ET1=1 - прерывание разрешено.
EX1 Бит управления прерыванием от внешнего источника . EX1=0 - прерывание запрещено, EX1=1 - прерывание разрешено.
ET0 Бит управления прерыванием от T/C0. ET0=0 - прерывание запрещено, ET0=1 - прерывание разрешено.
EX0 Бит управления прерыванием от внешнего источника . EX0=0 - прерывание запрещено, EX0=1 - прерывание разрешено.

 

Программа обработки прерывания с низким уровнем приоритета может быть прервана запросом прерывания с высоким уровнем приоритета, но не может быть прервана другим запросом прерывания с низким уровнем приоритета. Программа обработки прерывания с высоким уровнем приоритета не может быть прервана никаким другим запросом прерывания ни от одного из источников. Если два запроса с разными уровнями приоритета приняты одновременно, сначала будет обслужен запрос с высоким уровнем приоритета. Если одновременно приняты запросы с одинаковым уровнем приоритета, обработка их будет производится в порядке, задаваемом последовательностью внутреннего опроса флагов прерываний. Таким образом, в пределах одного приоритетного уровня существует еще одна структура приоритетов:

 

Источник Приоритет внутри уровня
IE0 высокий
TF0  
IE1  
TF1  
RI, TI низкий

 

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

 

Таблица 2.7

Биты Наименование Назначение
- Не используется.
- Не используется.
- Не используется.
PS Бит установки уровня приоритета прерывания от последовательного порта.
PT1 Бит установки уровня приоритета прерывания от таймера/счетчика T/C1.
PX1 Бит установки уровня приоритета прерывания от внешнего источника .
PT0 Бит установки уровня приоритета прерывания от таймера/счетчика T/C0.
PX0 Бит установки уровня приоритета прерывания от внешнего источника .

 

Регистр PSW (Program Status Word). Наименование и назначение разрядов регистра PSW приведены в табл.2.8.

Аккумулятор A представляет собой 8-разрядный регистр, который является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверки на нуль, формирование флага паритета и т.п.

Регистр B - 8-разрядный регистр, используемый в сочетании с аккумулятором при выполнении операций умножения и деления для хранения второго входного операнда и помещения возвращаемых 8-ми битов результата. В других операциях регистр B является обычным регистром общего назначения.

 

Таблица 2.8

Биты Наименование Назначение
C Флаг переноса. Устанавливается в "1" (сбрасывается в "0") аппаратно или программно. Аппаратно устанавливается (сбрасывается) во время выполнения команды сложения или вычитания при наличии (отсутствии) соответственно переноса или заема в 7-ом бите результата. Во время выполнения команды умножения или деления флаг всегда аппаратно сбрасывается.
AC Флаг дополнительного переноса. Устанавливается (сбрасывается) аппаратно или программно. Аппаратно устанавливается (сбрасывается) во время выполнения команды сложения или вычитания при наличии (отсутствии) соответственно переноса или заема в 3-ем бите результата.
F0 Программно управляемый флаг пользователя.
RS1 RS0 Разряды управления выбором банка рабочих регистров. Устанавливаются (сбрасываются) программно.
      RS1 RS0 Банк    
         
         
         
         
OV Флаг переполнения. Устанавливается (сбрасывается) аппаратно или программно. Аппаратно устанавливается во время выполнения команды сложения (вычитания) если есть перенос (заем) в 6-ом бите результата и нет переноса (заема) в бите 7, или есть перенос (заем) в бите 7 и нет в бите 6, в противном случае флаг сбрасывается. Во время выполнения команды деления флаг аппаратно сбрасывается, а в случае деления на нуль - устанавливается. При умножении флаг аппаратно устанавливается если результат больше 255, в противном случае - сбрасывается.
без имени Флаг пользователя. Устанавливается (сбрасывается) программно. Доступен по чтению.
P Флаг паритета. Программно доступен только по чтению. Аппаратно сбрасывается (устанавливается) в каждом машинном цикле для индикации четности (нечетности) количества разрядов аккумулятора, находящихся в состоянии "1". Если в аккумуляторе все разряды сброшены в "0", флаг аппаратно сбрасывается.