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

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

Нажатие на кнопку USER RESET приводит к генерации аппаратного прерывания 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.

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

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

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

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

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

Нажимая кнопку USER RESET, убедитесь в правильности работы программы, а также в том, что содержимое регистра данных порта B сохраняется при сбросе.

По нажатию кнопки MASTER RESET программа закончит свою работу.

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

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

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

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

Рассмотрим работу микроконтроллера в режимах 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, то изменится состояние только пятого бита.

Контрольные вопросы и задания.

Соседние файлы в папке Lab_moto