#include <16F648.h> //pic a utilizar
#fuses XT,NOWDT,NOPROTECT //fusibles (cristal, sin watch dog, sin proteccion)
#use delay(clock=4000000) //velocidad del cristal
#use fast_io(A) //el compilador no se asegura que los puertos esten asignados
//correctamente como entradas o salidas segun corresponda, esto evita
//codigo extra, pero se tiene que configurar correctamente los registros
//tris segun el uso que se le de a los puertos.
#use fast_io(B)
#INT_EXT //interrupcion externa en RB0 (codigo que se ejecutara por cada pulso ascendente)
void interrupcionRB0() {
output_a(0b00000); //pongo a cero el puerto A
delay_ms(1000) //por cada interrupcion en RB0 RA0 se apaga 1 segundo
}
void main () { // programa principal
delay_ms(333); //pausa mientras se estabiliza el pic
disable_interrupts(global); //desabilito todas las instrucciones que voy a usar
disable_interrupts(int_ext);
delay_ms(333); //estabilizo y pongo a "cero" el pic
///////////////inicializo las partes a usar del pic///////////////////////
set_tris_a(0b00000); //todo el puero a como salidas
output_a(0b00000); //pongo a cero todo el puerto A
set_tris_b(0b00000001); //selecciono RB0 como entrada
ext_int_edge(0,L_TO_H); //configuro para que detecte flancos ascendentes
enable_interrupts(int_ext); //habilito la interrupcion externa
enable_interrupts(global); //habilito el uso de interrupciones
do {
output_a(0b00001); //pongo a 1 RA0
}
} while (TRUE); //bucle infinito
}