Д. В. Андреев Программирование микроконтроллеров mcs-51

Вид материалаУчебное пособие
Регистры TH0, TL0, TH1, TL1
Регистр SBUF
Подобный материал:
1   2   3   4   5   6   7   8   9   10

Регистры 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

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