Вот продолжаю ломать голову над контроллерами, и столкнулся с "ситуацией", так сказать.
При работе у меня используются оба канала OCIE0A и OCIE0B. Для каждого своё прерывание написано, но когда доходит до симуляции, работает только OCIE0B, а OCIE0A молчит в тряпочку.
Комментирую канал 'B', всё становится хорошо, 'A' работает, как надо. В чём затык, как думаете? Заранее благодарю!
#define F_CPU 16000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>
#include <util/delay.h>
int a = 0;
//----- Прерывания
ISR (TIMER1_COMPA_vect)
{
TCNT1 = 0;
if (a==0)
{
a = 1;
PORTB|=(1<<1);
}
else
{
PORTB&=~(1<<1);
a =0;
}
OCR0A = 0x77;
OCR0B = 0xFA;
OCR2A = 0x29;
TIMSK0 = (1<<OCIE0A)|(1<<OCIE0B);
TIMSK2 = (1<<OCIE2A);
PORTB|=(1<<2);
PORTB|=(1<<3);
PORTB|=(1<<4);
}
ISR (TIMER2_COMPA_vect)
{
PORTB&=~(1<<4);
TIMSK2 = (0<<OCIE2A);
//TCCR0B = (0<<CS00);
//TCNT0 = 0;
}
ISR (TIMER0_COMPB_vect)
{
PORTB&=~(1<<3);
TIMSK0 = (0<<OCIE0B);
//TCCR0B = (0<<CS00);
//TCNT0 = 0;
}
ISR (TIMER0_COMPA_vect)
{
PORTB&=~(1<<2);
TIMSK0 = (0<<OCIE0A);
//TCCR0B = (0<<CS00);
//TCNT0 = 0;
}
int main(void)
{
DDRB = 0xFF;
PORTB = 0;
TIMSK1 = (1<<OCIE1A);
OCR1A = 0xFFF0;
TCCR1B = (1<<CS10);
TCCR0B = (1<<CS00);
TCCR2B = (1<<CS20) ;
sei();
while(1)
{
}
}

