ds
1
; счетчик
Stack:
; отсюда начнется стек
; код программы
--------------------------------1
"РЛ" - НАЧИНАЮ Щ ИМ
[}
cseg
org
0
jrap
st
; переход на начало программы
org
OOOBh
; вектор прерывания ТітегО
jmp
timerO
; переход на обработчик
mov
SP,' #Stack
; установим указатель стека
mov
TMOD, #1
; режим работы ТітегО задаем = 1
; занесем в счетчик начальное значение
mov
Counter, #OffCnt
; начнем с паузы между вспышками
; не Забывайте, что после сброса порт
1ЕО—1,
т.е. светодиод не горит
setb
EA
; разрешаем все прерывания вообще
setb
ETO
; разрешаем прерывания от ТАтегО
setb
TFO
; искусственно вызываем прерывание
setb
TRO
; запускаем ТзтегО
jmp
$
; ничего не делаем больше,
push
PSW
; сохраним слово состояния
ftiov
THO, #InitTH
; Заносим начальное Значение ТНО
mov
TLO, #InitTL
; заносим начальное значение ТДО
; уменьшаем счетчик и проверяем результат на 0
djnz
Counter, int exit
cpl
LED
; переключим светодиод
; занесем в счетчик новое значение
jb
LED, Off time
; если светодиод не горит - идет пауза
; а если горит - другая длительность
mov
Counter, #OnCnt
; Заносим длительность свечения
; выходим из обработчика
pop PSW
reti
Off_time:
mov
Counter, #OffCnt
; Заносим длительность паузы
; выходим из обработчика
pop PSW
reti
int_exit:
; выходим из обработчика, если счетчик не истек
пор
пор
пор
пор
pop
PSW
reti
В этой программе я ввел константу Sq, которая и оп-
ределяет соотношение между длительностью свечения
и паузой, как и требовалось в задании. Значение этой
константы можно задавать от 1 до 99, при этом соответ-
ственно будет меняться и скважность мигания светоди-
ода при сохранении периода вспышек. При этом обра-
ботчик прерывания имеет разветвленный вид (несколь-
ко условных переходов), поэтому пришлось сделать три
разных выхода из него и в одном из них использовать
дополнительные команды NOP для
в ы р а в н и в а н и я д л и -
тельности в ы п о л н ен и я к о д а ,
чтобы время выполнения
обработчика по любой ветке было одним и тем же, ина-
че реализовать высокую точность отработки временных
интервалов невозможно. Если не стремиться к такой вы-
сокой точности выдержки интервалов (что, в общем-то,
для большинства применений допустимо), можно обой-
тись единственной меткой выхода без всяких дополни-
тельных 1МОРов.
Таким образом, мы освоили работу с таймером в ка-
честве формирователя временных интервалов, через ко-
торые можно выполнять любые периодические действия.
Подобное использование таймеров может пригодиться
42
У Радиолюбитель - 1 0 /2007
предыдущая страница 42 Радиолюбитель 2007-10 читать онлайн следующая страница 44 Радиолюбитель 2007-10 читать онлайн Домой Выключить/включить текст