|
|
|
|
На рисунке внизу приведена одна из множества схем применения ПИТ в качестве таймера с программируемой длительностью временного интервала T1, подачей звуковых отметок с периодом T2 и сигнализацией с частотой F0 спустя время T1.
Исходные данные для проектирования:
1.Длительность интервала временной задержки T1 = 15сек.
2.Частота входного сигнала Fclk = 2МГц.
3.Частота звуковых отметок F2 = 1Гц.
4.Частота сигнала F0 = 100Гц.
Необходимо для каждого счетчика вычислить коэффициенты деления Ni и управляющие байты.
Счетчик CT0. Биты управляющего байта D7,D6 = 00 для счетчика CT0. Для формирования на его выходе сигнала с частотой 100Гц подходят режимы 2 и 3. Однако в режиме 2 высокая скважность Q импульсов (длительность импульса мала по сравнению с периодом повторения) снижает мощность сигнала в Q/2 раз. Поэтому выбираем режим 3 и биты D3,D2,D1 = x11 = (011 или 111). Коэффициент деления CT0 в режиме 3 N0 = 2000000Гц / 100Гц = 20000(DEC) = 4E20(HEX). Так как 256 < N0(20000) <216 и не делится на 256, то загрузка кода N0 в счетчик должна производиться двумя байтами 4E и 20. Следовательно биты D5,D4 = 11. Осталось найти значение бита D0. Двоично-десятичным кодом значение N0 = 20000 (пять десятичных цифр) невозможно загрузить в 16-ти битовый счетчик (четыре полубайта - четыре десятичных цифры), поэтому D0 = 0 (загрузка N0 в двоичном коде). Таким образом управляющий байт для CT0 будет равен 36(3E):
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | HEX код |
0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 36 |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 3E |
Счетчик CT2. Биты управляющего байта счетчика CT2 D7,D6 = 10. Для формирования на его выходе сигнала с частотой 1Гц также подходят режимы 2 и 3. Однако, в режиме 3 при скважности Q=2 пьезокерамические пластины верхнего динамика будут издавать звук при каждом перепаде на выходе CT2, т.е. отметки времени будут звучать с двойной частотой, что естественно не планировалось. Поэтому выбираем режим 2 и биты управляющего байта D3,D2,D1 = x10 = (010 или 110). Модуль счета N2 счетчика CT2 равен F0 / F2 = 100(DEC) = 64(HEX) и находится в пределах 3<=N2<=255. Из этого следует, что N2 можно записать в счетчик одним младшим байтом, т.е. биты D5,D4 = 01. Однобайтовое значение N2 содержит две тетрады, в которых невозможно разместить три десятичных цифры, поэтому запись N2 должна производиться не двоично-десятичным кодом, а двоичным и бит D0 = 0. Суммируя сказанное получим два возможных значения управляющего байта CT2.
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | HEX код |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 94 |
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 9C |
Счетчик CT1. Биты управляющего байта счетчика CT2 D7,D6 = 01. Временная задержка на его выходе может быть сформирована режимами 0 или 1. В режиме 1 требуется запуск счетчика положительным перепадом на входе GATE. В режиме 0 для работы счетчика на этом входе должен быть сигнал GATE1 = 1, а биты D3,D2,D1 = 000. Коэффициент деления в режиме 0: N1 = (T1 / T2) - 1 = 15/1 -1 = 14(DEC) = E(HEX). Это число также может быть загружено в CT1 одним младшим байтом, поэтому биты D5,D4 = 01. Модуль счета N1 = 14 можно записать, либо шестнадцатиричным кодом E, либо двоично-десятичным кодом 14(BCD). Это число (временная задержка) является тем параметром, который потребитель самостоятельно вводит в таймер и знание шестнадцатиричной системы счисления не входит в круг его обязанностей. Поэтому разработчику таймера желательно предусмотреть установку пользователем числа N1 десятичными цифрами и следовательно бит D0 управляющего байта равен 1. Окончательно, управляющий байт для CT1 будет равен:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | HEX код |
0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 51 |
Программа запуска приведенной схемы таймера:
;++++ подготовка счетчиков таймера к работе в выбранных режимах
mov al,51h; загрузка управляющего байта CT1
out 83h,al; по адресу 83
mov al,9ch ; загрузка управляющего байта CT2
out 83h,al; по адресу 83
mov al,3eh ; загрузка управляющего байта CT0
out 83h,al; по адресу 83
;++++ запись коэффициентов деления Ni в счетчики
;++++ в режимах 0,2,3 счетчики при записи в них последнего
;++++ (единственного) байта Ni начинают счет импульсов CLKi
mov al,14h ; запись N1=14(BCD) в счетчик CT1
out 81h,al; по адресу 81
mov al,64h ; запись N2=100(DEC) в счетчик CT2
out 82h,al; по адресу 82
mov al,20h ; запись младшего байта N0=20000(DEC)=4e20(HEX)
out 80h,al; в счетчик CT0 по адресу 80
mov al,4eh ; а теперь - старшего байта N0
out 80h,al; по тому же адресу
;++++ таймер начал отсчет времени.