Шестнадцатибитные таймеры микроконтроллера ATmega 128: Методические указания к выполнению лабораторной работы по курсу «Микропроцессорные устройства систем управления», страница 4

Режим Phase and Frequency correct PWM

Отличие этого режима от предыдущего состоит только в том, что запись нового значения в регистр сравнения производится не при максимальном значении счетчика, а при нулевом. Это позволяет исключить искаженные периоды ШИМ в момент смены значения в регистре сравнения.

Таймеры Т1 (Т3) имеют две разновидности режима (режим 8 и режим 9). Оба режима позволяют программно изменять разрешающую способность. И отличаются регистром, хранящим максимальные значения счета. Для режима 8, это регистр захвата ICRn. Для режима 9, это регистр сравнения OCRnA.

Пример выполнения задания:

;***** Реализация временной задержки через прерывание от таймера T1

; частота процессора 7.3728 МГц

.include "m128def.inc"

;***** Инициализация регистров

jmp RESET

.ORG 0x18        ;18(h) - Вектор прерывания таймера T1 при совпадении

jmp T1_Comp    ;адрес подпрограммы обработки прерывания при

;совпадении таймера Т1

RESET:

ldi r19,0xC0

out       DDRD,r19   ;биты  D7,D6 порта D на вывод

ldi r19,0x10    ;Инициализация указателя стека

out       SPH,r19   

ldi r19,0xFF

out       SPL,r19

ldi r19, 0b00010000   ;Разрешение прерывания по совпадению T1

out TIMSK, r19

sei                               ;разрешение глобальных прерываний

;(флаг I=1 в регистре SREG)

;**** Программирование таймера

ldi r19, 0b00001101   ;Режим CTC (сброс при совпадении)

out TCCR1B, r19                   ;коэф. предделителя 1024

;3840(h) при частоте 7.3728МГц и предделителе 1024 равно 2 сек.

;14400=3840(h)

;Расчёт задержки таймера Т1 (1/(7372800/1024*14400)=2 сек.)

ldi r19, 0x38               ;Занесение значения FF

out OCR1AH, r19                  ;в регистр совпадений таймера T1

ldi r19, 0x40               ;Занесение значения FF

out OCR1AL, r19                  ;в регистр совпадений таймера T1

ldi r18, 0

;**** Основная программа

loop:  

rjmp    loop                            ;повторение бесконечного цикла

;**** Прерывание по совпадению таймера Т1

T1_Comp:

com r18                      ;Инверсия содержимого r18

out PORTD, r18

sei

reti                              ;Выход из прерывания

Задание к лабораторной работе

1. Реализовать подпрограмму обработки прерывания по совпадению таймера Т1 (режим СТС). Интервал прерывания и управление состоянием светодиодов порта A  внутри подпрограммы осуществлять в соответствии с вариантом:

а) Интервал прерывания 0,25 с. В подпрограмме реализовать «бегущий огонь» в сторону больших разрядов.

б) Интервал прерывания 4 с. В подпрограмме реализовать инвертирование состояния всех светодиодов.

в) Интервал прерывания 2 с. В подпрограмме реализовать противофазное включение 4-х старших и 4-х младших разрядов светодиодного порта A. (старшие не горят, младшие горят и наоборот).

г) Интервал прерывания 0,5 с. В подпрограмме реализовать эффект разбегания от центра. (В исходном состоянии горят светодиоды PA4, PA3. Через полсекунды PA5,PA2 и так далее. После зажигания светодиодов PA7, PA0 цикл повторяется.).

д) Интервал прерывания 1 с. В подпрограмме реализовать эффект перекрещивания двух световых потоков. (В исходном состоянии горят светодиоды PA7, PA0. Через полсекунды PA6,PA1 и так далее. Потоки набегают друг на друга и удаляются в противоположные стороны. После зажигания светодиодов PA0, PA7 цикл повторяется.).

е) Интервал прерывания 3 с.  В подпрограмме реализовать противофазное включение светодиодов порта A через разряд. (чётные не горят, нечётные горят и наоборот).

Литература

1. Евстифеев А. В. Микроконтроллеры AVR семейств Tiny и Mega фирмы «ATMEL» - М.; Издательский дом «Додэка-XXI», 2004.-560 с.