Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Программирование вручную. 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
|