fl
МИКРОКОНТРОЛЛЕРЫ
fl
r28,0
PXNB,2
r4,r28
PINB,2
r6,r28
r2
G І _3
r28,MIDDLE_COUNTER
r2,r2 8
rl7,0x01
SREG,rl
<
6
>
Это - импульс?
Нет, пауза!
Это - пауза?
Нет, импульс!
<7> Вычесть счетчик числа выборок.
Выборки еще не закончены.
..
Обновить счетчик числа выборок.
Отметить факт завершения накопления выборок.
Восстановить регистр состояния.
ldi
sbis
adc
sbic
adc
dec
brne
ldi
mov
sbr
ei_3:
out
reti
Пояснения по программному
коду:
1. Это - обработчик прерывания
от таймера 1. В функции этого тай-
мера входит измерение длительно-
сти импульсов и пауз сигнала, по-
ступающего от датчика температу-
ры. Обратите внимание на следу-
ющую тонкость - счетчики дли-
тельности импульсов (регистры гЗ,
г4) и пауз (регистры г5, гб) у нас
двухбайтовые, но в обработчике
прерываний мы работаем только со
старшими байтами. Связано это с
тем, что при приходе сигнала пре-
рывания нам совершенно досто-
верно известно, что таймер отсчи-
тал 256 импульсов. Инкремент
старшего байта счетчика и есть
сложение всего счетчика с числом
256. С каким именно счетчиком
производить инкремент, определя-
ется анализом сигнала на линии
В[2] - если он равен лог.1, увели-
чивается счетчик импульсов, если
равен лог.0 - счетчик пауз. Ну и,
естественно, при входе в обработ-
чик прерывания необходимо сохра-
нить регистр состояния, а при вы-
ходе из обработчика - восстано-
вить его.
2. Это - обработчик прерываний
от таймера 0. С помощью него реа-
лизуется виртуальный таймер систе-
мы для отсчета различных интерва-
лов (дребезг контактов, автоповторы
и т.д.), нужных для анализа приемов
работы с кнопкой. Принцип постро-
ения этого обработчика был нео-
днократно разобран в цикле статей
проКР878ВЕ1. Отметим только одну
особенность - в данной реализации
не делается проверок на переход
таймера через ноль, поскольку тай-
мер все равно будет остановлен в
программе выхода автомата. Ре-
зультатом работы обработчика, в
конце концов, является взведенный
бит 3 в регистре г17.
3. Обработчик прерываний от
линии В[2], т.е. от термодатчика.
Обратите внимание - на этот раз
вопреки неоднократно данным ре-
комендациям первой командой об-
работчика является вовсе не сохра-
нение содержимого регистра со-
стояния. Связано это с тем, что мы,
во-первых, должны немедленно
считать и сбросить показания тай-
мера 1 (он измеряет длительность
импульсов и пауз), поскольку лю-
бая задержка приведет к появле-
нию систематической погрешности
при расчете температуры, а, во-
вторых, из-за того, что в обработ-
чике прерывания у нас - острая
нехватка свободных регистров.
Именно из-за этого мы считываем
показания таймера в рабочий ре-
гистр, который предназначался для
хранения регистра состояния. Та-
кая “химия” становится возможной
из-эа того, что ни одна из команд,
использованных для реализации
этого участка обработчика, не из-
меняет битов регистра состояния.
В частности, именно поэтому ни в
коем случае нельзя в этом участке
кода вместо команды ldi г28,0 ис-
пользовать команду clr г28!
4. Вот - момент, в который мы
все-таки выполняем сохранение ре-
гистра состояния. Дальнейшие дей-
ствия для точности измерения ин-
тервалов уже не критичны - таймер
перезапущен и продолжает парал-
лельную работу.
5. Теперь необходимо “доплюсо-
вать” считанное из таймера значе-
ние с соответствующим счетчиком
длительностей. Обратите внимание
- по сравнению с обработчиком пре-
рываний от таймера 1,после анали-
за сигнала на линии В[2] “доплюсо-
вываются" прямо противоположные
счетчики (подумайте, почему).
6. В данном участке кода выпол-
няется обработка признака переноса.
7. И, наконец, в этом участке кода
проверяется, закончено ли усредне-
ние показаний термодатчика. Для
обеспечения минимальной погреш-
ности расчета температуры ее рас-
чет выполняется не по одному, а по
нескольким периодам сигнала. Имен-
но здесь и выполняется проверка,
сколько периодов сигнала было фак-
тически отработано. Если необходи-
мая выборка данных накоплена,
взводится бит 0 регистра г17.
Еще раз подчеркнем - для обес-
печения необходимой точности рас-
чета температуры размер обработ-
чиков прерываний сделан мини-
мально возможным.
Теперь рассмотрим программы,
реализующие автомат, и програм-
мы выхода. Как уже было отмече-
но, для упрощения работы с авто-
матной таблицей номер текущего
состояния автомата и терминаль-
ный символ в данной реализации
“упакованы” в 1 байт. Для этого,
если вы обратили внимание на сек-
цию .еяи, все терминальные симво-
лы имеют код, умноженный на 32,
что позволяет просто сложить код
символа с состоянием автомата, не
опасаясь “побочных эффектов’’ -
биты состояния и биты терминалов
никогда не пересекутся. Это позво-
ляет проверить комбинацию “состо-
яние+терминал” одной-единствен-
ной командой ср, что и ускоряет, и
упрощает реализацию автомата.
Радиолюбитель - 1
1 /2007 [)
31
предыдущая страница 31 Радиолюбитель 2007-11 читать онлайн следующая страница 33 Радиолюбитель 2007-11 читать онлайн Домой Выключить/включить текст