ПРОГРАММИРОВАНИЕ ФУНКЦИЙ СРАВНЕНИЯ, ЗАХВАТА И ШИМ ТАЙМЕРА Т1 AVR

March 2, 2011 by admin Комментировать »

Функция сравнения

Подготовить программу для исследования функции сравнения таймера;счетчика Т1. Возможный вариант работы программы: при нажатии на кнопку START (SWO) запускается таймер – происходит инкремент счетчика с частотой СК. При совпадении значений счетчика TCNT1 и регистра сравнения 0CR1B происходит изменение состояния вывода ОС IB на противоположное. При совпадении значений счетчика TCNT1 и регистра сравнения 0CR1A происходит изменение состояния вывода 0С1А на противоположное и сброс счетного регистра в нулевое состояние. Временные диаграммы работы таймера Т1 приведены на рис. 4.3. Возможность останова таймера во время счета реализуется с помощью внешнего

Рис. 4.3. Временные диаграммы работы таймера;счетчика Т1 при исследовании функции сравнения

прерывания от кнопки STOP (SW1). При записи значений в регистры сравнения необходимо соблюдать установленный порядок: сначала записывается старший байт, затем – младший.

Для наблюдения изменений состояний выводов 0С1А и 0С1В их необходимо соединить с выводами светодиодов. Коммутация осуществляется двухпроводными шнурами: LEDO – РЕ2, LED1 – PD5, SWO – PDO, SW1 – PD2. Частота тактового генератора устанавливается равной 256 Гц.

Программа 4.3.

;Программа 4.3 для МК АТх8515: демонстрация работы функции ;сравнения таймера Т1.Для наглядности необходимо выставить ;частоту тактового генератора СК=25б Гц.При нажатии на SWO ;(START) происходит инкремент счетчика с частотой СК, при ;нажатии на SW1 (STOP) счетчик останавливается. ;При совпадении содержимого счетчика и регистра сравнения ;0CR1B происходит переключение светодиода LEDO, счетчика и ;регистра сравнения 0CR1A – LED1.

;Соединения: LED0-PE2, LED1-PD5, SWO-PDO, SW1-PD2

;.include "8515def.inc" ;файл определений AT90S8515 .include "m8515def.inc" ;файл определений ATmega8515 .def temp = rl6 ;временный регистр

.equ START = 0          ;0-й разряд порта PD .org $000

rjmp INIT             ;обработка сброса .org $002

rjmp STOP_PRESSED   ;обработка внешнего прерывания

; INTO при нажатии STOP

;***Инициализация МК

INIT: Idi temp,low(RAMEND) ;установка

out SPL,temp               ; указателя стека

Idi temp,high(RAMEND)       ; на последнюю

out SPH,temp                 ; ячейку ОЗУ

Idi temp,0x20      ;инициализация выводов порта PD:

out DDRD,temp        ; 0,2 – на ввод, 5 – на вывод

Idi temp,0x05          ;включение подтягивающих

out PORTD,temp       ; резисторов и выключение СД

Idi temp,0x04             ;;;; для ATmega8515

;;;; инициализация вывода порта

out DDRE,temp          ;;;; РЕ2 (OCIB) на вывод

Idi temp,0x40         ;разрешение прерывания INTO

out GICR,temp        ; в регистре GICR (или GIMSK)

clr temp              ;обработка прерывания INTO

out MCUCR,temp            ; no низкому уровню

.Настройка функции           сравнения таймера Т1

Idi temp,0x00           ;запрещение прерываний

out TIMSK,temp               ; от таймера

cli                     ;запрещение прерываний

Idi temp,0x50               ;при равенстве

; состояния выводов 0С1А и 0С1В

out TCCRlA,temp     ; изменяются на противоположные

Idi temp,0x00                   ;таймер

out TCCRlB,temp              ; остановлен

Idi temp,0x00               ;запись числа в

out OCRlBH,temp          ; регистр сравнения,

Idi temp,0x80            ; первым записывается

out OCRlBL,temp             ; старший байт

Idi temp,0x00               ;запись числа в

out OCRlAH,temp          ; регистр сравнения,

Idi temp,OxFF            ; первым записывается

out OCRlAL,temp             ; старший байт

clr temp                      ;обнуление

out TCNTlH,temp              ; содержимого

out TCNTlL,temp           ; счетного регистра

sei                     ; разрешение прерываний

WAITSTART: sbic PIND,START       ;ожидание нажатия

rjmp WAITSTART               ;кнопки START

Idi temp,0x09          ;запуск таймера, при

out TCCRlB,temp        ; совпадении с OCRlA – сброс

LOOP: nop                 ;во время цикла происходит

rjmp LOOP              ; увеличение содержимого

; счетного регистра .Обработка прерывания от кнопки STOP STOP_PRESSED:

Idi temp,0x08          ;остановка

out TCCRlB,temp        ; таймера

WAITSTART_2:              ;ожидание

sbic PIND,START        ; нажатия

rjmp WAITSTART_2       ; кнопки START

Idi temp,0x09          ;запуск

out TCCRlB,temp        ; таймера

reti

Результат работы программы соответствует диаграммам на рис. 4.3. При нажатии на кнопку SWO светодиоды работают в такой последовательности: оба светодиода погашены, далее включается LEDO, затем LED1, выключается LEDO, затем LED1 и т.    д.

В любой момент процесс можно остановить нажатием кнопки SW1.

Функция захвата

