i
МИКРОКОНТРОЛЛЕРЫ
I
Александр Черномырдин
E-mail: chavl 961
mail.ru
Продолжение. Начало в №8/2005
Автоматное
программирование
для микроконтроллеров
Как видите, куски программы по-
лучились очень похожи, поэтому
разберем подробно только один из
них - с меткой cond_0:
1.
Вначале проверяем, нажата ли
кнопка “торш ера” (терминальный
символ “Потянуть за веревочку”).
Обратите внимание на схему “тор-
шера” - когда кнопка будет нажата,
на линии А[0] будет присутствовать
сигнал лог.О (“шиворот-навыворот”)!
Для проверки бита в системе команд
процессора есть команда b ttl (на-
помним читателям то, о чем мы го-
ворили в предыдущей статье - в си-
стеме команд процессора существу-
ют по две отдельных команды: с суф-
фиксом I - для проверки битов из
младшей тетрады байта, и с суф-
фиксом h - для проверки старшей
тетрады). В принципе, в команде btt
можно проверять и несколько битов
сразу, но так ею практически никог-
да не пользуются - по результату ее
работы устанавливаются флаги Z и
S в регистре состояния, и если про-
веряемых битов будет несколько, не-
понятно, о каком из проверяемых би-
тов эти флаги будут говорить.
2. Далее следует команда услов-
ного перехода jnz на метку again, т.е.
новый цикл работы автомата. Это
означает, что ожидаемый терми-
нальный символ “Потянуть за вере-
вочку” еще не пришел на вход авто-
мата (т.е. на линии А[0] пока присут-
ствует лог. 1), поэтому никаких дей-
ствий по обработке терминального
символа пока не требуется.
3. Командой m ovl мы изменяем
номер текущего состояния автома-
та: 0 -» 1 . На эту команду мы попа-
даем, когда кнопка “торшера” нажа-
та, и, следовательно, предыдущая
команда условного перехода была
проигнорирована микроконтролле-
ром (терминальный символ “Потя-
нуть за веревочку” все-таки пришел).
4.
И, наконец, выполняем полез-
ное действие, предусмотренное на
случай прихода данного терминаль-
ного символа - включаем лампочку
командой Ыв!.
Вот, по сути дела, вся реализа-
ция автомата методом эи^сИ-техно-
логии.
Теперь попытаемся реализовать
наш автомат вторым способом - на-
писать программу-интерпретатор
автоматной таблицы. Начальный
участок программы, т.е. инициали-
зация портов микроконтроллера,
остается прежним, поэтому мы его
здесь не приводим, а начинаем сра-
зу с реализации интерпретатора:
again:
$3:
х jsr
ldr
#A,40h
ldr
#B,00h
movl
%a0,0
movl
%Ь2,0
ldal
#6,table
ldah
#7,table
mov
%a3,%d7
cmp
%а0,%d7
jne
$1
mov
%al,%d7
mov
%a2,%d7
push
#6
push
#7
mtpr
#6,%al
mtpr
#7,%a2
pop
#7
pop
#6
jnc
$1
mov
%a0,%d7
mov
%al,%d7
mov
%a2,%d7
mtpr
#6,%al
mtpr
#7,%a2
44
f
; Сегмент А - ячейки ОЗУ для работы с автоматом.
; Сегмент В - адреса рабочих регистров портов и таймера
; В ячейке %а0 будем хранить номер текущего состояния
; автомата. В начале работы он равен нулю
; Выключить лампочку.
; <1> Загружаем адрес начала таблицы автомата в 11*1
; <2> Занести в ячейку %аЗ число строчек в таблице
; автомата
(%аЗ у нас будет переменной цикла)
; <3> Номер состояния автомата совпадает с табличным?
; Нет - перейти к следующей строке таблицы.
; <4> Занести адрес подпрограммы анализа терминального
; символа во временные ячейки %а1 и %а2
; <5> Сохранить 11*1 в стеке
; <6> Занести адрес подпрограммы проверки терминального
; символа в 11*1
; <7> Вызвать подпрограмму проверки терминального
; символа.
; <9> Восстановить 11*1 из стека
; <10> Нет, ожидаемого символа пока нет.
..
; <11> Да, символ пришел - изменить состояние автомата.
; <12> Занести адрес подпрограммы выхода во временные
; ячейки %а1 и %а2
; Занести адрес подпрограммы выхода в 11*1
| Радиолюбитель - 0 9 /2 0 0 5
предыдущая страница 42 Радиолюбитель 2005-09 читать онлайн следующая страница 44 Радиолюбитель 2005-09 читать онлайн Домой Выключить/включить текст