Atmega8515, режимы работы Timer 0

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
T34
Родился
Сообщения: 8
Зарегистрирован: Вт мар 15, 2011 14:21:42

Atmega8515, режимы работы Timer 0

Сообщение T34 »

вот такая программа в winavr

#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <util/delay.h>

char time1 = 0x09;
char time2 = 0x11;

ISR(INT0_vect) //Внешнее прерывание
{
OCR0 = time1; //запускаем таймер 0 в режим Fast PWM
TCNT0 = 0x00;
TIFR &= 0x03;
TIMSK = 0x03;
TCCR0 = 0x4A;
asm volatile ("nop");
TCCR0 |= 0x30;

}


ISR(TIMER0_OVF_vect)
{

TCCR0 = 0x00; //прерывание по переполнению таймер

}

ISR(TIMER0_COMP_vect)
{

TCNT0 = 0xFF-(time2-time1); //прерывание при сравнении таймера

}

int main(void)
{

PORTB &= ~_BV(PB0);
DDRB = 0x00;
PORTD |= _BV(PD2); //разрешаем внешнее прерывание INT0
MCUCR = 1<<1;
GIFR &= 0xE0;
GICR = 1<<6;
sei();

DDRB |= _BV(PB0);

while(1)
{


}
return 0;

}



Проблема в том, что прерывание при сравнении в fast PWM режиме Timer 0 не срабатывает при первом запуске таймера. А при последующих запусках срабатывает. С чем это связано? Симулирую в Proteus.
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»