Saludos.
Estoy tratando de hacer un ratón para computadora. Estoy en la parte de adquisicion de los datos del movimiento del Scroll. Esta ruedita envia 2 señales lógicas; cuando gira 1 "paso" estas señales cambian su valor de "0" a "1" lógico y cuando vuelve a girar vuelve a cambiar de "1" a "0". Si gira hacia abajo la rueda, la señal 1 cambia antes que la señal 2. Si gira hacia arriba, la señal 2 cambia antes que la 1.
Estoy manejando estas señales por medio de interrupciones. Cada 8 Milisegundos debe adquirir cuantos "GIROS" hubo y hacia que direccion. En este momento estoy intentando hacer que, cuando gire hacia "arriba" se prenda un led, y cuando gire hacia "abajo" se apague. Este es el código que estoy utilizando pines RBO Y RB1 interrupciones. Led pin C1.
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=9600)
int x=0;
int y=0;
#int_ext
void isr0() //CODIGO DE LA INTERRUPCION RB0 //ABAJO
{
{
if (x==0)
{
x=1;
}
else
{
output_high(pin_C1);
x=0;
}
}
disable_interrupts(INT_EXT);
if (PIN_B0==1)
{
ext_int_edge(H_TO_L);
}
else
{
ext_int_edge(L_TO_H);
}
enable_interrupts(INT_EXT);
}
#int_ext1
Void isr1() //CODIGO DE LA INTERRUPCION RB1 ARRIBA
{
{
if (x==0)
{
x=1;
}
else
{
output_low(pin_C1);
x=0;
}
}
disable_interrupts(INT_EXT1);
if (PIN_B1==1)
{
ext_int_edge(1,H_TO_L);
}
else
{
ext_int_edge(1,L_TO_H);
}
enable_interrupts(INT_EXT1);
}
void main()
{
//se inicializa todo
set_tris_b(0xBF);
set_tris_C(0x00);
enable_interrupts(INT_EXT); //INTERRUPCION POR CAMBIO EN RB0
enable_interrupts(INT_EXT1); //INTERRUPCION POR CAMBIO EN RB1
enable_interrupts(global); //
ext_int_edge(l_to_h);
ext_int_edge(1,l_to_h);
do
{
y=1;
if(y==1)
y=0;
}
while(1);
}
Pero con este código siempre se mantiene encencido el led del pin C1. ¿Que estoy haciendo mal?, se puede cambiar el flanco de bajada o subida en cualquier parte?, o no se puede hacer esto?.
Gracias y espero que alguine pueda ayudarme por Favor.