II
МИКРОКОНТРОЛЛЕРЫ
я-
действий по анализу бита такая же,
как и при анализе других извеще-
ний. Сам вызов подпрограммы ав-
томата и анализа результатов его
работы практически не отличается
от предыдущего участка программы.
24.
Результатом работы автомата
кнопки является некий терминальный
символ, соответствующий тому или
иному приему работы с кнопкой (щел-
чок, двойной щелчок, нажатие с удер-
жанием и т.п.). Если такой символ при
работе автомата кнопки сформирован,
его необходимо передать основному
автомату. Факт формирования терми-
нального символа для основного ав-
томата отмечается битом 4 регистра
г17 - при его наличии дальнейший уча-
сток кода “упаковывает'’1
сформирован-
ный терминал и текущее состояние ос-
новного автомата в один байт, вызы-
вает подпрограмму работы основного
автомата, а затем, по результатам его
работ, заменяет текущее состояние ав-
томата новым. Аналогичным образом
мы поступали при вызовах автомата
кнопки.
25.
Этот участок программы - след-
ствие ограничений архитектуры
АТПпу15. Дело в том, что запись из-
мененного времени в регистры часов
должна была бы производиться в про-
грамме выхода автомата, но, увы -
сделать это в программе выхода не-
возможно. Причина проста-стек воз-
вратов микроконтроллера АТПпу15
имеет глубину всего 3 адреса. Вызов
подпрограммы автомата “съедает” в
нем один адрес, вызов программ вы-
хода - еще один адрес, вызовы под-
программ формирования стартовых/
стоповых последовательностей и пе-
редачи байтов - еще один адрес, а
вызываемая из них подпрограмма
временной задержки (мы разберем ее
немного ниже) уже исчерпывает стек
полностью. Можно, конечно, сэконо-
мить один уровень вложенности, пере-
ходя на программу выхода по птр, а
не по гсаП, но это даст нам, в лучшем
случае, экономию в один адрес, а ведь
мы должны обязательно зарезервиро-
вать еще один адрес для внезапного
вызова обработчиков прерываний! По-
этому в данном случае программа
выхода автомата просто отмечает бит
7 регистра г17, чтобы известить фоно-
вый процесс о необходимости сохра-
нения показаний часов, а уж фоновый
процесс (после анализа этого бита) вы-
полняет требуемые действия (в нем мы
начинаем работу при пустом стеке воз-
вратов, избавляясь от проблемы не-
хватки стека). Вот таким образом в
фоновый процесс и “затесался” кусок
программы выхода автомата.
Теперь - реализация обработчиков прерываний:
Обработчики прерываний системы.
;
Виртуальный таймер системы. Организует двухбайтовый таймер для измерения
; длительности импульса от термодатчика.
ОVII іпб
ІП
г1,ЭКЕв
; <1> Сохранить регистр состояния.
гЫг
РІМВ,2
; Это - импульс?
ІПС
гб
; Нет, пауза!
гЬіс
РІМВ,2
; Это - пауза?
ІПС
г4
; Нет, импульс!
оиб
ЭКЕС,г!
; Восстановить регистр состояния.
гебі
;
Второй виртуальный таймер системы. Отмеряет интервалы для целей управления.
очІО іпб:
іп
г1,ЭКЕв
; <2> Сохранить регистр состояния.
СІЄС
г27
; Вычесть значение виртуального таймера.
Ьгпе
ОІІ 1
; Таймер пока не истек.
эЬг
г17,0x08
; Таймер истек - отметить факт истечения.
о1і_1:
оиб
вВЕЄ,гі
; Восстановить регистр состояния.
гебі
;
Обработчик прерывании от термодатчика. Сохраняет значение виртуального таймера
; в соответствующих ячейках.
ехЬ іп*::
ІСІІ
г28,0
; <3> Для быстрого сброса таймера.
ІП
гі,ТСОТІ
; Считать младший байт таймера.
оиб
ТСЫТ1,г28
; И тут же его сбросить.
шоу
г28,г1
ІП
гі,ЭВЕС
; <4> Сохранить регистр состояния.
гЫг
РІМВ,2
; <5>Это - импульс?
асісі
г 3, г2 8
; Нет, пауза!
гЫс
РІМВ,2
; Это - пауза?
асісі
г5,г28
; Нет, импульс!
30
У Радиолюбитель - 1
1
/2 0 0 7
предыдущая страница 30 Радиолюбитель 2007-11 читать онлайн следующая страница 32 Радиолюбитель 2007-11 читать онлайн Домой Выключить/включить текст