Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПМПУ / andr.doc
Скачиваний:
40
Добавлен:
20.04.2015
Размер:
710.14 Кб
Скачать

2.1. Программная модель микроконтроллера 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

79

78

2FH

-

-

-

BC

BB

BA

B9

B8

0B8H

77

76

75

74

73

72

71

70

2EH

B7

B6

B5

B4

B3

B2

B1

B0

0B0H

6F

6E

6D

6C

6B

6A

69

68

2DH

AF

-

-

AC

AB

AA

A9

A8

0A8H

67

66

65

64

63

62

61

60

2CH

A7

A6

A5

A4

A3

A2

A1

A0

0A0H

5F

5E

5D

5C

5B

5A

59

58

2BH

SBUF

99H

57

56

55

54

53

52

51

50

2AH

9F

9E

9D

9C

9B

9A

99

98

98H

4F

4E

4D

4C

4B

4A

49

48

29H

97

96

95

94

93

92

91

90

90H

47

46

45

44

43

42

41

40

28H

TH1

8DH

3F

3E

3D

3C

3B

3A

39

38

27H

TH0

8CH

37

36

35

34

33

32

31

30

26H

TL1

8BH

2F

2E

2D

2C

2B

2A

29

28

25H

TL0

8AH

27

26

25

24

23

22

21

20

24H

TMOD

89H

1F

1E

1D

1C

1B

1A

19

18

23H

8F

8E

8D

8C

8B

8A

89

88

88H

17

16

15

14

13

12

11

10

22H

PCON

87H

0F

0E

0D

0C

0B

0A

09

08

21H

DPH

83H

07

06

05

04

03

02

01

00

20H

DPL

82H

R7

1FH

SP

81H

87

86

85

84

83

82

81

80

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

Биты

Наименование

Назначение

7

SMOD

Бит удвоения скорости передачи через последовательный порт. При установке в "1" скорость передачи удваивается. Доступен по чтению.

6

-

Не используется.

5

-

Не используется.

4

-

Не используется.

3

GF1

Программно управляемый флаг пользователя.

2

GF0

Программно управляемый флаг пользователя.

1

PD

Бит включения режима микропотребления ("1" - включение, "0" - отмена). Доступен по чтению.

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

Биты

Наименование

Назначение

7

TF1

Флаг переполнения T/C1.

6

TR1

Бит включения T/C1.

TR1=1 - включен, TR1=0 - выключен.

5

TF0

Флаг переполнения T/C0.

4

TR0

Бит включения T/C0.

TR0=1 - включен, TR0=0 - выключен.

3

IE1

Флаг запроса внешнего прерывания .

2

IT1

Бит, определяющий вид прерывания .

IT1=0 - прерывание по уровню (низкому),

IT1=1 - прерывание по фронту (переход из"1" в "0").

1

IE0

Флаг запроса внешнего прерывания .

0

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

Биты

Наименование

Назначение

7

GATE1

Бит разрешает (запрещает) управлять T/C1 от внешнего вывода .

GATE1=1 - управление разрешено,

GATE1=0 - управление запрещено.

6

Бит определяет работу T/C1 в качестве таймера (=0),счетчика внешних событий (=1).

5

4

М1.1

М0.1

Биты определяют один из 4-х режимов работы T/C1.

M1.1

M0.1

Режим

0

0

0

0

1

1

1

0

2

1

1

3

3

GATE0

Бит разрешает (запрещает) управлять T/C0 от внешнего вывода .

GATE0=1 - управление разрешено,

GATE0=0 - управление запрещено.

2

Бит определяет работу T/C0 в качестве таймера (=0),счетчика внешних событий (=1).

1

0

М1.0

М0.0

Биты определяют один из 4-х режимов работы T/C0.

M1.0

M0.0

Режим

0

0

0

0

1

1

1

0

2

1

1

3

Таймер/счетчик 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

Биты

Наименование

Назначение

7

6

SM0

SM1

Биты определяют один из 4-х режимов работы последовательного порта

SM0

SM1

Режим

Характеристика режима

0

0

0

Сдвиговый регистр. Скорость (частота) приема/ передачи f/12.

0

1

1

8-битовый универсальный асинхронный приемник/ передатчик (УАПП). Скорость (частота) приема/ передачи задается частотой переполнений T/C1.

1

0

2

9-битовый УАПП. Скорость (частота) приема/ передачи f/64 или f/32.

1

1

3

9-битовый УАПП. Скорость (частота) приема/ передачи задается частотой переполнений T/C1.

5

SM2

Бит разрешения многопроцессорной работы.

4

REN

Бит разрешает (запрещает) прием.

REN=1 - прием разрешен,

REN=0 - прием запрещен.

3

TB8

Девятый бит передаваемых данных в режимах 2, 3.

2

RB8

Девятый бит принятых данных в режимах 2, 3.

1

TI

Флаг прерывания передатчика.

0

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

Биты

Наименование

Назначение

7

EA

Бит управления всеми источниками прерываний одновременно.

EA=0 - прерывания запрещены,

EA=1 - прерывания могут быть разрешены индивидуальными разрешениями EX0, EX1, ET0, ET1, ES.

6

-

Не используется.

5

-

Не используется.

4

ES

Бит управления прерыванием от последовательного порта.

ES=0 - прерывание запрещено,

ES=1 - прерывание разрешено.

3

ET1

Бит управления прерыванием от T/C1.

ET1=0 - прерывание запрещено,

ET1=1 - прерывание разрешено.

2

EX1

Бит управления прерыванием от внешнего источника .

EX1=0 - прерывание запрещено,

EX1=1 - прерывание разрешено.

1

ET0

Бит управления прерыванием от T/C0.

ET0=0 - прерывание запрещено,

ET0=1 - прерывание разрешено.

0

EX0

Бит управления прерыванием от внешнего источника .

EX0=0 - прерывание запрещено,

EX0=1 - прерывание разрешено.

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

Источник

Приоритет внутри уровня

IE0

высокий

TF0

IE1

TF1

RI, TI

низкий

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

Таблица 2.7

Биты

Наименование

Назначение

7

-

Не используется.

6

-

Не используется.

5

-

Не используется.

4

PS

Бит установки уровня приоритета прерывания от последовательного порта.

3

PT1

Бит установки уровня приоритета прерывания от таймера/счетчика T/C1.

2

PX1

Бит установки уровня приоритета прерывания от внешнего источника .

1

PT0

Бит установки уровня приоритета прерывания от таймера/счетчика T/C0.

0

PX0

Бит установки уровня приоритета прерывания от внешнего источника .

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

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

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

Таблица 2.8

Биты

Наименование

Назначение

7

C

Флаг переноса. Устанавливается в "1" (сбрасывается в "0") аппаратно или программно. Аппаратно устанавливается (сбрасывается) во время выполнения команды сложения или вычитания при наличии (отсутствии) соответственно переноса или заема в 7-ом бите результата. Во время выполнения команды умножения или деления флаг всегда аппаратно сбрасывается.

6

AC

Флаг дополнительного переноса. Устанавливается (сбрасывается) аппаратно или программно. Аппаратно устанавливается (сбрасывается) во время выполнения команды сложения или вычитания при наличии (отсутствии) соответственно переноса или заема в 3-ем бите результата.

5

F0

Программно управляемый флаг пользователя.

4

3

RS1

RS0

Разряды управления выбором банка рабочих регистров. Устанавливаются (сбрасываются) программно.

RS1

RS0

Банк

0

0

0

0

1

1

1

0

2

1

1

3

2

OV

Флаг переполнения. Устанавливается (сбрасывается) аппаратно или программно. Аппаратно устанавливается во время выполнения команды сложения (вычитания) если есть перенос (заем) в 6-ом бите результата и нет переноса (заема) в бите 7, или есть перенос (заем) в бите 7 и нет в бите 6, в противном случае флаг сбрасывается. Во время выполнения команды деления флаг аппаратно сбрасывается, а в случае деления на нуль - устанавливается. При умножении флаг аппаратно устанавливается если результат больше 255, в противном случае - сбрасывается.

1

без имени

Флаг пользователя. Устанавливается (сбрасывается) программно. Доступен по чтению.

0

P

Флаг паритета. Программно доступен только по чтению. Аппаратно сбрасывается (устанавливается) в каждом машинном цикле для индикации четности (нечетности) количества разрядов аккумулятора, находящихся в состоянии "1". Если в аккумуляторе все разряды сброшены в "0", флаг аппаратно сбрасывается.