Помогите с установкой таймера в atmega8. Нужно сделать задержку в 8мс. И после каждого переполнения вывести в порт некое значение и опять запустить таймер для следующего отсчета, после чего все повторяется аналогично. Вывод в порт и повторный запуск таймера делаю в прерывании.
Имею: тактовая частота 4МГц,
ставлю коэффициент деления тактовой частоты для таймера 256 (TCCR0=0x04) должен получить частоту на выходе делителя 15625Гц (период 64мкс),
для этого периода в 8-ми милисекудах счетчик должен будет инкрементироваться 125 раз. Так как счетчик 8-ми битный - ставлю начальное значение == 3.
В результате всего получаю интервал 16мс. Что я делаю не так? Вот часть кода:
char step[]={0b00000001,0b00000100,0b00000010,0b00001000,0b00000000}; //то, что будет выводиться в порт по кругу
volatile int nstep=0;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0 = 3; //опять записать в регистр таймера число 3
SFIOR |= 1<<0; // Сброс предделителя
if (nstep == 5)
{
nstep=0;
};
PORTB = step[nstep] ;
++nstep;
}
void main(void)
{
TIMSK=0x01; // прерывание разрешено
SFIOR |= 1<<0; // Сброс предделителя
TCNT0 = 3; //записать в регистр таймера число 3
TCCR0=0x04; //start timer
}