Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola , a ver si alguien me puede ayudar, tengo un programa en el que necesito detectar flancos de bajada en los puertos del microcontrolador.
¿ cómo lo hacen ustedes?
Yo lo que he hecho es lo siguiente pero no sé si es correcto, por ejemplo detectar flanco de bajada en el puerto P2:
while ( ! P2);
While ( P2); ..........// instrucciones.
ó por el contrario :
While (P2);
while(! P2) ;........................// instrucciones
¿ cual creen que es correcta?
Ayuda por fi. 😯
Esa es una forma de hacerlo, pero tiene el problema de que el micro se queda parado esperando a que se cumpla la condición.
Otra forma de hacerlo sin que se quede parado el micro es esta:
static int1 P2_Anterior; // Variable auxiliar tipo bit, int1 para el compilador CCS
...
...
// Se lee: Si P2 es 1 y P2 antes era 0 (es que ha cambiado de 0 a 1)
if (P2 && !P2_Anterior) // Esto detecta el franco ascendente
{ ....
}
...
// Se lee: Si P2 es 0 y P2 antes era 1 (es que ha cambiado de 1 a 0)
if (!P2 && P2_Anterior) // Esto detecta el franco descendente
{ ....
}
...
P2_Anterior = P2; // Importante, después de usar P2_Anterior hay que asignarle el valor actual de P2
Solo se necesita una variable de bit auxiliar para recordar el estado anterior de la variable consultada.
Bueno, como consejo asegurate de que la señal no tenga muchos rebotes o ruido, sino puede confundirse con flancos. Por otro lado, también puedes hacerlo con una interrupción, de manera que la rutina salte automáticamente, esto no te lo recomiendo si los flancos se van a suceder muy rápido unos tras otros.
Un saludo.
En los pics lo detecta automáticamente (por Hardware) en las interrupciones externas.
S2
Ranganok Schahzaman