Подготовить программу для исследования функции захвата таймера;счетчика Т1. Захват должен происходить при нажатии соответствующей кнопки. По событию захват должен вызываться обработчик прерывания, который переписывает содержимое 16-разрядного регистра захвата ICR1 в регистры для хранения младшего и старшего байта, так как пересылка данных в порт для индикации возможна только из регистров общего назначения. Вывод каждого байта может быть связан с нажатием отдельной кнопки. С помощью регистра сравнения 0CR1A можно задать максимальное значение, которое получим в счетчике и, следовательно, в регистре захвата. Необходимо настроить работу таймера так, чтобы он обнулялся при равенстве значений счетчика TCNT1 и регистра сравнения, установив бит СТС1 регистра TCCR1B в 1. Это можно использовать как дополнительный признак правильности работы программы. Так, например, если содержимое 0CR1A рав-

НО $OOFF, а бит СТС1 установлен в 1, то в старшем байте регистра захвата всегда будет 0.

При моделировании функции захвата в AVR Studio 4 необходимо помнить, что вывод ICP в микроконтроллереАТ9088515 является выделенным, а в микроконтроллере ATmega8515 – это линия порта ввода;вывода РЕО. Вызов обработчика прерывания по событию захват можно осуществить, установив в 1 флаг TICIE1 регистра маски TIMSK и флаг ICF1 регистра запросов TIFR.

Коммутация кнопок с выводами микроконтроллера осуществляется двухпроводными шнурами: SWO – PDO, SW1 – PD1, SW2 – PD2, SW3 – РЕО. Светодиоды подключают к выводам порта РВ 10-проводным шлейфом.

Программа 4.4

;Программа 4.4 для МК АТх8515: демонстрация работы функции ;захвата таймера Т1. Для наблюдения необходимо установить ;частоту тактового генератора СК=25б Гц. ;При нажатии на SWO (START) на вход счетчика поступает ;сигнал с частотой СК, при нажатии на SW3 (САРТ) ;происходит захват состояния таймера.

;При совпадении содержимого счетчика и регистра сравнения ;0CR1A происходит сброс таймера.

;При нажатии на SW1 (SHOW_L) на светодиоды выводится ;значение младшего байта регистра захвата, SW2 (SHOW_H) – ;старшего байта регистра захвата.

;Соединения: SWO-PDO,SW1-PD1,SW2-PD2,SW3-PE0,10-проводным ;шлейфом PB-LED

г

;.include "8515def.inc"  ;файл определений AT90S8515

.include "m8515def.inc"  ;файл определений ATmega8515

.def temp = rl6          ;временный регистр

.def H_byte = rl7        ;для хранения старшего байта

.def L_byte = rlB        ;для хранения младшего байта

.equ START = О           ;0-й вывод порта PD

.equ SHOW_L = 1          ;1-й вывод порта PD

.equ SHOW_H = 2          ;2-й вывод порта PD .Векторы прерываний .org $000

rjmp INIT             ;обработка сброса .org $003

rjmp CAPT_PRESSED     ;обработка прерывания по сигналу

; захвата от кнопки SW3

;***Инициализация МК

INIT: Idi temp,low(RAMEND) ;установка

out SPL,temp                  ; указателя стека

Idi temp,high(RAMEND)          ; на последнюю

out SPH,temp                    ; ячейку ОЗУ

Idi temp,0x00                  ;инициализация

out DDRD,temp                ; порта PD на ввод

Idi temp,0x07             ;включение подтягивающих

out PORTD,temp              ; резисторов порта PD

Idi temp,0x00         ;;;;для ATmega8515 инициализация

out DDRE,temp              ;;;; PEO (ICP) на ввод

ser temp                       ;инициализация

out DDRB,temp                ; порта PB на вывод

out PORTE,temp             ;выключение светодиодов

cli                        ;запрещение прерываний

Idi temp,0x00              ;отключение от таймера

out TCCRIA,temp                   ; выводов

Idi temp,0x00                      ;таймер

out TCCRlB,temp                 ; остановлен

Idi temp,OxFF                  ;запись числа в

out OCRlAH,temp             ; регистр сравнения,

Idi temp,OxFF               ;первым записывается

out OCRlAL,temp                ; старший байт

clr temp                         ;обнуление

out TCNTlH,temp                 ; содержимого

out TCNTlL,temp              ; счетного регистра

Idi L_byte,OxFO              ;начальные значения

Idi H_byte,OxOF                ; для контроля

sei                        ;разрешение прерываний

WAITSTART: sbic PIND,START ;ожидание нажатия

rjmp WAITSTART                 ; кнопки START

Idi temp,0x08              ;разрешение прерывания

out TIMSK,temp           ; no событию захват таймера

Idi temp,0xC9               ;запуск таймера, при

out TCCRlB,temp         ; совпадении с OCRIA – сброс

WAIT_L: sbic PIND,SHOW_L ;ожидание нажатия кнопки

rjmp WAIT_H              ; для показа младшего байта

out PORTE,L_byte            ;вывод на светодиоды

WAIT Н: sbic PIND,SHOW   Н ;ожидание нажатия кнопки

rjmp WAIT_L          ; для показа старшего байта

out PORTB,H_byte ;вывод на светодиоды rjmp WAIT_L .Обработка прерывания от кнопки САРТ CAPT_PRESSED:

in L_byte,ICRlL ;считывание младшего байта in H_byte,ICRIH ;считывание старшего байта com L_byte     ;инвертирование

com H_byte           ;инвертирование

reti

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты