Programa para mantener un LED parpadeando (Alarma)

Hola! Necesito que alguien me eche una mano.
Tengo un programa para PIC16F887 de una alarma con 8 entradas y 8 salidas. (2 puertas y 4 ventanas, bit3 y bit 7 son no implementados)

El problema es que necesito que cuando uno de los leds encienda, se quede haciendo la función de intermitente (alarma) pero que lo mantenga haciendo aunque el bit lo cambie a alto o bajo.

Por favor. Si alguien sabe, me caería de maravilla!(y)

Este es el código:
PHP:
void main() {
                TRISC=0x00; //Configurando el Puerto "C" como salida
                OPTION_REG=OPTION_REG & 0x7F; //Activar "Weak Pull-up"
                ANSELH=0x00; //Configurando Entradas Digitales en PORTB
                PORTB=0xFF; //Activando Pull-ups

                while(1)
                {
                 if(PORTB.RB0) //Alarma Encendida
                 {
                 PORTC=PORTB&0x77; //Enmascaramiento
                 delay_ms(250); //Retardo 1/4 de segundo
                 PORTC=0x01; //Alarma activada
                 delay_ms(250);
                 }
                 else
                 {
                 PORTC=0; //Alarma Apagada
}
}
}
 
Última edición por un moderador:
Usa un timer, el timer 1 por ejemplo, que es de 16 bits y tendrás mayor lapso para el desborde.
Lo configuras para que desborde cada x tiempo y haces un output_toggle(PIN_XX);
 
ah! suena interesante... aunque no entiendo muy bien lo que quieres decir con el desborde...
pero cual pin viene siendo? es el que dice TK1CKI?
 
Última edición:
Ah! Suena interesante, aunque no entiendo muy bien lo que quieres decir con el desborde.
El desborde se produce cuando el timer ha llegado a su valor máximo de conteo programado.
En ese momento la cuenta se reinicia al valor precargado y habrá ocurrido un desborde.
¿Pero cuál pin viene siendo? ¿Es el que dice TK1CKI?
No. El pin T1CKI (Timer 1 Clock Input) es el pin de reloj externo para sincronizar el timer 1.
Puedes usar cualquier pin que sea salida, pero ese proceso lo debes hacer dentro del servicio de interrupción por desborde del timer 1.
Por lo tanto, el timer 1 debe ser configurado para operar con el reloj interno.
 
Última edición:
Y si utilizas un diodo LED tipo blinking? Digo, si su función será solo parpadear, te viene como anillo al dedo y te ahorras el pedazo de código.
 
Es sencillo, mira el ejemplo adjunto.
Ahí también se hace uso de la interrupción externa para activar y desactivar el timer 1.

La fórmula para cargar el timer 1 se encuentra en la hoja de datos.
También existen programas en línea sobre calculadoras de timers.
Yo hice un programa para eso y también lo adjunto.
 

Adjuntos

  • 16F887 LED Toggle con Timer 1.rar
    456.1 KB · Visitas: 15
Atrás
Arriba