Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB4_W95.DOC
Скачиваний:
15
Добавлен:
16.04.2013
Размер:
176.13 Кб
Скачать

4.2.3. Аппаратное прерывание reset.

Нажатие на кнопку USERRESETприводит к генерации аппаратного прерыванияRESET. Вектор, по которому при этом передается управление, находится по адресу $1FFE.

В качестве примера рассмотрим следующую программу:

Основная программа:

0200 CLR #$1 Обнуляем регистр данных портаB.

0202 BRA 202 Организуем бесконечный цикл (ожидание прерывания).

Подпрограмма обработки прерывания:

0300 LDA #$FF Программируем портB

0302 STA $5 на запись.

0304 INC $1 Инкрементируем портB.

0306 BRA $306 Организуем бесконечный цикл.

Теперь в ячейки $1FFE, $1FFF запишите адрес подпрограммы обработки прерывания ($300) и запустите программу с адреса $200.

При нажатии на кнопку USERRESETпроизойдет следующее:

1. параллельные порты AèBбудут настроены на чтение (поэтому в программе предусмотрено переключение портаÂна запись);

2. в указатель стека будет загружено значение $FF;

3. áèò Iв регистре признаков установится в "1".

Затем управление будет передано по адресу $300, и начнет выполняться подпрограмма обслуживания прерывания, которая переключает порт Bна запись и инкрементирует его содержимое, что и отображается на светодиодах. Нажимая кнопкуUSERRESET, убедитесь в правильности работы программы, а также в том, что содержимое регистра данных портаBсохраняется при сбросе. По нажатию кнопкиMASTERRESETпрограмма закончит свою работу.

4.2.4. Режимы пониженного энергопотребления stop и wait.

Режим STOP.Вход в режимSTOPосуществляется программно командойSTOP. В режимеSTOP ОЭВМ потребляет минимально возможную энергию, поскольку внутренний тактовый генератор выключен и прекращена работа всех внутренних устройств микроконтроллера. В режиме останова бит I регистра флагов сбрасывается, разрешая внешнее прерывание. Остальные регистры, линии ввода-вывода и память остаются без изменения. Это состояние сохраняется до тех пор, пока не появится сигналIRQ,ëèáîRESET, по приходу которых внутренний генератор возобновляет работу.

Команда WAITтакже переводит микроконтроллер в режим с пониженным потреблением энергии (режимWAIT). В режимеWAITвсе процессы в блоке центрального процессора остановлены, но внутренний тактовый генератор, а также таймер и интерфейсы (связи и периферийный) работают, если они активизированы. В режимеWAITáèòIсброшен, то есть внешние прерывания разрешены. Остальные регистры, линии ввода-вывода и память остаются без изменения. Выход из состояния ожидания происходит при возникновении прерывания от любого из активных устройств микроконтроллера, либо при появлении внешнего аппаратного прерывания (RESET,IRQ).

Äëÿ того, чтобы наглядно показать отличия режимовSTOPèWAIT, используем прерывание от блока таймера INPUT CAPTURE, возникающее при нажатии на кнопкуIC. Для его разрешения необходимо установить бит 7 в регистре управления таймером (TCR). Более подробно прерывания от таймера будут рассмотрены в соответствующей лабораторной работе.

Рассмотрим работу микроконтроллера в режимах STOPèWAITна примере программы, которая при нажатии на конпкуICинвертирует седьмой бит портаB, а при нажатии на кнопкуIRQ-пятый.

Основная программа:

700 LDA #$80 Разрешение прерывания

702 STA $12 IC.

704 LDA #$FF Программирование портаÂ

706 STA $05 на вывод.

708 LDA #$00 Запись начального значения

70A STA $01 â ïîðòÂ.

70C WAITПереход в режимWAITи разрешение

прерываний.

70D BRA $70CПереход на командуWAIT.

Подпрограмма обработки прерывания IC:

800 LDA $01 Инвертирование

802 EOR #$80 старшего бита

804 STA $01 портаÂ.

806 LDA $13 Сброс флага прерывания

808 LDA $15 IC.

80A RTI Возврат из подпрограммы.

Подпрограмма обработки прерывания IRQ:

900 LDA $01 Инвертирование

902 EOR #$20 пятого бита

904 STA $01 портаÂ.

906 RTI Возврат из подпрограммы.

Системные установки:

1FF8 $08 Адрес подпрограммы обработки

1FF9 $00 прерыванияIC.

1FFA $09 Адрес подпрограммы обработки

1FFB $00 прерыванияIRQ.

3FDF $00 Устанавливаем реакцию только на фронт сигналаIRQ.

Запустим программу с адреса $700. Заметим, что при нажатии на кнопку ICизменяется состояние седьмого бита портаB, а при нажатии на кнопкуIRQ - пятого (это отображается на светодиодах). Это означает, что при этом вызываются соответствующие подпрограммы обработки прерываний, то есть выход из режима WAIT происходит как по внешнему прерыванию, так и по прерыванию от блока таймера.

Теперь по адресу $70C вместо команды WAITзапишем командуSTOP. Запустим программу на выполнение. Если сейчас нажать на кнопкуIC, то состояние седьмого бита портаBне изменится, поскольку в режиме STOP таймер не функционирует. Но, если после этого нажать на кнопкуIRQ, то изменится состояние не только пятого, но и седьмого бита портаB. Это происходит из-за того, что аппаратура таймера, восприняв нажатие на кнопкуIC, устанавливает флагICF, но вызов подпрограммы обработки прерывания не производит. Далее, по нажатию кнопкиIRQпроисходит выход из режима STOP, вызывается подпрограмма обработки внешнего аппаратного прерывания, после выполнения которой, так как флагICFвсе еще установлен, происходит вызов подпрограммы обработки прерыванияIC, которая инвертирует седьмой бит портаB и сбрасывает флагICF. Поэтому, если еще раз нажать кнопкуIRQ, то изменится состояние только пятого бита.

Соседние файлы в предмете Отладка микроконтроллеров ЭВМ