Max_Fly (12.01.2004 17:47, просмотров: 8792)
Господа - я тупой, направьте на путь истинный (+) ATMEGA64 таймер1 прерывание по переполнению.
исходник:
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 14.400 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xFF;
TCNT1L=0xF0;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
буквально сгенерировано визардом
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
ETIMSK=0x00;
// Global enable interrupts
#asm("sei")
что тоже правильно на первый взгляд.
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
PORTB=0x10;
TCNT1H=0xFF;
TCNT1L=0xF0;
}
сама собственно суть
DDRB=0xFF - направленность на выход - в самом начале программы.
если комада PORTB=0x10; - стоит после определания прерываний - лампочка горит - если в прерывани - молчит как убиенная. Ну что я делаю не так???
В студии под симулятором работает!!! ассемблерный код правильный. ну что ж я делаю не так-то а? бред какой-то. оно ж работало у меня раньше...