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

5.2.3. Реализация функции выходного сравнения (oci).

Рассмотрим третий тип прерываний от таймера - прерывание OCI, генерируемое функцией Output Compare.Напомним, что эта функция срабатывает при совпадении содержимого счетчика таймера со значением в регистре OCR. При этом устанавливается флаг OCF, значение бита OLVL регистра TCR выводится на выход TCMP и, кроме того, если установлен флаг OCIE в регистре TCR, то генерируется прерывание OCI. Для отображения состояния вывода TCMP на плате имитатора внешних устройств установлен светодиод OC.

В качестве примера использования прерывания OC рассмотрим программу, которая управляет яркостью светодиода OC в зависимости от состояния переключателей порта A. Изменение яркости основано на регулировании скважности сигнала, подаваемого на светодиод. Напомним, что скважностью называется отношение периода сигнала к длительности импульса. Регулирование скважности производится с переключателей.

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

300 CLR $04 Программируем порт А на ввод.

302 LDA #$40 Разрешаем прерывания

304 STA $12 ïî ÎÑ.

306 WAIT Ожидаем

307 BRA $306 прерывания.

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

800 LDA $0 Читаем информацию с переключателей.

802 AND #$1F Маскируем три старших бита.

804 BRCLR #0,*$12,$80AЕсли OLVL=0, то переход на $80A.

807 NEGA Вычисляем дополнение

808 ADD #$1F содержимого порта А до $1F.

80A INCA

80B ADD $16 Добавляем

80D STA $16 приращение в

80F LDA $13 регистр ОСR

811 LDA $17 и сбрасываем

813 STA $17 ôëàã OCF.

815 LDA $12 Инвертируем

817 EOR #$01 OLVL

819 STA $12 â TCR.

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

Как видно, действия по регулированию яркости заключаются, в основном, в подпрограмме обработки прерывания OC. Разберем их более подробно.

- из порта А читается число N<32 (выполняется командами по адресам $800 и $802);

- светодиод зажигается на (N+1)*256 и гасится на (32-N)*256 тактов таймера (командами с адресами $804-$813).

Чтобы отличить, какое из двух чисел N*256 èëè (32-N)*256 использовать в качестве приращения в регистре ОСR, предусмотрены команды с адресами $804-$808. Команды по адресам $815-$819 инвертируют состояние бита OLVL и, тем самым, задают состояние светодиода (светится или не светится ) при следующем вызове подпрограммы. Следует отметить необходимость команды INCA по адресу $80A. Если бы ее не было, то для вычисления приращения OCR использовалось бы число в диапазоне 0-31 ( а не 1-32 ). В случае, когда на переключателях установлен 0, приращение OCR также равно 0, и за время выполнения команд $80F-$81B таймер успеет превысить значение, хранящееся в регистре данных ОС. Это приведет к тому, что следующее прерывание наступит более, чем через 60000 тактов, что составляет около 0,1 с., в то время, как необходимо было получить задержку, близкую к 0.

Теперь запишите адрес подпрограммы обработки прерывания ($0800) по адресу $1FF8 и запустите программу с адреса $300. Убедитесь в том, что программа работает правильно. Затем замените команду $80A INCA на NOP и проверьте справедливость сказанного выше об этой команде.

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