Aqui hay un ejemplo muy basico y sin optimizar, que aprovecha la perdida de tiempo sufrida por los rebotes de los pushbutton, es basicamente un chekeo de que boton fue oprimido, y bajo esta condicion, es determinado el numero de parpadeo del led conectado en porta.1(si se oprime el boton conectado en el pin B5, parpadea 5 veces, si se oprime el boton en el pin B6, parpadea 6 veces... etc)
#include <16F84A.h>
#fuses XT,NOWDT
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#byte puerto_b = 6 /* dirección del puerto B */
#byte puerto_a = 5 /* dirección del puerto A */
#use fast_io(A)
#use fast_io(B)
PARPADEO(UNSIGNED INT C){
FOR(;C!=0;C--){delay_ms(200);
bit_set(puerto_a,1); /*a0=1*/
delay_ms(200);
bit_clear(puerto_a,1); /*a0=0*!*/
}}
main()
{puerto_b = 0;set_tris_b( 0b11111111 ); /*Todas entradas!!*/
puerto_a = 0;set_tris_a( 0b11111000 ); /*a0-a2 salidas*/
enable_interrupts(int_RB);
enable_interrupts(GLOBAL);
while (1){delay_ms(1000);
bit_set(puerto_a,0); /*a0=1*/
delay_ms(1000);
bit_clear(puerto_a,0); /*a0=0*!*/
}}
#int_RB
RB4_RB7_ISR(){
PUERTO_B=PUERTO_B;
IF(PUERTO_B==16)PARPADEO(4);
IF(PUERTO_B==32)PARPADEO(5);
IF(PUERTO_B==64)PARPADEO(6);
IF(PUERTO_B==128)PARPADEO(7);}
S2lu2 pana