Лек2 (1084887), страница 4
Текст из файла (страница 4)
Таблица. 2.7
Биты | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозначение | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
Таблица. 2.8
Биты | Наименов. | Назначение битов | Примечание |
6 4 | TR1 TR0 | Биты выключения Т/С, отдельно для Т/С0 и Т/С1. TR=0 – выключен, TR=1 – включен. | Биты устанавливаются и сбрасываются программно. Доступны по чтению. |
7 5 | TF1 TF0 | Флаги переполнения Т/С. | Биты сбрасываются и устанавливаются аппаратно и программно. Доступны по чтению. |
2 0 | IT1 IT0 | Биты, определяющие вид прерывания по входам INT0, INT1: IТ=0 – прерывание по уровню (низкому) IТ=1 – прерывание по фронту (переход из "1" в "0") | Биты устанавливаются и сбрасываются программно. Доступны по чтению. |
3 1 | IE1 IE0 | Флаги запроса внешних прерываний по входам INT0, INT1 | Биты сбрасываются и устанавливаются аппаратно и программно. Доступны по чтению. |
Биты 4, 5 относятся к Т/С0; биты 6, 7 – к Т/С1. Биты 0,1 определяют внешние прерывания по входу INT0, биты 2,3 – по входу INT1. |
Флаги переполнения TF0 и TF1 устанавливаются аппаратно при переполнении соответствующих Т/С (переход Т/С из состояния "все единицы" в состояние "все нули"). Если при этом прерывание от соответствующего Т/С разрешено, то установка флага TF вызовет прерывание. Флаги TF0 и TF1 сбрасываются аппаратно при передаче управления программе обработки соответствующего прерывания.
Флаги TF0 и TF1 программно доступны и могут быть установлены/сброшены программой. Используя этот механизм, прерывания по TF0 и TF1 могут быть вызваны (установка TF) и отменены (сброс TF) программой.
Флаги IE0 и IE1 устанавливаются аппаратно от внешних прерываний (соответственно входы INT0 и INT1) или программно и инициируют вызов программы обработки соответствующего прерывания. Сброс этих флагов выполняется аппаратно при обслуживании прерывания только в том случае, когда прерывание было вызвано по фронту сигнала. Если прерывание было вызвано уровнем сигнала на входе INT0 (INT1), то сброс флага IE должна выполнять программа обслуживания прерывания, воздействуя на источник прерывания для снятия запроса.
Схема фиксации INT0, INT1, Т0, Т1 представляет собой четыре триггера. В каждом машинном цикле в них запоминается информация с выводов INT0, INT1, Т0, Т1.
Логика управления Т/С синхронизирует работу регистров Т/С0 и Т/С1 в соответствии с запрограммированными режимами работы и синхронизирует работу блока Т/С с работой ОМЭВМ.
2.7. 2. Режимы работы Т/С
Режим работы каждого Т/С определяется значением битов М0, Ml в регистре TMOD. Т/С0 и Т/С1 имеют четыре режима работы. Режимы работы 0, 1, 2 одинаковы для обоих Т/С; Т/С0 и Т/С1 в этих режимах полностью независимы друг от друга. Работа Т/С0 и Т/С1 в режиме 3 различна. При этом установка режима 3 в Т/С0 влияет на режимы работы Т/С1.
Режимы 0 и 3 используются сравнительно редко, поэтому рассматривать их не будем. Рассмотрим только режимы 1 и 2.
Установка битов MХ.1=0, МХ.0=1 определяет режим работы 1. Т/С в режиме 1 представляет собой 16-разрядный счётчик. Т/С0 состоит из программно доступных пар TL0, ТН0, Т/С1 из программно доступных пар TL1, ТН1. Логика работы в режиме 1 на примере Т/С1 показана на рис.2.9. Для Т/С0 логика работы аналогична.
Рис. 2.9. Логика работы Т/С1 в режиме 1
На рис.2.9 источник тактовой частоты обозначен OSC. На выходе OSC — частота Fт. Бит С/Т регистра TMOD определяет работу Т/С или в качестве таймера (С/Т=0), или в качестве счетчика (С/Т=1). Счет начинается при установке бита TR регистра TCON в состояние "1". При необходимости управления счетом извне бит GATE регистра TMOD устанавливается в состояние "1". Тогда при TR=1 счет будет разрешен, если на входе INT0 (для Т/С0) или INT1 (для Т/С1) установление состояние "1" и будет запрещен, если установлено состояние "0". Установка бита TR0 для Т/С0 и TR1 для Т/С1 в состояние "0" выключает Т/С независимо от состояния других битов.
При переполнении Т/С (переход содержимого регистра Т/С из состояния "все единицы" в состояние "все нули") устанавливается флаг TF0 для Т/С0 или TF1 для Т/С1 в регистре TCON.
Установка битов MХ1=1, MХ0=0 определяет режим 2. В этом режиме Т/С представляет собой устройство на основе восьмиразрядного регистра TL0 для Т/С0 и ТL1 для Т/С1. При каждом переполнении TL0 кроме установки в регистре TCON флага TF0 происходит автоматически перезагрузка содержимого из ТН0 в TL0. Соответственно для Т/С1 при переполнении ТL1 в регистре TCON устанавливается флаг TF1 и происходит перезагрузка TL1 из ТН1. Регистры ТН0 и ТН1 загружаются программно. Перезагрузка TL0 из ТН0 и TL1 из ТН1 не влияет на содержимое регистров ТН0 и ТН1. Логика работы Т/С1 в режиме 2 показана на рис.2.10. Логика работы Т/С0 в режиме 2 аналогична.
Рис. 2.10. Логика работы Т/С1 в режиме 2
2.7.3. Применение таймеров/счетчиков:
1.) Таймеры/счетчики могут создавать временные интервалы.
2.) Таймеры/счетчики могут определять длительность отдельных фрагментов программы.
3.) Таймеры/счетчики можно использовать, как частотомер.
4.) Таймеры/счетчики можно использовать для определения длительности импульсов.
5.)Таймер/счётчик 1 в режиме 2 используется как источник синхросигналов для УСАПП.
Пример № 1.
Организовать временную задержку на 100 микросекунд, используя таймер/счетчик ноль. Структурная схема программы на рис.2.11.
РИС.2.11. Структурная схема программы задержки
MOV TL0, #156 ; загрузка константы 156 в TL0; (256 – 100 = 156).
MOV TH0, #0FFH ; запишем в TH0 максимальное значение.
MOV TMOD, #01 ; в регистре TMOD выберем 1 режим работы T/C0.
SETB TR0 ; для пуска T/C0 установим бит TR0 в 1.
POVT: JNB TF0, POVT ; если TF0=0,то переход на метку POVT, а если TF0=1,то переход к следующей команде.
………………………….
Пример № 2.
Подсчитать количество импульсов на входе Т1 за время 50 мс. Таймеры/счетчики ведут два счета одновременно: Т/С0 формирует требуемый временной интервал, Т/С1 подсчитывает количество импульсов на входе Т1 за это время.
Рассмотрим два варианта решения:
-
С программным опросом флага переполнения TF0 и последующим остановом счёта импульсов.
-
Используя режим прерываний. По окончанию заданного времени происходит прерывание от Т/С0, если оно разрешено . Адрес вектора прерывания от Т/С0 равен 0ВН (1110). В подпрограмме обслуживания прерывания остановим счёт внешних импульсов.
Первый вариант
MOV TH0, #3CH ; Запись начальных значений в Т/С0
MOV TL0, #B0H
MOV TL1, #0 ; Обнуление (0) (TL1)
MOV TH1, #0 ; (0) (TH1)
ORL TCON, #01010000В ; Одновременный запуск Т/С
POVT: JNB TF0, POVT ; если TF0=0, то переход на POVT, а если TF0=1,то выполняется следующая команд.
CLR TR1 ; останов счётчика внешних импульсов
END
Второй вариант
ORG 0 ; Директива размещения в памяти программ
LJMP MAIN ;Безусловный переход к осн. программе
ORG 0BH ;Адрес вектора прерывания
CLR TR1 ; Останов счётчика внешних импульсов
RETI ; Возврат из подпрограммы обслуживания прерывания
;Основная программа
MAIN: MOV TH0, #3CH ; (3CH)(TH0)
MOV TL0, #B0H ;(B0H) (TL0)
MOV TL1, #0 ; (0) (TL1)
MOV TH1, #0 ; (0) (TH1)
ORL TCON, #01010000В ; (01010000) ( TCON)
SETB ET0 ;Разрешение прерываний от Т/С0
SETB EA ;Общее разрешение прерываний
END ;Директива окончания текста программы
Пояснение к выбору начального значения таймера:
Полный цикл 16-разрядного счётчика: 65536 микросекунд.
50 мс = 50000 мкс. Значит, первоначально должно быть записано: 65536 – 50000 = 15536 (мкс). Переведем 15536 в 16-тиричную систему счисления:
Получим: 3CB0.
Проверим: 3CB0 = 3 ∙ 4096 + 12 ∙ 256 + 11 ∙ 16 + 0 ∙ 1 = 15536.
3C (16) = 60 (10) = 111100 (2), а B0 (16) = 176 (10) = 10110000 (2).
Пример 3
Измерить длительность положительного импульса на входе INT0. Связь таймера/счётчика Т/С0 с выводом INT0 осуществляется битом GATE0. При установки этого бита в единичное состояние, т.е. при GATE0 =1 счёт ведётся до тех пор, пока на входе INT0 присутствует высокий потенциал. Настроим Т/С0 на работу в режиме 1 в качестве таймера и будем проверять состояние INT0 (Р3.2). При появлении нулевого состояния на этом входе прекратим счёт.
MOV TMOD, # 00001001B; Настройка Т/С0
SETB TR0 ; Запуск Т/С0
POVT: JB P3.2, POVT; Проверка состояния входе INT0