- Código: Seleccionar todo
/*--------------------------------------------------------*\
| Ejemplo uso de interrupción externa por RB0 |
| autor: biblioman |
| www.aquihayapuntes.com |
\*--------------------------------------------------------*/
#include <16F84A.h>
#FUSES NOWDT //No utilizar el timer Watch Dog
#FUSES XT //Oscilador XT <= 4mhz
#FUSES NOPUT //No timer en la alimentación
#FUSES NOPROTECT //codigo no protegido
#bit RB0=0x06.0 //Identificadores de bits
#bit RB7=0x06.7
#bit RB1=0x06.1
#use delay(clock=4000000)//Frecuencia de reloj
#int_EXT
void EXT_isr(void){
if (RB1)//Si el interruptor de desactivación está abierto
{
RB7=1;// activa la alarma conectada en RB7
while(RB1); //mientras el RB1=1 bucle infinito
RB7=0; //cuando RB1=0, se desacactiva la alarma
}
}
void main(){
set_tris_b(0b01111111); //configura la puerta B
RB7=0;//inicializo RB7
enable_interrupts(GLOBAL);//habilito interrupción global
enable_interrupts(INT_EXT);//habilito interrupción externa
while(true); //Bucle infinito hasta interrupción
}
La alarma es muy simplona. Como posibles mejoras se podría hacer:
-Sustituir el interruptor por un LCD y un teclado, que presente un menú donde se pueda introducir una clave para desactivar la alarma, así como poder cambiar la clave que se tendrá que guardar en la EPROM del PIC.
-También que avise al exterior por medio de un SMS ó una llamada a un teléfono que previamente tengamos seleccionado.
Bueno espero vuestros comentarios y modificaciones del ejemplo para mejorarlo.
Un saludo y hasta pronto
El DNS lo tenéis aquí:
