Регистр управления микроконтроллером - MCUCR
· Биты 7... 4 управляют режимами энергосбережения. · Биты 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 bit 1 and bit 0 – Биты управления идентификацией внешнего прерывания 1. · Биты 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 bit 1 and bit 0 – Биты управления идентификацией внешнего прерывания 0. Биты ISC задают условия формирования запросов прерывания по входам INT1 и INT0 в соответствии с таблицей 13. Таблица 13. Задание характера сигналов прерываний 1 и 0
При изменении битов ISC в регистре MCUCR соответствующее прерывание должно быть запрещено путем очистки бита разрешения прерывания в регистре GICR. В ином случае может произойти прерывание. Условия возникновения запроса прерывания 2 задаются битом ISC2 в регистре управления и состояния микроконтроллера MCUCSR. Регистр управления и состояния микроконтроллера – MCUCSR
· Бит 6 – ISC2: Interrupt Sense Control 2 – Бит управления идентификацией внешнего прерывания 2. Если этот бит сброшен в 0, то запрос прерывания генерируется по спадающему фронту сигнала на INT2, если бит установлен в 1, то запрос прерывания генерируется по нарастающему фронту сигнала на INT2. В отличие от входов внешних прерываний INT0 и INT1 на входе INT2 обнаружение фронтов сигналов происходит асинхронно, т. е. не требует наличия тактового сигнала.
· Остальные биты регистра MCUCSR используются для индикации состояния и управления различными программно-аппаратными средствами микроконтроллера.
При проведении лабораторной работы запускается фоновая программа, которая будет прерываться внешними источниками INT0 и INT1. Разрешение прерываний и условия возникновения сигналов запроса прерывания задаются с тумблеров блока управления. В каждом варианте указано, какие внешние визуальные проявления должны происходить при прерывании. Каждый обучающийся при выполнении работы должен посмотреть реакцию системы при следующих ситуациях: а) запретить все прерывания и убедиться, что включения и отключения тумблеров INT0 и INT1 не оказывают влияния на работу фоновой программы; б) разрешить прерывания по перепаду для INT0 и INT1 и посмотреть реакцию микроконтроллера на эти прерывания; в) убедиться, что прерывание по INT0 прерывает выполнение программы по INT1; г) повторить действия пунктов б) и в) при задании прерываний по уровню и проанализировать, какие отличия имеются при обработке прерываний по уровню. Ниже приведен пример одного из вариантов программы при выполнении лабораторной работы. ; Пример программы для изучения внешних прерываний .include "m8535def.inc" ; ***Формирование таблицы переходов*** .org $000 rjmp start .org $001; вектор int0 rjmp pr0 .org $002; вектор int1 rjmp pr1 .org $003; вектор Timer2 Compare reti .org $004; вектор Timer2 Overflow reti .org $005; вектор Timer1 Capture reti .org $006; вектор Timer1 CompareA reti .org $007; вектор Timer1 CompareB reti .org $008; вектор Timer1 Overflow reti .org $009; вектор Timer0 Overflow reti .org $00A; вектор SPI reti .org $00B; вектор приемника USART reti .org $00C; вектор Буфер Передатчика пуст USART reti .org $00D; вектор передатчика USART reti .org $00E; вектор ADC преобразователя reti .org $00F; вектор EEPROM
reti .org $010; вектор аналогового компаратора reti ; ***Фоновая программа*** .cseg .org $030 start: ldi r16,$00; загрузка указателя стека через регистр r16 out sph,r16 ldi r16,$0ff out spl,r16
ldi r16,$f0; выводы PD0, PD1, PD2 и PD3 конфигурировать как out DDRD,r16; входы, а остальные выводы порта D как выходы
ldi r16,$ff; выводы порта С конфигурировать как выходы out DDRC,r16
ldi r16,$ff; выводы порта B конфигурировать как выходы out DDRB,r16
m1:; основной цикл sbis PINA,2; опросить PA2. От состояния этого входа ; зависит разрешение глобального прерывания rjmp m2 sei; разрешение глобального прерывания ldi r16,$c0 out GICR,r16; разрешение прерываний INT0 и INT1 rjmp m3 m2: cli; запрет глобального прерывания
m3: rcall wait in r16,PINA; опросить тумблеры порта А lsr r16; сдвинуть разряды регистра r16 четыре раза вправо lsr r16 lsr r16 lsr r16 ldi r17,$0f and r16,r17; биты ISC01, ISC00, ISC11, ISC10 принимают out MCUCR,r16; соответственно состояние PA7, PA6, PA5, PA4
;!!! команды программы по индивидуальному заданию ldi r16,0b00001000; пример - зажечь светодиод VD4, out portB,r16; остальные погасить rjmp m1; переход на начало основного цикла
pr0:; ***Подпрограмма обработки прерывания INT0*** in r16,SREG push r16; сохранение SREG ;!!! команды, реализующие индивидуальное задание ldi r16,0b00000100; например зажечь светодиод VD3, out portB,r16; остальные погасить ; сброс флага прерывания по INT0 - бит 6 рег.GIFR in r24,GIFR ldi r25,0b10111111 and r24,r25 out GIFR,r24 pop r16 out SREG,r16 reti
pr1:; ***Подпрограмма обработки прерывания INT1*** in r16,SREG push r16; сохранение SREG ;!!! команды, реализующие индивидуальное задание ldi r16,0b00010000; например зажечь светодиод VD5 out portB,r16; остальные погасить ; сброс флага прерывания по INT1 - бит 7 рег.GIFR in r24,GIFR ldi r25,0b01111111 and r24,r25 out GIFR,r24 pop r16 out SREG,r16 reti
wait:; подпрограмма задержки push r20; push r21; ldi r20,$0ff loop1: ldi r21,$0ff loop: dec r21 brne loop dec r20 brne loop1 pop r21; pop r20; ret Представленная программа дает пример формирования таблицы переходов и определения начального адреса стека. Кнопки и тумблеры блока управления рабочего места используются для вмешательства в программу микроконтроллера. Включение тумблера PA2 разрешает глобальное прерывание, тумблеры PA7 и PA6 обеспечивают задание характера сигнала прерывания INT0 (по фронтам или по уровню сигнала), тумблеры PA5 и PA4 аналогично обеспечивают задание характера сигнала прерывания INT1.
Подпрограмма wait реализует задержку времени (примерно 25 мс). В некоторых вариантах требуются существенно большие времена задержки, а также изменение времени задержки по прерыванию. Для этого можно увеличить число используемых в подпрограмме регистров (как в подпрограмме wait, приведенной в лабораторной работе № 1), а также изменять по прерыванию числа, заносимые в регистры. Варианты индивидуальных заданий 1. При включении микроконтроллера загорается светодиод VD1. По прерыванию INT0 светодиод VD1 гаснет, загорается светодиод VD2 (идет сдвиг влево). То есть по прерыванию INT0 последовательно загораются и гаснут светодиоды VD1, VD2, VD3, VD1, VD2 и т.д. По прерыванию INT1 сдвиг осуществляется вправо. 2. Фоновая программа реализует «бегущий» огонь на светодиодах VD1, VD2, VD3 слева направо, то есть поочередно загораются светодиоды VD1, VD2, VD3, VD1, VD2 и т.д. По прерыванию INT0 скорость «бега» в два раза увеличивается, а по прерыванию INT1 – в два раза уменьшается. 3. Фоновая программа реализует «бегущий» огонь на сегментах индикатора HG2, то есть последовательно загораются и гаснут сегменты а, b, с, d, е, f, а, b, с и т.д. Прерывание по INT0 изменяет направление бега на противоположное. Прерывание по INT1 восстанавливает исходное направление «бега». 4. В исходном состоянии на индикаторе HG2 загорается цифра 0. По прерыванию INT0 увеличивается высвечиваемая цифра на единицу, по прерыванию INT1 - уменьшается на единицу. Диапазон изменения цифры от 0 до 9. Если цифра достигла значения 9, то дальнейшие прерывания INT0 не меняют ее. Если же высвечивается цифра 0, то прерывания INT1 не должны изменять эту цифру. 5. Фоновая программа реализует работу светофора, то есть чередование сигналов следующее: зеленый (VD1), желтый (VD2), красный (VD3), желтый, зеленый и т.д. По прерыванию INT0 время горения каждого сигнала в два раза увеличивается, а по прерыванию INT1 – в два раза уменьшается. 6. В исходном состоянии на индикаторе HG2 горит цифра 8. По прерыванию INT0 цифра на индикаторе увеличивается на две единицы, по прерыванию INT1 – уменьшается на две единицы. При достижении цифры Е прерывание INT0 не меняет эту цифру, при достижении цифры 0 прерывание INT1 также не меняет эту цифру.
7. При включении микроконтроллера фоновая программа обеспечивает вывод в порт В комбинации сигналов, соответствующей индикации на индикаторе HG2 цифры 5. По прерыванию INT0 содержимое порта В инвертируется. По прерыванию INT1 содержимое порта В инкрементируется. В отчете отразить получившиеся изображения на индикаторе. 8. При включении микроконтроллера в порт D выдается число 20h, в порт С – число 66h. По прерыванию INT0 – производить циклический сдвиг содержимого порта D вправо, по прерыванию INT1 – влево. 9. На индикаторе HG2 последовательно изменяются цифры от 0 до 9: 0, 1, 2, …, 9, 0, 1, … и т.д. По прерыванию INT0 скорость изменения цифр в два раза увеличивается, а по прерыванию INT1 – в два раза уменьшается. 10. В исходном состоянии на индикаторе HG1 горит цифра 1. По прерыванию INT0 индикатор HG1 гаснет, а на индикаторе HG2 загорается цифра 2. По следующему прерыванию INT0 на HG3 загорается цифра 3, затем на HG4 цифра 4. После этого прерывание INT0 перестает переключать индикаторы и цифры. По прерыванию INT1 последовательность переключения индикаторов и изменения цифр меняется на противоположную (до зажигания на индикаторе HG1 цифры 0). 11. В исходном состоянии в порт B выводится нулевой код (все светодиоды VD1 – VD8 погашены). По прерыванию INT0 этот код на единицу увеличивается, по прерыванию INT1 – на единицу уменьшается. 12. При включении микроконтроллера четыре светодиода (VD1 – VD4) горят, а другие четыре (VD5 – VD8) погашены. По прерыванию INT0 происходит циклический сдвиг горящих светодиодов на одну позицию влево, а по прерыванию INT1 – на одну позицию вправо. 13. Фоновая программа обеспечивает последовательное зажигание на индикаторах HG1 – HG4 цифры 8 (когда один из индикаторов горит, остальные погашены). По прерыванию INT0 скорость зажигания индикаторов в два раза увеличивается, а по прерыванию INT1 – в два раза уменьшается. 14. В исходном состоянии на индикаторах HG1 и HG2 горят цифры 0. По прерыванию INT0 цифра на HG1 на единицу увеличивается, по прерыванию INT1 цифра на HG2 на единицу увеличивается. После цифры 9 следует снова цифра 0. 15. Фоновая программа обеспечивает подачу непрерывного звукового сигнала постоянной частоты на звукогенератор HA1. По прерыванию INT0 частота звукового сигнала в два раза увеличивается, а по прерыванию INT1 – в два раза уменьшается. 16. Фоновая программа обеспечивает периодические щелчки звукогенератора HA1. По прерыванию INT0 частота щелчков в два раза увеличивается, а по прерыванию INT1 – в два раза уменьшается.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|