| Форум РадиоКот https://radiokot.ru/forum/ |
|
| [Решено]TIMER1 - прерывание по совпадению https://radiokot.ru/forum/viewtopic.php?f=57&t=77503 |
Страница 1 из 1 |
| Автор: | gruffi [ Вс сен 02, 2012 14:42:49 ] |
| Заголовок сообщения: | [Решено]TIMER1 - прерывание по совпадению |
Добрый день, Форумчане! Помогите пожалуйста разобраться с таймером1. Необходимо после отлавливания внешнего прерывания INT0 запустить таймер1 с прерыванием по совпадению. Период таймера от 200 до 20000. Внешнее прерывание я отлавливаю и запускаю таймер1, но прерывания нет, хотя таймер тикает и при совпадении обнуляется и идет дальше по кругу - в отладчике смотрел...Помогите найти, где я накосячил...Работаю в avr studio, мк atmega16. Вот код: Код: void INCUBATOR_Init()
{ //TIME_Init(); DDRB &= (1 << 0) | (1 << 1); PORTB |= (1 << 0) | (1 << 1); DDRC |= (1 << 0); PORTC &= ~(1 << 0); DDRD &= ~(1 << 2); PORTD |= (1 << 2); GICR |= (1 << INT0); //разрешили прерывание MCUCR = 0x00; SREG |= (1 << 7); } //---------- ISR(INT0_vect) { if(!enableZeroCross) { enableZeroCross = true; OCR1A = delay_dimmer; // Значение для сравнения TCNT1 = 0; // счетчик в ноль TCCR1B |= (1 << CS10) | ( 1<< WGM12); // без предделителя и режим СТС по совпадению TIMSK = (1 << OCIE1A); // Разрешить прерывание при совпадении TCNT1 и OCR1A } } //---------- ISR(TIMER1_COMPA_vect) { if(enableZeroCross) { TCNT1 = 0; TCCR1B = 0x00; PORTC |= (1 << 0); // включить симмистор _delay_us(50); PORTC &= ~(1 << 0); enableZeroCross = false; } } |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


