Краткие теоретические сведения.
Прерывания делятся на внутренние и внешние. Внешние прерывания поступают на RB0 порта PORTB. Внутренние прерывания возникают при переполненении таймера TMR0 и при снижении напряжения на битах PORTB. При разрешенных прерываниях в случае их возникновения осуществляется переход на регистр 04h в памяти программ, где находится указание о безусловном переходе на подпрограмму обработки прерывания. Сама программа отделяется от основной программы через GOTO $, а заканчивается RETFIE. При переходе на подпрограмму бит GIE в регистре INTCON<7> автоматически сбрасывается в 0. В теле этой подпрограммы анализируются флаги, сообщающие о возможных источниках возникновения прерываний, снимается флаг, сообщающий о возникновении данного прерывания, что исключает повторную обработку прерывания, и выполняются действия, которые необходимо выполнить при появлении данного прерывания. После выполнения инструкции RETFIE восстанавливается автоматически разрешение прерываний и основная программа продолжает выполняться с адреса, перед которым произошло прерывание. Это осуществляется благодаря запоминанию в стеке адреса последней выполненной инструкции. В данном упражнении организуется прерывания от переполнения таймера TMR0. Исходные данные и выполнение программы Соедините разряды PORTC и разъемы сигнальных ламп также, как и в предыдущей лабораторной работе.
Таблица 6 Задания по изменению времени работы TMR0
В соответствии с этим заданием по варианту 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.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|