Hola MLO, estuve revisando el ejemplo que mencionas "EX_ENCRY.C" en donde se puede implementar una comunicacion entre dos PCs usando un USART implementado por software y otro por hardware, cuando envio un mensaje del USART Fisico al virtual este recibe el mensaje sin problemas pero cuando trato de hacer lo inverso es decir enviar un mensaje a traves del USART virtual al Fisico el mensaje llaga pero es ilegible, en el comentario de este ejemplo dice que esta encliptado en un sentido pero por mas que reviso este ejemplo no logro ubicar que lineas del programa que hacen la enliptacion, podrias decirme cual es mi error.
/////////////////////////////////////////////////////////////////////////
//// EX_ENCRY.C ////
/////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#define BUFFER_SIZE 32
///////////////////////////////////////////////////////////////// PORT 1
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
byte buffer1[BUFFER_SIZE];
byte next_in1 = 0;
byte next_out1 = 0;
#int_rda
void serial_isr1() {
int t;
buffer1[next_in1]=getc();
t=next_in1;
next_in1=(next_in1+1) % BUFFER_SIZE;
if(next_in1==next_out1)
next_in1=t; // Buffer full !!
}
#define bkbhit1 (next_in1!=next_out1)
byte bgetc1() {
byte c;
while(!bkbhit1) ;
c=buffer1[next_out1];
next_out1=(next_out1+1) % BUFFER_SIZE;
return(c);
}
void putc1(char c) {
putc(c);
}
///////////////////////////////////////////////////////////////// PORT 2
#use rs232(baud=9600, xmit=PIN_B1, rcv=PIN_B0)
byte buffer2[BUFFER_SIZE];
byte next_in2 = 0;
byte next_out2 = 0;
#int_ext
void serial_isr2() {
int t;
buffer2[next_in2]=getc();
t=next_in2;
next_in2=(next_in2+1) % BUFFER_SIZE;
if(next_in2==next_out2)
next_in2=t; // Buffer full !!
}
#define bkbhit2 (next_in2!=next_out2)
byte bgetc2() {
byte c;
while(!bkbhit2) ;
c=buffer2[next_out2];
next_out2=(next_out2+1) % BUFFER_SIZE;
return(c);
}
void putc2(char c) {
putc(c);
}
///////////////////////////////////////////////////////////////////////////////////////
void main() {
char c;
enable_interrupts(global);
enable_interrupts(int_rda);
enable_interrupts(int_ext);
printf(putc2,"\r\n\Corriendo...\r\n");
do {
if(bkbhit1) {
c = bgetc1();
putc2(c);
}
if(bkbhit2) {
c = bgetc2();
putc1(c);
}
} while (TRUE);
}