1
МИКРОКОНТРОЛЛЕРЫ
Ь
Александр Черномырдин
E-mail: chav1961 ©mail.ru
Продолжение.
Начало в №11 -12/2005
Автоматное
программирование
для микроконтроллеров - 2
А вот как устроен обработчик прерываний от порта А:
int6: bich
%Ы, 00000001b
Это - команда для отладки (зачем - будет понятно
позднее).
push
#A
<1> Сохранить регистры, которыми мы
push
#C
будем пользоваться
push
#6
Эти регистры используются в интерпретаторе
push
#7
автомата, т.е. их тоже надо сохранить.
..
ldr
#A,60h
<2> Сегмент А - рабочие ячейки обработчика
прерываний.
ldr
#C,4Oh
Сегмент С — адрес описателя текущего автомата.
movl
%a4,4
Загружаем счетчик цикла (будет 4 автомата).
mov
%al, %Ы
<3> Считать состояние линий порта А.
mov
%a2,%al
Можно и %а2,%Ы, но так будет достовернее.
xor
%a0,%al
<4> Определим, какие линии порта изменились.
$4:
mov
%a3,%a0
<5> Определить, есть ли в измененных линиях "наша".
and
%a3,%c0
Накладываем маску текущего автомата на биты
изменившихся линий.
jz
$1
Результат маскирования нулевой - это была не "наша"
кнопка!
mov
%a3,%al
<6> Определить, была ли кнопка нажата или отпущена.
and
%a3,%c0
Накладываем маску текущего автомата на биты
текущего состояния линий порта А.
jz
$2
Кнопка была нажата* (лог.0)
movl
%c3,TERM_DOWN
jmp
$3
$2:
movl
%c3,TERM_ UP
$3:
jsr
automat
<7>
$1:
mfpr
%a3,#C
<8> Сохранить сегмент текущего обрабатываемого
автомата.
addl
%a3,1
Перейти к сегменту следующего автомата.
mtpr
#C,%a3
Загрузить сегмент следующего автомата в регистр #С.
subl
%a4,1
< 9> Вычесть счетчик цикла.
jnz
$4
Цикл не закончен - продолжить.
mov
%a0,%al
<10> Обновить ячейку с прежним состоянием кнопок -
теперь в ней будет текущее состояние.
movl
%dl,00100000b
<11> Сбрасываем сигнал прерывания от порта А и
разрешаем новые прерывания.
pop
#7
<12> Восстанавливаем регистры.
pop
#6
pop
#C
pop
#A
rti
Сразу - необходимые пояснения:
1.
Команды
push
в начале об-
работчика и
pop
- в конце. В прин-
ципе, в данном примере необходи-
мости в них нет, но если бы вместо
команды
wait
в нашей программе
присутствовал бы какой-либо фо-
новый процесс, то любое “само-
вольное" изменение регистров в
обработчике прерываний наруши-
ло бы работу этого процесса. По-
этому общее правило при написа-
нии любого обработчика прерыва-
ний таково -
для всех регистров,
которые будут использованы (чи-
тай - испорчены) в обработчике,
обязательно
необходимо сохра-
нить их значение в стеке данных,
а
перед выходом
из обработчика
^ 45
Радиолюбитель - 01 /2 0 0 6 1
предыдущая страница 44 Радиолюбитель 2006-01 читать онлайн следующая страница 46 Радиолюбитель 2006-01 читать онлайн Домой Выключить/включить текст