Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Программирование вручную. 1) Во первых, необходимо задать функцию обработчик прерывания при совпадении кодов таймера/счетчика Т1 (TCNT1) и регистра совпадения OCR1 (см






1) Во первых, необходимо задать функцию обработчик прерывания при совпадении кодов таймера/счетчика Т1 (TCNT1) и регистра совпадения OCR1 (см. рис.14, поз 7):

interrupt [TIM1_OVF] void timer1_compa_isr(void)

В обработчике прерывания необходимо разместить начальные установки таймера/счетчика Т1 (TCNT1):

TCNT1H=0x00; TCNT1L=0x00;

 

2) Работе таймера предшествует его инициализация. Она включает следующие действия:

Установка 5-го бита порта D выходным, так как он одновременно является выходом (OC1A) регистра совпадения OCR1A:

DDRD=0x20;

Настройка таймера/счетчика Т1:

- задание режима переключения (инвертирования) регистра совпадения OCR1A при совпадении значения регистра OCR1A со значением таймера/счетчика Т1 (TCNT1) (см. рис.14, поз 21):

TCCR1A = 0x40; //либо TCCR1A = (1 < < COM1A0);

- задание частоты заполнения регистра TCNT1 частотой кратной CLK/1024 (т.е. 1000000/1023=977, 5 кГц) (см. рис.14, поз 22):

TCCR1B = 0x05; //либо TCCR1B = (1 < < CS10)½ (1 < < CS12);

- задание значения регистра совпадения OCR1A (см. рис.14, поз 27, 28):

OCR1AH=0x03; OCR1AL=0xE8; // либо OCR1A=0x03E8; // либо OCR1A=1000;

- задание разрешения прерывания от совпадения таймера/счетчика Т1 (TCNT1) с регистром совпадения OCR1A. Для этого в регистр маски прерываний таймера-счетчика TIMSK необходимо записать «1» в 4-ый разряд (см. рис.14, поз 31):

TIMSK = 0x10; //либо TIMSK = (1 < < OCIE1A)

 

3) Глобальное разрешение всех прерываний (см. рис.14, поз 32):

#asm (“sei”);

 

4) В бесконечном цикле while(1) осуществляется:

1) восстановление флага прерывания в регистре флагов прерываний таймеров-счетчиков TIFR;

2) временная задержка (см. рис.14, поз 36):

TIFR = 0x10; //либо TIFR = (1< < OCF1A; Delay_ms(1);

Код программы представлен на рис. 14.

 

 

Рис.14 - Код программы для реализации таймеров микроконтроллера ATmega16.

 

Соответствующая схема в Proteus:

 

 

Рис.15 - Схема реализации таймеров/счетчиков в Proteus


 

Приложение к уроку 3

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2026 год. (0.089 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал