Микропроцессоры и микроконтроллеры

 
 
 
«Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня.»
Larry Wall
Русский | Українська


Микропроцессоры и микроконтроллеры :: Принципы программирования MSC-51 :: Управление таймерами-счетчиками (Т/С)

Управление таймерами-счетчиками (Т/С)

Для управления режимами работы Т/С и организации взаимодействия таймеров с системой прерываний используют два РСФ:

- регистр режимов - TMOD - от английского "Timer MODe";

- регистр управления/статуса - TCON - от "Timer CONtrol"

Путем записи числовых кодов в эти регистры таймеры Т0 и Т1 могут быть независимо настроены на разные режимы работы.

Структура регистров TMOD и TCON и назначение битов

Каждый из таймеров Т/С0 и Т/С1 может функционировать в любой из четырех конфигураций - конфигурациях 0,1,2,3. Конфигурации 0,1,2 одинаковые для Т/С0 и T/С1. Конфигурация 3 реализуется в Т/С0 и Т/С1 по-разному. Структура регистра TMOD показана на рис.14.1, а структура регистра управления работой таймеров TCON - на рис.14.2.

Битовая структура регистра TMOD

Рис. 14.1. Битовая структура регистра TMOD

Регистр TMOD не является битово-адресуемым. Нужна загрузка байтового кода!

Битовая структура регистра TCON

Рис.14.2. Битовая структура регистра TCON

TCON является регистром с побитовой адресацией, а приведенные на схеме имена бит представляют собой зарезервированные символические имена Ассемблера. Сброс и установка отдельных бит могут проводиться независимо, что обеспечивает эффективное управление работой таймеров.

Далее индекс "х" будем использовать для обобщенного обозначения номера таймера-счетчика: 0 или 1.

Т а б л и ц а 14.1

Назначение битов регистра режимов TMOD

Символ

Позиция

Назначение

GATE

TMOD.7 (1)

TMOD.3 (0)

Разрешение остановки от прерывания.

При GATE=1 Т/Сх запускается и работает, если бит TRх=1 и на входе ІNTх - уровень "1". При возникновении сигнала INTx=0 Т/Сх останавливается независимо от значения TRx.

При GATE=0 Т/Сх запускается только установкой TRх=1 и останавливается при TRx=0.

С/T

TMOD.6 (1)

TMOD.2 (0)

Выбор режима - таймер или счетчик.

0 - режим таймера,

1 - режим счетчика импульсов по входам Тх.

Продолжение на следующей странице

М1

М0

TMOD.5 (1)

TMOD.1 (0)

TMOD.4 (1)

TMOD.0 (0)

Задание конфигурации (0,1,2,3) таймерных регистров для каждого Т/С в отдельности

М1

M0

Описание режима работы

0

0

ТНх-восьмиразрядный счетчик с предделителем частоты на 32, реализованным на младшей части – регистре TLx

0

1

16-разрядный таймер или счетчик

1

0

TLx работает как восьмиразрядный Т/С с автоперезагрузкой. Стартовое число подсчета задается (и содержится) в ТНх.

1

1

TL0 и TH0 – восьмиразрядные Т/С, которые управляются битами таймеров 0 и 1 соответственно. Таймер 1 – отключается.

Т а б л и ц а 14.2

Назначение битов регистра управления TCON

Имя бита

Позиция

Назначение

TF1

TCON.7

Флаг переполнения таймера 1. Устанавливается аппаратно при переполнении Т/С1. Сбрасывается при обслуживании прерывания аппаратно.

TR1

TCON.6

Бит управления запуском таймера 1. Устанавливается и сбрасывается программно для запуска и останова Т/С1 ("программный выключатель")

TF0

TR0

TCON.5

TCON.4

То же самое, как и для TF1, для таймера Т0

То же самое, как и для TR1, для таймера Т0

IE1

TCON.3

Флаг запроса внешнего прерывания 1. Устанавливается аппаратно при выявлении запроса внешнего прерывания по входу INT1. Сброс зависит от значения бита IT1

IT1

TCON.2

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

Модифицируется программно для задачи правила

восприятия сигнала INT1:

при IT1 = 1 - по срезу (переход "1" -> "0"); сброс IE1 выполняется аппаратно,

при IT1 = 0 - по низкому уровню на входе INT1; сброс IE1 может выполняться программно

IE0

IT0

TCON.1

TCON.0

То же, как и для IE1, по сигналу INT0

То же, как и для IT1, по сигналу INT0

Например, нужно настроить таймер-счетчик 1 на запуск только от бита TR1 в конфигурации 2, а для таймера-счетчика 0 управление запуском может выполняться от TR0 и сигнала прерывания INT0 в конфигурации 1. Таймер-счетчик 1 должен функционировать в режиме таймирования, а таймер-счетчик 0 - в режиме счетчика внешних импульсов. Код настройки таймеров формируем в виде:

init_timers equ 00101101B

Настройка таймеров на нужный режим осуществляется командой

MOV TMOD, #init_timers

Примеры программного управления таймером:

SETB TR1 ; запуск таймера 1

CLR TR0 ; останов таймера 0

Управление запуском от сигналов TRx, INT и GATE иллюстрируется схемой на рис. 14.3.

Управление запуском таймера от сигналов TRx, INT и GATE

Рис. 14.3. Управление запуском таймера от сигналов TRx, INT и GATE.