fl
МИКРОКОНТРОЛЛЕРЫ
ц
;
Участок
automat:
ldi
ldi
rcall
mov
rcall
rep_l:
rcall
erp
se
rjmp
rcall
epse
rjmp
rcall
mov
rcall
sbre
rcall
sbre
rcall
sbre
rcall
sbre
rcall
sbre
rcall
sbre
rcall
sbre
rcall
sbre
rcall
reti
skip3:
rcall
skip2:
rcall
rcall
dec
brne
exit:
out
reti
кода, реализующий автомат.
гЗО,low(table*2)
r3l,high(table*2)
getByte
r3,r0
getByte
; <1> Загрузить в регистр
Ъ
адрес начала
; автоматной таблицы.
; Загрузить длину автоматной таблицы.
; Занести ее в счетчик цикла.
; <2> Пропустить лишний пустой байт в автоматной
; таблице.
getByte
rO,rl
skip3
getByte
rO,r2 .
skip2
getByte
rl,rO
getByte
rO, 0
tumOnLED
rO, 1
turnOffLED
rO, 2
turnOf fTimer
rO, 3
turnOn2Omsec
rO, 4
tumOn05sec
rO, 5
turnOnlO sec
rO, 6
changeBrigh t
rO, 7
changesign
; <3> Считать номер текущего состояния из
; автоматной таблицы.
; Оно равно ожидаемому?
; Нет - сдвинуть регистр г на начало следующей
; строки автоматной таблицы.
; <4> Оно совпадает с ожидаемым - считать
; следующий байт.
; Терминальный символ на входе автомата
совпадает с ожидаемым?
; Нет - сдвинуть регистр
Ъ
.
на начало, следующей
; строки автоматной таблицы.
; <5> Считать номер нового состояния автоиата
; заменить им текущее состояние.
; <6> Считать байт с флагами выходных символов.
; Вариант реализации вычисляемого перехода.
getByte
getByte
getByte
r3
rep_i
SREG,r4
; <7> Фиктивный пропуск байтов таблицы.
; Вычесть счетчик цикла.
; Цикл еще не.закончен.
; <8> Восстановить регистр состояния.
Служебные подпрограммы
getByte:
lpm
subi
гЗО,-1
sbei
r31,“1
ret
; <9> Загрузить очередной байт из автоматной таблицы.
; Сдвинуть указатель регистра
Ъ
на следующий
; байт автоматной таблицы.
О кончание в № 8/2007
30
il Радиолюбитель - 0 7 /2 0 0 7
предыдущая страница 30 Радиолюбитель 2007-07 читать онлайн следующая страница 32 Радиолюбитель 2007-07 читать онлайн Домой Выключить/включить текст