Que tal Roddrickk, bueno, lo primero que tendríamos que mirar es el micro que vas a utilizar, ya que hay bastante diferencia de uno a otro.
La diferencia de C a C18 no es ninguna, lo único es que sea apto o no para programar micros de la familia 18f o no.
Por lo que veo en el último código lo que quieres es ver los datos que te llegan de un receptor infrarojos de 38 kHz. Cogiendo el Datasheet del ZR-IRM cuando detecta infrarojos en 38 kHz, la línea de data (pin 1) saca un nivel bajo, y cuando no lo recibe un nivel alto.
Funciona la recepción, lo malo que me llegan puros símbolos raros y a veces me muestra el botón correcto, he intentado averiguar el porque?, al parecer tienen que ver los delays, pero no logro tenerlo muy claro, a ver si pueden despejarme mis dudas, saludos.-
La verdad es que tampoco voy a analizar el código muy bien, porque soy partidario que empieces escribiendolo de nuevo, así se evitan errores y una mejor comprensión del programa.
Pero, por lo que veo del sensor, soló es capaz de decir si algo esta emitiendo en 38 kHz o no, por lo que no hay ningún tipo de transmisión de datos, por lo soló sería posible ver esto, o haciendo un comparaciones por tiempo, mirar si es pulsado varias veces...etc.
Lo que quiero decir es que la interrupción adecuada sería la que dice Suki, la de RB0 (o RB4-7), el flanco da lo mismo, y la idea que te decia era que el emisor, para diferenciar entre 2 o 3 botones, es que uno mande un pulso, otro de los botones mande 2 pulsos en X tiempo y el 3º que mande 3 pulsos en el mismo tiempo (x).
Por lo tanto el programa temdría un tiempo en la recepción, que analiza en X tiempo, cuantos pulsos a recibido, y que pasado ese tiempo x la variable vuelva a 0. Pero personalmente pienso que si lo que quieres es transmitir datos, o hacer un mando a distancia o algo así este sensor no es el adecuado.
El programa sería más o menos: activamos interrupciones (mirar datasheet del pic) supongo que INT0IE (RB0), GIE (General). Dentro de la interrupcion bajar la bandera del rb0 (INT0IF) y sumar 1 a la variable, en main un bucle de 300 ms (deberás meter dalays ya que es mucho tiempo) y despues de este bucle comparar la variable a ver a cuanto esta para determinar lo pulsado.
Salu2 y espero haber ayudado.