Estoy buscando un poco de ayuda y consejos sobre mi código.
Estoy usando C18 en el entorno MPLab, PIC18f4520 con Fosc a 4MHz, y usnig timer0 en modo de 16 bits para contar el desbordamiento, establecer el bit de desbordamiento y el indicador de interrupción, luego saltar a ISR e incrementar una variable 'conteo'. Esto se envía a un puerto con indicadores LED conectados para que pueda obtener una confirmación visual del funcionamiento del programa.
Sin embargo, el recuento generado siempre es '1' (es decir, 0x01) y creo que el ISR solo ocurre una vez, en todo caso.
Cualquier ayuda que pueda ofrecer sería muy apreciada.
Aquí está mi código:
void main (void) /* */
{
TRISA = 0; /* */
TRISC = 0; /* */
TRISB = 0;
TRISD = 0x00;
RTOS();
}
void low_interrupt (void)
{
_asm GOTO timer_isr _endasm
}
#pragma code
#pragma interruptlow timer_isr
void timer_isr (void)
{
INTCONbits.TMR0IF = 0;
count = count++;
LATD = count;
RTOS();
}
void RTOS (void)
{
T0CONbits.T08BIT = 0; // 16-bit timer
T0CONbits.T0CS = 0; // increment on instruction cycle input
T0CONbits.T0SE = 0; // increment on low--> high transition of clock
T0CONbits.PSA = 1; // T0 prescaler not assigned i.e. 1:1 prescaler.
RCONbits.IPEN = 1; //Enable Interrupt Priorities
INTCONbits.GIEL = 1; //Enable Low Priority Interrupt
INTCONbits.GIE = 1; //Enable Global Interrupts
INTCONbits.TMR0IE = 1; //Enable Timer0 Interrupt
INTCON2bits.TMR0IP = 0; //TMR0 set to Low Priority Interrupt
INTCONbits.TMR0IF = 0; // T0 int flag bit cleared before starting
T0CONbits.TMR0ON = 1; // timer0 START
while (1);
}
Gracias de antemano por cualquier orientación que pueda ofrecer.