Изучаю прерывания на attiny13. Пока остановился на прерываниях по переполнению. Сделал тестовый код в Atmel Studio и сразу через программатор заливаю на тиньку со светодиодом. Проблема в том что гореть он должен 10 секунд и выключаться, а горит примерно 20-23 секунды. Прошу помощи в правильном расчёте. Код ниже (пока учусь сильно не ругайтесь) :
#define F_CPU 1000000
#define LED PB2
#include <avr/io.h>
//#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char work_time =384; // 1000000/1024/256=3.8 (0.026 сек) 10/0.026=384
volatile unsigned char temp =0;
ISR (TIM0_OVF_vect)
{
TCNT0=0x00;
temp ++;
if (temp>=work_time)
{
PORTB &=~(1<<LED); //Инвертируем состояние
TCCR0B=0x00 // остановка таймера
cli (); //общее запрещение прерываний
}
}
int main (void)
{
init();
while (1)
{
}
}
void init ()
{
DDRB |= (1<<LED); // выход
PORTB =(1<<LED); //включен
TCCR0B =0x05; // установка делителя на 1024
TIMSK0 |= _BV(TOIE0);
sei(); // Либо SREG |= (1<<SREG_I); //Разрешаем прерывания глобально
TCNT0 = 0X00; //Обнулить счётный регистр
}