Si, así. Te decía lo de input(PIN_B4) porque te devuelve el estado del pin, y no es necesario re-definir nada, ya todo esta hecho o casi todo
Saludos!
Hola:
Pues al simular en proteus no me entra la interrupcion al cambio de estado en ninguno de los pines RB4-7.La verdad es que no veo donde puede fallar. Podria ser el proteus?
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(d)
#use fast_io(a)
#byte port_b=0x06
// FUNCION INTERRUPCION
#INT_RB
void IntPortB4_7()
{
output_high(PIN_B0); //indicador interrupcion on
output_low(PIN_A0);
if (bit_test(port_b,4 )&& !bit_test(port_b,5 )&& !bit_test(port_b,6 )&& !bit_test(port_b,7 )){
output_high(PIN_D4);
delay_ms(1500);
output_low(PIN_D4);}
if (bit_test(port_b,5 )&& !bit_test(port_b,4 )&& !bit_test(port_b,6 )&& !bit_test(port_b,7 )){
output_high(PIN_D5);
delay_ms(1500);
output_low(PIN_D5);
}
if (bit_test(port_b,6 )&& !bit_test(port_b,4 )&& !bit_test(port_b,5 )&& !bit_test(port_b,7 )){
output_high(PIN_D6);
delay_ms(1500);
output_low(PIN_D6);}
if (bit_test(port_b,7 )&& !bit_test(port_b,4 )&& !bit_test(port_b,5 )&& !bit_test(port_b,6 )){
output_high(PIN_D7);
delay_ms(1500);
output_low(PIN_D7);}
output_low(PIN_B0); //indicador interrupcion off
output_b(input_b()); // leer/escribir el puerto B al finalizar la interrupción para que no se vuelva a ejecutar
}
///PROGRAMA
void main(void)
{
set_tris_b(0b11111110); //portb entrada menos pin RB0 es salida
set_tris_d(0x00);
set_tris_a(0x00);
output_d(0x00);
output_a(0x00);
output_low(PIN_B0);
clear_interrupt(int_rb); // borro el flag de interrupción para que no entre al principio
enable_interrupts(int_rb); //activar interrupcion rb4:7
enable_interrupts(GLOBAL); //activar interrupciones
while(1){
output_high(PIN_A0);}
}