Estoy buscando un poco de ayuda y consejos en mi código.
Estoy usando el C18 en el entorno MPLab, PIC18f4520 con Fosc @ 4 mhz, y usnig timer0 en 16 bits modo de contar el desbordamiento, establezca el bit de desbordamiento y el indicador de interrupción, a continuación, saltar a la ISR y el incremento de una variable 'contar'. Este es arrojado a un puerto con Led conectado para que yo pueda obtener visualy la confirmación de que el programa de trabajo.
Sin embargo, la emitida contar es siempre " 1 " (es decir, 0x01) y creo que el ISR es sólo sucede una vez, en todo caso.
Cualquier ayuda que usted puede ofrecer sería más apreciado.
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 usted puede ofrecer.