Код: Выделить всё
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
unsigned int i,k;
ISR(TIM0_COMPA_vect) {
i=i+1;
if (i==38)
{
TCNT0=0x00;
i=0;
k=k+1;
PORTB^=(1<<PORTB0); // моргаем каждую секунду (инвертируем каждую секунду)
}
}
void main(void)
{
DDRB=0xFF;
PORTB=0b00000001;
TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00); //Счетный режим таймера с часторой....
TCCR0A=(1<<WGM01) ; // режим сравнения СТС
OCR0A=0x1e; // Заданное число сравления (30)
TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0); //Разрешаем выполнение прерывание по совпадению в OCR0A
sei();
while (1)
{
}
}NStorm, все правильно вы написали.NStorm писал(а):Потому, чтобы он работал в таком режиме, надо ему такой режим установить в TCCR0A:
Код:
TCCR0A = (1 << WGM01);
Режим называется Clear Timer on Compare Match (CTC). Чтобы он считал до OCR0A, а НЕ до 0xFF.
Но у меня почему-то не получалось пока не сформировал готовый код по совету roman.com и не посмотрел его внимательно.


