Регистр контроля (управления) – MCUCR

Этот регистр содержит служебные биты для общих функций MCU.

Бит                  
$35 ($55) 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 - Res: Reserved Bit – Зарезервированный бит

Этот бит зарезервирован в AT90S8535 и при считывании всегда показывает состояние ноль.

· Биты 6 …4 управляют режимами энергосбережения

· Биты 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 bit 1 and bit 0 – Биты управления идентификацией внешнего прерывания 1

Внешнее прерывание 1 активизируется внешним выводом INT1, если установлен флаг I в регистре статуса SREG и установлена соответствующая маска прерывания в регистре масок внешнего прерывания GIMSK.

Запрос прерывания по логическому уровню или фронтам определяется в табл. 2.4.

Таблица 2.4.Задание характера сигнала прерывания 1

ISC11 ISC10 Описание
    Запрос прерывания идентифицируется по низкому уровню на INT1
    Зарезервирован
    Запрос прерывания идентифицируется по спадающему фронту на INT1
    Запрос прерывания идентифицируется по нарастающему фронту на INT1

Примечание: При изменении битов ISC11/ISC10 прерывание INT1 должно быть запрещено путем очистки бита разрешения прерывания в регистре GIMSK. В ином случае может произойти прерывание.

Значение (величина) на выводе INT базовое (типовое) до обнаружения фронтов сигнала. Если фронт прерывания выбран, импульсы, которые длятся дольше, чем один период CPU clock, сгенерируют прерывание. Более короткие импульсы не обеспечат генерацию прерывания. Если выбрано низкоуровневое прерывание (низкий уровень прерывания), то низкий уровень должен быть удержан до завершения выполняющейся в настоящее время команды, чтобы генерировать прерывание. Если это так, то уровень, вызвавший прерывание, генерирует запрос на прерывание пока вывод остается (удерживается) низким.

· Биты 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 bit 1 and bit 0 – Биты управления идентификацией внешнего прерывания 0

Внешнее прерывание 0 активизируется внешним выводом INT0, если установлен флаг I в регистре статуса SREG и установлена соответствующая маска прерывания. Запрос прерывания по логическому уровню или фронтам определяется в табл. 2.5.

Таблица 2.5.Задание характера сигнала прерывания 0

ISC01 ISC00 Описание
    Запрос прерывания идентифицируется по низкому уровню на INT0
    Зарезервирован
    Запрос прерывания идентифицируется по спадающему фронту на INT0
    Запрос прерывания идентифицируется по нарастающему фронту на INT0

Примечание: При изменении битов ISC01/ISC00 прерывание INT0 должно быть запрещено путем очистки бита разрешения прерывания в регистре GIMSK. В ином случае может произойти прерывание.

Значение (величина) на выводе INT базовое (типовое) до обнаружения фронтов сигнала. Если фронт прерывания выбран, импульсы, которые длятся дольше, чем один период CPU clock, сгенерируют прерывание. Более короткие импульсы не обеспечат генерацию прерывания. Если выбрано низкоуровневое прерывание (низкий уровень прерывания), то низкий уровень должен быть удержан до завершения выполняющейся в настоящее время команды, чтобы генерировать прерывание. Если это так, то уровень, вызвавший прерывание, генерирует запрос на прерывание пока вывод остается (удерживается) низким.

  ; Пример программы процедуры обслуживания прерываний
  .include "8535def.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 ; вектор приемника UART
  reti  
  .org $00C ; вектор "буфер передатчика пуст" UART
  reti  
  .org $00D ; вектор передатчика UART
  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  
m1:   sbis   PINA,1   ; опросить кнопку SB1. От её состояния зависит
  rjmp m1  
  sei   ; разрешение глобального прерывания
  ldi r16,$c0  
  out GIMSK,r16 ; разрешение прерываний INT0 и INT1
  ldi r16,$f0 ; выводы PD0, PD1,PD2 и PD3 конфигурировать как
  out DDRD,r16 ; входы, а остальные выводы порта D как выходы
       
  ldi r16,$0ff ; выводы порта С конфигурировать как выходы
  out DDRC,r16  
       
  sbi PORTB,3 ; загрузить 1 в бит portB,3 для включения
      ; транзистора VT2
       
  ***   ;команды фоновой программы по индивидуальному
      ; заданию
  rcall wait  
  in r16,PINA ; опросить кнопки и тумблеры порта А
  lsr r16 ; сдвинуть разряды регистра r16 три раза вправо
  lsr r16  
  lsr r16  
  ldi r17,$0f  
  and r16,r17 ; биты ISC01, ISC00, ISC11, ISC10 принимают
  out MCUCR,r16 ; соответственно состояние SB1, SA1, SA2, SA3
  pr0:       ; Подпрограмма отработки прерывания INT0
  in r16,SREG  
  push r16 ; сохранение SREG
  ***   ; команды, реализующие индивидуальное задание
  cbi GIFR,6 ; сброс флага прерывания по INT0
  pop r16  
  out SREG,r16  
  reti    
pr1:     ; Подпрограмма отработки прерывания INT1
  in r16,SREG  
  push r16 ; сохранение SREG
  ***   ; команды, реализующие индивидуальное задание
  cbi GIFR,7 ; сброс флага прерывания по INT1
  pop r16  
  out SREG,r16  
  reti    
       
wait:     ; подпрограмма задержки
  ldi r20,$0ff  
loop1:      
  ldi r21,$0ff  
loop:      
  dec r21  
  brne loop  
  dec r20  
  brne loop1  
  ret    
       
           

Представленная программа дает пример формирования таблицы переходов и определения начального адреса стека.

ТАЙМЕРЫ

Микроконтроллеры АТ90S8535 семейства AVR имеют три таймера/счетчика. Два из них таймер/счетчик0 и таймер/счетчик2 8-разрядные, а таймер/счетчик1 16-разрядный.

Таймеры/счетчики 0 и 1 используют выходы ступени деления общего 10-разрядного предварительного делителя. Они могут использоваться как таймеры с встроенной временной базой или как счетчики, переключаемые по состоянию на внешнем выводе соответственно РВ0 (Т0) и РВ1(Т1).

Таймер/счетчик2 имеет свой предварительный 10-разрядный делитель или может асинхронно тактироваться сигналом с вывода РС6 (T0SC1), что позволяет использовать таймер/счетчик2 в качестве часов реального времени. Тогда генератор с частотой 32768 кГц подсоединяется между выводами РС6 (T0SC1) и РС7 (T0SC2).

Таймеры/счетчики 1 и 2 позволяют реализовать режимы широтно-импульсных модуляторов (ШИМ).

Микроконтроллер AT90S8535 имеет регистр масок прерываний по таймеру/счетчику TIMSK – Timer/Counter.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: