Si, estoy familizarizado con el manejo y programacion de pics, pero la verdad es que la entrada ra4 como contador de pulsos nunca la habia utilizado, he desarrollado el siguiente codigo:
//Programa pra gaitaalternativo de toque
/*
a ver, secuencialemte:
1) tu envias un bit por el puerto B.
2) lees el puerto A.
3) Lo comparas con la lectura anterior del puerto A
4) si es el negado, es que ha llegado bien, si no lo es, es que ha pulsado
en cuanto detecta que una lectura del puerto A no es la negada de la anterior lectura....es que ha pulsado
*/
#include <16F877.h>
#device ADC=8
#use delay(clock=16000000)
#use rs232(baud=31250, xmit=PIN_C6, rcv=PIN_C7)
#fuses HS, NOLVP, NOWDT //, NOWDTE//, NOBODEN
#byte porta =0x05
#byte portb = 0x06
#byte portc = 0x07
int i;
int pulsos_tx=30;
int pulsos_rx;
void mira();
void envia_pulsos(int num);
void main(){
set_tris_b(0x00); /*PtoB salida*/
set_tris_a(0b111011); /*PtoA entrada --> menos el a2*/
setup_counters (RTCC_EXT_L_TO_H, RTCC_DIV_1);
while(1){
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
envia_pulsos(pulsos_tx);
pulsos_rx=get_timer0();
if(pulsos_rx==pulsos_tx){
output_bit(PIN_A2, 1);
delay_ms(50);
output_bit(PIN_A2, 0);
delay_ms(50);
output_bit(PIN_A2, 1);
}
}//cierre del while
} // cierre del main
void envia_pulsos(int num){
int i=0;
while(i<num){
portb=0b10000000;
delay_us(2);
portb=0b00000000;
delay_us(2);
i+=1;
}
}
Pero algo debe estar mal en las interrupciones porque da igual que le llegen los pulsos o no.