TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: JARomo en 03 de Julio de 2012, 12:07:03
-
Saludos,
¿Cómo puedo configurar el pic para que active la interrupción únicamente por flanco de bajada y corra de forma normal cuando tengo un 1 en el pin donde activo la interrupción (RB7)?
Estoy diseñando un contador con un pic16c711. Utilizo el pin RB7 como detector de pulsos para modificar una variable global llamada num donde llevo la cuenta desplegada al usuario en el display. La modificación de num se hace por medio de una interrupción.
Hasta el momento funciona muy bien y sin problemas cuando uso la interrupción por flanco de subida (0 es su estado normal, cambio a 1 para contar). Sin embargo, cuando modifico la interrupción para que lea por flanco de bajada (1 es su estado normal, cambio a 0 para contar) si hace la cuenta pero jamás es desplegada al usuario porque la interrupción se queda pegada; solo es mostrada cuando RB7 esta en 0.
Estoy programando en Hi-Tech C. Por lo que entiendo de la hoja de datos del pic16c711 debería lograr mi cometido modificando los siguientes tramos de algoritmo como se los muestro pero no parece funcionar... ¿A caso INTEDG no es el único registro que debo modificar para activar la interrupción por flanco de bajada?
void config() // función usada para configurar el pic
{
TRISB=0b10000000;
TRISA=0b00000000;
GIE=1; //habilitación de interrupciónes
RBIE=1;
RBIF=0;
INTEDG=0; //interrupciónes por flanco de bajada
}
void int // rutina de interrupción en RB7
isr(void)
{
if(RB7==0)
{
PORTB=0B00000000;
num=num+1;
Wait(); //función de espera
}
while(RB7=0){}
RBIF=0;
}
-
Hola.
No vas a poder, ya que la interrupción de cambio de puerto B(RBIE) detecta siempre ambos flancos.
Para poder interrumpir sólo en un flanco, o bien hacés como estás haciendo allí en tu ISR, descartando el flanco alto de RB7, o bien utilizás la interrupción INTE que está asociada al pin RB0 y sí te permite seleccionar el flanco mediante INTEDG.
Para decirlo fácil, RB0 tiene una interrrupción asociada que permite interrumpir en sólo un flanco, y RB4-RB7 tiene interrupción ante cualquier cambio de cualquiera de ellos.
Saludos.
-
Es posible cambiar el ultimo estado del pin (al entrar en la interrupción)? (cuando entre por estado de 1, cambiarlo nuevamente a 0). :roll:
-
Es posible cambiar el ultimo estado del pin (al entrar en la interrupción)? (cuando entre por estado de 1, cambiarlo nuevamente a 0). :roll:
Como no quedo muy claro lo que quisiste preguntar:
La interrupcion por cambio (nivel), va a entrar cuando pasa de 0 -> 1, y de 1 -> 0. Si o si.
Si es por flanco podes elegir entre flanco ascendente y/o descendente, Aqui si podes poner que entre con flanco ascendente y luego dentro de la interrupcion cambiarlo a que la proxima interrupcion entre por flanco descendente.