Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Регистр управления микроконтроллером - MCUCR




Бит                  
$35($55) SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00 MCUCR
Чтение/Запись R/W R/W R/W R/W R/W R/W R/W R/W  
Исходное значение                  

· Биты 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

ISC11 (ISC01) ISC10 (ISC00) Запрос прерывания идентифицируется:
    по низкому уровню на INT1 (INT0)
    зарезервирован
    по спадающему фронту на INT1 (INT0)
    по нарастающему фронту на INT1 (INT0)

При изменении битов ISC в регистре MCUCR соответствующее прерывание должно быть запрещено путем очистки бита разрешения прерывания в регистре GICR. В ином случае может произойти прерывание.

Условия возникновения запроса прерывания 2 задаются битом ISC2 в регистре управления и состояния микроконтроллера MCUCSR.

Регистр управления и состояния микроконтроллераMCUCSR

Бит                  
$34($54) JTD ISC2 - JTRF WDRF BORF EXTRF PORF MCUCSR
Чтение/Запись R/W R/W R R/W R/W R/W R/W R/W  
Исходное значение                  

· Бит 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 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...