AVR Mega8, 16МГц, среда разработки CVAVR v1.25.Делаю все по шаблону, как предлагает мастер. Пытаюсь создать прерывание по таймеру №0 каждые 64 мкс (15625 Гц).
Вот текст программы:
Цитата
#include <mega8.h>
#include <delay.h>
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x00; // сбросить счетчик таймера
PORTB.0=0; // выставить на ножке "0" на период ~3...4 мкс
delay_us (3);
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x7F;
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
TCCR0=0x05;
TCNT0=0x00;
// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
ACSR=0x80;
SFIOR=0x00;
#asm("sei")
while (1)
{
PORTB.0=1; //на ножке постоянная "1", прерывать ее каждые 64 мкс
};
} Результат смотрю на осциллографе - хрен два! Постоянная единица, ничего не прерывается.
Пробовал и так и эдак... И что я только не писал в обработчик прерывания - ничего не помогает. И запрещать прерывания там пробовал, и заново таймер реинициализировал...
Разве что проскакивает этот самый ожидаемый "0" каждые примерно 5 секунд (определяю по взмаргиванию линии на осциллографе).
И что это за бред...?
Где моя ошибка?
Сообщение отредактировал HCHUNTER - Jan 2 2008, 10:37