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.
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
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: