Vladimir Ljaschko (12.10.2007 18:36, просмотров: 216) ответил AVR на Дай ВЕСЬ код в тегах <c></c>
Да у меня на С. Похоже, причина в векторах или чем-то еще. Прерывание есть, но не туда - контроллер сбрасывается, если прерывание разрешено. Тестовый пример.
Один светодиод моргает в основном цикле, а второй - в прерывании.
Если прерывание таймера не разрешать, то моргает диод 1.
Если разрешать, то в автомате он затыкается, по шагам вначале моргает.
Диод 2 не зажигается вообще и останов в прерывании не срабатывает.
<c>
void ConfigT1(void)
{ T1CON= 0; // stop timer
TMR1 = 0; // Reset Timer1 counter
//PR1 = (FCY/BACKGROUND_FREQUENCY)/T1_PRESCALER;
PR1=0x60;
T1CON = T1CON_TON; // start counting
_T1IF = 0; // clear IF bit
_T1IP = 6; // set priority
_T1IE = 1; // T1 Interrupt Enable
}
int main (void)
{ ConfigPorts(); //TRIS and
ConfigT1();
// InitBackground();
// SRbits.IPL=3; //Enable CPU priority levels
for (;;)
{
OFF_LED2;
ON_LED2;
} ;
void _ISR _T1Interrupt(void)
{ static int a;
if (a) { ON_LED1; a=0; }
else { OFF_LED1; a=1; }
IFS0bits.T1IF=0;
}
}
</c>