Autor Tema: Interrupcion por flanco de bajada  (Leído 4706 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado JARomo

  • PIC10
  • *
  • Mensajes: 1
Interrupcion por flanco de bajada
« 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?

Código: [Seleccionar]
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;

}

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Interrupcion por flanco de bajada
« Respuesta #1 en: 03 de Julio de 2012, 13:44:12 »
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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado eliasmtz

  • PIC10
  • *
  • Mensajes: 6
Re:Interrupcion por flanco de bajada
« Respuesta #2 en: 30 de Noviembre de 2015, 12:34:50 »
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:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Interrupcion por flanco de bajada
« Respuesta #3 en: 30 de Noviembre de 2015, 19:57:23 »
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.


 

anything