#include <16f887.h>
#use delay (clock=1000000)
#int_ext
void interrupcion()
{
output_high(PIN_D0);
}
void main()
{
set_tris_d(0b00000000);
enable_interrupts(int_ext);
enable_interrupts(global);
ext_int_edge(H_TO_L);
output_low(PIN_D0); //inicio con el led apagado
while(1)
{
if(input(PIN_D0)) //si el led está prendido, esperar 1 seg y apagarlo
{
delay_ms(1000);
output_low(PIN_D0);
}
}
}
Lo que pasa es que quiero poder activar por ejemplo con 4 pulsadores sobre distintos pines, y poder ver cuál pulsador cambió de flanco.
Estoy leyendo el link, podría usar esa interrupción de los bits 4-7 del puerto b, y si hago a tiempo antes de que el pulsador se me despulse, preguntar qué puerto acaba de cambiar y guardarlo en una variable.
#include <16f887.h>
#use delay (clock=1000000)
int8 i=0;
#int_ext
void sumar()
{
i=i+1;
}
void main()
{
int8 num[10],i_anterior=15;
enable_interrupts(int_ext);
enable_interrupts(global);
ext_int_edge(H_TO_L);
set_tris_d(0x00);
set_tris_b(0b00000001);
output_d(0x00);
num[0]=0b00111111;
num[1]=0b00000110;
num[2]=0b01011011;
num[3]=0b01001111;
num[4]=0b01100110;
num[5]=0b01101101;
num[6]=0b01111101;
num[7]=0b00000111;
num[8]=0b01111111;
num[9]=0b01100111;
while(1)
{
if(i<10 && i_anterior!=i)
{
output_d(num[i]);
i_anterior=i;
}
if(i>=10)
{
output_d(0b01000000);
delay_ms(500);
output_d(0b00000000);
delay_ms(500);
}
}
}