Прерывания делятся на внутренние и внешние. Внешние прерывания поступают на RB0 порта PORTB. Внутренние прерывания возникают при переполненении таймера TMR0 и при снижении напряжения на битах PORTB.
При разрешенных прерываниях в случае их возникновения осуществляется переход на регистр 04h в памяти программ, где находится указание о безусловном переходе на подпрограмму обработки прерывания. Сама программа отделяется от основной программы через GOTO $, а заканчивается RETFIE. При переходе на подпрограмму бит GIE в регистре INTCON<7> автоматически сбрасывается в 0. В теле этой подпрограммы анализируются флаги, сообщающие о возможных источниках возникновения прерываний, снимается флаг, сообщающий о возникновении данного прерывания, что исключает повторную обработку прерывания, и выполняются действия, которые необходимо выполнить при появлении данного прерывания. После выполнения инструкции RETFIE восстанавливается автоматически разрешение прерываний и основная программа продолжает выполняться с адреса, перед которым произошло прерывание. Это осуществляется благодаря запоминанию в стеке адреса последней выполненной инструкции.
В данном упражнении организуется прерывания от переполнения таймера TMR0.
Исходные данные и выполнение программы
Соедините разряды PORTC и разъемы сигнальных ламп также, как и в предыдущей лабораторной работе.
Таблица 6 Задания по изменению времени работы TMR0
Установка предделителя | Вариант 1 | Вариант 2 | Вариант 3 |
В соответствии с этим заданием по варианту 1 коэффициент предделителя 1:4, по варианту 2 – 1:8 и по варианту 3 – 1:16. Для наблюдения за работой программы в режиме симулятора в окно наблюдения включите туда регистры PORTC, OPTION_REG, INTCON, PCL, Wreg, STATUS, TRISC. Снимите окна в начальный момент, в момент запуска программы обработки переполнения. Сравните значение счетчика команд, при котором наступило прерывание при разных значениях предделителя.
|
Программа 4.3
Include<p16F877A.inc>;
org h'00';
GOTO GLAV; при запуске программы сразу происходит переход на
;выполнение основной программы с пропуском инструкции перехода
; на подпрограмму обработки прерывания Prer
nop;
nop;
nop;
org h'04';
GOTO Prer
NOP
GLAV
NOP
NOP
CLRF STATUS
CLRF PORTC
MOVLW b'00100000'
MOVWF INTCON; разрешаем прерывания от TMR0
BSF STATUS,5
CLRF TRISC
MOVLW B'00000000'
MOVWF OPTION_REG;установили предделитель 1:2 и работу таймера
;от внутреннего тактового сигнала
BCF STATUS, 5
MOVLW B'11000000';со значения этого числа начнет работать
;модуль TMR0 со скоростью наполнения регистра, определяемой
;настройкой предделителя в регистре OPTION_REG.
MOVWF TMR0
Sled_det
MOVLW B'00001111'
MOVWF PORTC
GOTO Sled_det
GOTO $
Prer;подпрограмма обработки прерывания, вызванного переполнением
;счетчика TMR0, после ее отработки в PORTC будут гореть все лампы
BCF INTCON,2; сброс флага переполнения таймера
MOVLW b'11111111'
MOVWF PORTC; в PORTC горят все лампы
RETFIE
END; конец программы
Оформление отчета по лабораторной работе
Отчет оформляется на группу. В созданный вордовский файл копируется текст программы и окна по ходу выполнения программы в режиме MPLabSim.
4.13 Контрольные вопросы
1. После выполнения инструкции RETFIE куда возвращается программа?
2. В каком состоянии находится бит разрешения прерываний в регистре INTCON после выполнения инструкции RETFIE?
3. Как изменяется значение в регистре PCL при входе в подпрограмму обработки прерывания и при выходе из нее?
|
4. Где сохраняется значение счетчика регистра, позволяющее при завершении подпрограммы вернутся к выполнению следующей инструкции?
5. После отработки программы обработки прерывания какое значение устанавливается в INTCON<5>? О чем это говорит?
6. В каких банках находятся регистры INTCON и OPTION_REG?
7. Какой производственный процесс может работать под управлением этой программы?
Лабораторная работа № 7 Преобразование аналоговых сигналов. АЦП.
Цель работы: изучение операций преобразования аналоговых сигналов в двоичное значение с помощью АЦП микроконтроллера, применение таймера ТМR0. Процесс преобразования аналогового значения (напряжения, силы тока) в двоичное значение происходит в цифровых измерительных приборах, электросчетчиках, терминалах РЗ и ПА и т.д.
Теоретические сведения
Модуль аналого-цифрового преобразователя (АЦП) имеет восемь каналов у 40/44-выводных микросхем.
Входной аналоговый сигнал через коммутатор каналов заряжает внутренний конденсатор АЦП Chold. Модуль АЦП преобразует напряжение, удерживаемое на конденсаторе Chold в соответствующий 10-разрядный цифровой код методом последовательного приближения. Источник верхнего и нижнего опорного напряжения может быть программно выбран с выводов VDO, VSS, RA2 или RA3.
Допускается работа модуля АЦП в SLEEP режиме микроконтроллера, при этом в качестве источника тактовых сигналов должен быть выбран RC генератор.
Для управления АЦП в микроконтроллере используется 4 регистра.
|
- регистр результата ADRESH (старший бит);
- регистр результата ADRESL (младший бит);
- регистр управления ADCON0;
- регистр управления ADCON1.
Регистр ADCON0 используется для настройки работы модуля АЦП, а с помощью регистра ADCON1 устанавливается какие входы микроконтроллера будут использоваться модулем АЦП и в каком режиме (аналоговый вход или цифровой порт ввода/вывода).
После включения и конфигурации АЦП выбирается рабочий аналоговый канал. Соответствующие биты TRIS аналоговых каналов должны настраивать порт ввода/вывода на вход. Перед началом преобразования необходимо выдержать временную паузу, расчет которой приведен в [11].
Рекомендованная последовательность действий для работы АЦП:
1. Настроить модуль АЦП:
- настроить выводы как аналоговые входы, входы VREF или цифровые
каналы ввода/вывода (ADCON1);
- выбрать входной канал АЦП (ADCON0);
- выбрать источник тактовых импульсов для АЦП (ADCON0);
- включить модуль АЦП (ADCON0).
2. Настроить прерывание от модуля АЦП (если необходимо):
- сбросить бит ADIF в 0 (регистр PIR1<6>);
- установить бит ADIE в 1(регистр PIE1<6>);
- установить бит PEIE в 1(регистр INTCON<6>);
- установить бит GIE в 1(регистр INTCON<7>);
3. Выдержать паузу, необходимую для зарядки конденсатора СHOLD. Пауза
обеспечивается с помощью таймера TMR0.
4. Начать аналого-цифровое преобразование:
- установить бит GO/-DONE в 1(ADCON0<2>).
5. Ожидать окончания преобразования:
- ожидать пока бит GO/-DONE не будет сброшен в 0; ИЛИ
- ожидать прерывание по окончанию преобразования.
6. Считать результат преобразования из регистров ADRESH:ADRESL, сбросить бит ADIF в 0 (регистр PIR1<6>), если это необходимо.
7. Для следующего преобразования необходимо выполнить шаги начиная с пункта 1 или 2. Время преобразования одного бита определяется как время ТAD. Минимальное время ожидания перед следующим преобразованием должно составлять не менее 2 ТAD.