и как сделать их одновременную работу.
Счетчики TCNT продолжают считать, пока выполняется любое из прерываний ?
Код: Выделить всё
#define F_CPU 1000000
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char i=0;
//----------
void segchar (unsigned char seg)
{
switch (seg)
{
case 1: PORTB = 0b00000010; break;
case 2: PORTB = 0b00000110; break;
case 3: PORTB = 0b00001110; break;
case 4: PORTB = 0b00011110; break;
}
}
//----------
void timer_ini (void){
TCCR0A |= (1<<WGM01); //Устанавливаем режим СТС сброс по совпадению
TCCR0B |= (1<<CS02)|(0<<CS01)|(1<<CS00); //Делитель 1024
TIMSK |=(1<<OCIE0A); //бит разрешения прерываний
OCR0A = 0b11111111; //до чего считать
}
//----------
//обработка прерывания таймера0
ISR (TIMER0_COMPA_vect)
{
if (i>=5){i=1;}
segchar(i);
i++;
}
void timer1_ini (void){
TCCR1 |= (1 << CTC1) //режим CTC
|(0<<COM1A1)|(0<<COM1A0) //отключаем OC1A
|(1 << CS10)|(1 << CS11)|(1 << CS12)|(0 << CS13); //Делитель 8192
TCNT1 = 0x00; //сброс счетчика
OCR1A = 0xFA; //регистр сравнения
TIMSK =(1<<OCIE1A); //включаем прерывания по переполнению
}
//обработка прерывания таймера1
ISR(TIMER1_COMPA_vect){
PORTB = 0b00000000;
}
//----------
int main(void)
{
sei();
timer_ini();
timer1_ini();
DDRB = 0xfe;
PORTB = 0b00000000;
//----------
while(1){
}
}

