Bueno, creo que voy a llorar... AL FIN FUNCIONA!!!!!!!!!!!!
Lo terminé haciendo como se debe, con interrupcion externa y timer para los retrasos.
#include <16F84A.h>
#fuses XT,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#use fast_io(b)
#define IR_IN (!input(PIN_B4))
int8 bit[14], i, error, state=0;
#int_rb
void RC5Decoder() {
error=0;
while(IR_IN==0);
bit[0] = 1;
set_timer0(0);
while(get_timer0()<111);
for(i=1;i<14;i++) {
set_timer0(0);
while(get_timer0()<222);
if(IR_IN==0) {
set_timer0(0);
while(get_timer0()<222);
if(IR_IN==1) bit[i]=1; else error=1;
}else {
set_timer0(0);
while(get_timer0()<222);
if(IR_IN==0) bit[i]=0; else error=1;
}
}
state=1;
disable_interrupts(INT_RB);
}
void main() {
set_tris_a(0);
set_tris_b(0x10);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
ext_int_edge(H_TO_L);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
delay_ms(500);
while(1) {
if(state==1) {
if(error==0) {
output_bit(PIN_A2,bit[0]);
output_bit(PIN_A3,bit[1]);
output_bit(PIN_B0,bit[2]);
output_bit(PIN_B1,bit[3]);
output_bit(PIN_B2,bit[4]);
output_bit(PIN_A1,bit[5]);
output_bit(PIN_A0,bit[6]);
output_bit(PIN_B7,bit[7]);
output_bit(PIN_B6,bit[8]);
output_bit(PIN_B5,bit[9]);
delay_ms(250);
output_bit(PIN_A2,0);
output_bit(PIN_A3,0);
output_bit(PIN_B0,0);
output_bit(PIN_B1,0);
output_bit(PIN_B2,0);
output_bit(PIN_A1,0);
output_bit(PIN_A0,0);
output_bit(PIN_B7,0);
output_bit(PIN_B6,0);
output_bit(PIN_B5,0);
state=0;
}else {
output_bit(PIN_A2,1);
output_bit(PIN_A3,1);
output_bit(PIN_B0,1);
output_bit(PIN_B1,1);
output_bit(PIN_B2,1);
output_bit(PIN_A1,1);
output_bit(PIN_A0,1);
output_bit(PIN_B7,1);
output_bit(PIN_B6,1);
output_bit(PIN_B5,1);
delay_ms(250);
output_bit(PIN_A2,0);
output_bit(PIN_A3,0);
output_bit(PIN_B0,0);
output_bit(PIN_B1,0);
output_bit(PIN_B2,0);
output_bit(PIN_A1,0);
output_bit(PIN_A0,0);
output_bit(PIN_B7,0);
output_bit(PIN_B6,0);
output_bit(PIN_B5,0);
}
enable_interrupts(INT_RB);
}
}
}