МИКРОКОНТРОЛЛЕРЫ
\
\
Хранение в автоматной табли-
це вместо адресов подпрограмм
проверки и подпрограмм выхода их
кодов позволяет сократить размер
одной строки таблицы с 6 до 4 байт.
Для больш их автоматных таблиц
такая экономия оказывается весь-
ма значительной.
Теперь посмотрим, как выглядят наши подпрограммы выхода. Начнем с подпрограммы “Запустить 20 мсек”:
s ta r t2 0 :
; Подпрограмма Запуска виртуального таймера на 20 м сек. При входе
; предполагается, что р е ги стр #с содержит адрес описателя
; соответствующ его автомата.
m ovl
%с6,20
; Занести задержку в 20 м сек,
m ovl
%с7,0
r t s
Как видите, подпрограмма просто
заносит в виртуальный таймер задер-
жку в 20 мсек! Обратите внимание -
программа
понятия не имеет,
в ка-
кой именно из четырех виртуальных
таймеров она ее заносит: она зано-
сит ее в виртуальный: таймер того ав-
томата, который в данный момент
“подсунули” программе с ,помощью
сегментного регистра
#С!
Вот в чем
проявляется сила программистского
приема
передачи параметров:
вме-
сто четырех частных случаев наша
подпрограмма теперь обрабатывает
один общий случай!
А вот как выглядит подпрограмма “Включить красный и установить задержку”:
tu rn o n :
; Подпрограмма включения іф асного и запуска виртуального таймера
; на заданную задержку. При входе предполагается, что р е ги стр #С
; содержит адрес описателя соответствующего автомата.
ХОГ
%Ь2, %cl
; <1> Переключить красный и зеленый светодиод в соответствии
; с заданной в автомате маской.
mov
%с6,%с4
; <2> Занести заданную задержку в таймер.
IUOV
%с7,%с5
r t s
Смотрите - тот же самый прием
передачи параметров
позволил на-
писать одну общую подпрограмму
вместо четырех частных:
1. Включить красный - означает
погасить соответствующий ему зеле-
ный светодиод. Проще говоря - для
включения красного надо изменить на
противоположные сигналы на линии
зеленого светодиода (вместо лог.1
сделать лог.О) и на линии красного све-
тодиода (вместо лог.О сделать лог.1),
относящихся к данному автомату. И
именно это мы делаем командой
хог!
В этом состоит ее вторая “хитрость”
- с ее помощью можно изменить на
противоположные значения тех битов,
для которых
в
правом операнде коман-
ды указано значение лог. 1 (именно та-
ким способом - через
хог
- фактичес-
ки работают и команды Ыд1 и ЫдИ).
Это - тоже
техника использования
масок.
Еще раз обратите внимание -
подпрограмма
понятия не имеет,
ка-
кие реально биты регистра порта от
этого переключатся: это определяется
исключительно маской (содержимым
ячейки
%с1),
“подсунутой” программе.
2. А вот как устанавливается за-
держка виртуального таймера! Какая
задержка? А та, которая задана в
описании автомата (ячейки %с4, %с5).
А какое именно там значение?
А кто
его знает!
Подпрограмме это
совер-
шенно не интересно
- она запусти-
ла в работу виртуальный таймер ав-
томата, а на какое время - определя-
ется тем, что мы занесли в автомат
при инициализации его описателя.
Кстати - видите, как просто запускать
виртуальный таймер: заносим в ячей-
, ки нужную задержку - и все, процесс
пошел! Правда, в данном примере
есть одна тонкость, которую мы не
учли, но ее мы рассмотрим в одной
из последующих статей, когда кос-
немся вопросов т.н. параллельного
программирования.
И последние две подпрограммы - “Отключить красный и останов таймера” и “Останов таймера”:
tu r n o ff :
; Подпрограмма отключения красного и останова виртуального таймера.
; При входе предполагается, что регистр #С содержит адрес описателя
; соответствующего автомата.
х о г
%Ь2, %с1
; Переключить красный и Зеленый светодиод в соответствии с Заданной
;
в автомате маской.
s to p :
; Подпрограмма останова виртуального таймера.
; При входе предполагается, что р еги стр #С содержит адрес описателя
; соответствующего автомата.
m ovl
%с6,0
; Занести задержку в 0 мсек —
это и будет останов!
m ovl
%с7,0
r t s
\
47
Радиолюбитель - 0 2 /2 0 0 6 |
предыдущая страница 46 Радиолюбитель 2006-02 читать онлайн следующая страница 48 Радиолюбитель 2006-02 читать онлайн Домой Выключить/включить текст