і
МИКРОКОНТРОЛЛЕРЫ
і
Обратите внимание, в начале
программы появились некоторые
отличия по сравнению с прежней
программой - в подрегистры 6 и 7
порта А мы занесли лог.1 в бит,
соответствующий линии, к которой
подключена кнопка: нас теперь бу-
дут интересовать сигналы прерыва-
ний при изменения сигнала на этой
(и только на этой!) линии. Кроме
того, по адресу ОООбИ теперь вмес-
то команды
пор
расположена коман-
да перехода на обработчик преры-
ваний от порта А (именно по этому
адресу она и должна находиться).
ldr
#A,4Oh
ldr
#B,OOh
movl
%a0,0
movl
%Ь2,0
movl
%dl,00100000b
sst
00001000b
wait
jmp
$1
; Сегмент А - ячейки ОЗУ для работы с автоматом.
; Сегмент В - адреса рабочих регистров портов и таймера
; В ячейке %а0 будем хранить номер текущего состояния
; автомата. В начале работы он равен нулю
; Выключить лампочку (исходное состояние)
*•
; <1> Разрешить прерывания от порта А.
; <2> Включить механизм работы маскируемых прерываний.
; <3> Переход в состояние ожидания.
; <4> Снова переход в состояние ожидания.
По сравнению с прежним вари-
антом программы
(см предыдущую
статью цикла)
в новый добавились
четыре последние команды:
1. Команда
movl %d1
устанав-
ливает бит разрешения прерыва-
ний от порта А. Именно этим битом
мы включим работу механизма
прерываний для порта А - без него
никакие изменения сигнала на ли-
нии А[0] никакого прерывания не
вызовут.
2.
Командой
sst
мы разрешаем
работу механизма прерываний в
целом, устанавливая бит разреше-
ния прерываний в регистре состо-
яния процессора (формат регист-
ра состояний был описан в статье
“Первая программа для микро-
контроллера”).
3. Новая, ранее не использовав-
шаяся команда -
wait.
Она вызывает
останов работы микроконтролле-
ра, т.е. прекращение выполнения
программы. В таком состоянии
микроконтроллер будет находить-
ся до тех пор, пока не возникнет
какое-нибудь прерывание. При по-
явлении любого сигнала прерыва-
ния выполнение команды
wait
за-
канчивается, и начинается работа
обработчика прерываний, а после
него - выполнение команды, сле-
дующей за
wait.
Эту команду обыч-
но используют тогда, когда нечем
занять процессор микроконтролле-
ра. Кроме команды
wait
в системе
команд процессора есть другая,
похожая на нее команда -
sip
(или
stop).
Отличие команды
sip
от ко-
манды
wait
в том, что при ее вы-
полнении, кроме останова работы,
останавливается также тактовый
генератор микроконтроллера, т.е.
микроконтроллер “засыпает”. В та-
ком “спящем” режиме микроконт-
роллер потребляет ничтожно ма-
лый ток, что бывает важно и полез-
но для устройств с маломощным
батарейным питанием. Недостаток
команды
sip
- сравнительно мед-
ленный выход микроконтроллера
из “спячки”: если для микроконт-
роллера был задан бит задержки
запуска в регистре конфигурации,
эта задержка происходит не толь-
ко при включении микроконтролле-
ра, но и при завершении команды
sip.
4.
И, наконец, команда перехо-
да вновь на команду
wait,
образу-
ющая, таким образом, бесконеч-
ный цикл ожидания.
А вот как выглядит обработчик
прерывания от порта А:
int6:
mial
%al,labels
; В рабочую ячейку %а1 загружаем адрес таблицы
mi ah
%a2,labels
; переходов
(младший байт), в %а2 - старший байт
add
%al,%a0
; Складываем адрес перехода с номером состояния
adc
%a2
; Распространяем перенос
mtpr
#6,%al
; Загружаем вычисленный адрес в ІЯ1
mtpr
#7,%a2
ijmp
; Переходим по вычисленному адресу.
labels: jmp
cond 0
; Таблица перехода на участки, соответствующие
jmp
cond_l
; состояниям автомата.
jmp
cond_2
jmp
cond 3
cond 0: bttl
%Ы, 00000001b
; Нажата ли кнопка "торшера" (лог.0)
jnz
exit
; Пока нет — завершить обработчик
movl
%a0,1
; Теперь новое состояние автомата — 1
btsl
%Ь2,00000001b
; Включить лампочку.
jmp
exit
cond 1: bttl
%Ы, 00000001b
; Отпущена ли кнопка "торшера" (лог.1)
jnz
exit
; Пока нет - завершить обработчик
movl
%a0,2
; Теперь новое состояние автомата = 2
40
\
| Радиолюбитель - I 1/2005
предыдущая страница 38 Радиолюбитель 2005-11 читать онлайн следующая страница 40 Радиолюбитель 2005-11 читать онлайн Домой Выключить/включить текст