Hola Ra2ven:
Disculpas las demoras en mi respuesta, si aún no has resuelto el conflicto, aqui te dejo un breve código que muestra como realizar la comunicación.
Pic 1
#include <16F876.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES PROTECT //Code protected from reads
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
char r;
#int_RDA
void RDA_isr(void)
{
if(kbhit()){
r=getch();
}
}
void main()
{
enable_interrupts(global);
enable_interrupts(int_rda);
set_tris_A(0xF0);
output_bit(pin_c0,0);
inicio:
if (input(Pin_A4))
{
output_bit(pin_c0,1);
putc('d');
delay_ms(1);
output_bit(pin_c0,0);
}
delay_ms(500);
Goto inicio;
}
El código del Pic 2
#include <16F876.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES PROTECT //Code protected from reads
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
char r;
#int_RDA
void RDA_isr(void)
{
if(kbhit()){
r=getch();
}
}
void main()
{
enable_interrupts(global);
enable_interrupts(int_rda);
output_bit(pin_c0,0);
r='b';
inicio:
if (r=='d')
{
output_bit(pin_c0,1);
printf("L");
delay_ms(1);
output_bit(pin_c0,0);
r='b';
}
Goto inicio;
}
Y te adjunto el proyeco en el Proteus.
Cualquier duda sobre el código, solo consultalo.
Saludos cordiales
Ing. Rodrigo Ramirez