PIC18f4550 y falla en el timer1

Hola, les comento un poco mi problema. Baje la librería de microchip para usar el USB del 18f4550. Usando la de "Mouse HID device" me fui a "mouse.c" para crear mi propio programa.

Configuro el timer1 para interrupir cada x segundos. La ISR hace prender un led a la vez, pero lo rota cada vez que se dispara la isr. La duda viene sobre la duracion de la misma, la cual no es pareja. O sea, al prender el 3 led apagarse y prender el 4, el tiempo transcurrido es notoramiente superior al resto..

adjunto el codigo.
Código:
#pragma interrupt YourHighPriorityISRCode
	void YourHighPriorityISRCode()
	{
		//Check which interrupt flag caused the interrupt.
		//Service the interrupt
		//Clear the interrupt flag
		//Etc.
        if (PIR1bits.TMR1IF == 1)
        {
            CloseTimer1();
            if (counter == 10)   // no me da el tiempo del timer1 para lograr el tiempo q necesito. Agrego una                              [INDENT][INDENT][INDENT]// variable auxiliar.[/INDENT][/INDENT][/INDENT]
            {

                if (action == 0)    //0 - moveUP  hay 5 acciones.
                {
                    mLED_3_On();
                    mLED_7_Off();
                    BuzzerOn();
                    Delay1KTCYx (35000);
                    BuzzerOff();
                    buffer[0] = 0;
                    buffer[1] = 0;
                    buffer[2] = -1;
                }
                if (action == 1)    //1 - moveLEFT
                {
                    mLED_4_On();
                    mLED_3_Off();
                    BuzzerOn();
                    Delay1KTCYx (35000);
                    BuzzerOff();
                    buffer[0] = 0;
                    buffer[1] = 1;
                    buffer[2] = 0;
                }
                if (action == 2)    //1 - moveDOWN
                {
                    mLED_5_On();
                    mLED_4_Off();
                    BuzzerOn();
                    Delay1KTCYx (35000);
                    BuzzerOff();
                    buffer[0] = 0;
                    buffer[1] = 0;
                    buffer[2] = 1;
                }
                if (action == 4)    //1 - moveDOWN
                {
                    mLED_6_On();
                    mLED_5_Off();
                    BuzzerOn();
                    Delay1KTCYx (35000);
                    BuzzerOff();
                    buffer[0] = 0;
                    buffer[1] = -1;
                    buffer[2] = 0;
                }
                if (action == 5)    //5 - leftClic
                {
                    mLED_7_On();
                    mLED_6_Off();
                    BuzzerOn();
                    Delay1KTCYx (35000);
                    BuzzerOff();
                    buffer[0] = 0b00000001;
                    buffer[1] = 0;
                    buffer[2] = 0;
                }

                if (action > 5)
                    action = 0;
                else
                    action ++;

            }

            counter ++;

		//Clear the interrupt flag
                        PIR1bits.TMR1IF = 0;    //Clear the interrupt flag
            OpenTimer1(TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_1 & T1_OSC1EN_OFF
          &T1_SYNC_EXT_OFF);
                WriteTimer1(15625);
               
        }
                
        #if defined(USB_INTERRUPT)
	        USBDeviceTasks();
        #endif
	}

el open timer1 supongo que sobra.
afuera de la isr se configura el timer y se escribe el valor deaseado.

El main. es un while(1)



Se puede cerrar el tema. Eran multiples errores.
Fataba poner:
1) counter = 0
2) me comi el action = 3
 
Última edición:
Atrás
Arriba