Hola, yo también estoy dando mis primeros pasos en la comunicación rs232 bajo
C e hice una pequeña modificación al programa de
huichoman y guiándome un poco con el trabajo de
Nocturno1ero: Cambié el pulsador del proteus y le coloqué un switch
2do: El programa quedó así:
#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOCPD,NOLVP,INTRC_IO,NOMCLR,CCP2C1,NOPBADEN
#use delay(clock=4000000)
#USE RS232 (baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#byte RCREG= 0xFAE // Aquí se recibe el dato de la usartchar dato_e='H',dato_r;
void main(void)
{
int8 aux; /* Lo uso para descargar el buffer de recepción y así evitar el error de overrun
y que se cuelgue el pic*/ while(true)
{
output_low(PIN_D1);
if(input(PIN_D0)==0)
{
dato_r=getc();
printf("dato_e :%c dato_r : %c ",dato_e,dato_r); //mensaje por v.terminal
}
else
{
output_high(PIN_D1);
aux=RCREG; }
}
}
///////////////////////////////
En negrita e resaltado los cambios, esto lo hice porque el pic se me quedaba colgado si recibía más de 2 datos sin haberlos procesado previamente, y esto ocurría justo cuando se le enviaban datos teniendo el pulsador o switch abierto, claro también pude trabajar con CREN y detectar el overrun, pero para éste caso en particular lo más sencillo que ví fué esto.
Lo quise compartir porque para mí es muy útil y quizás a otra persona que se esté iniciando también les sea de utilidad.
PD1: Todo esto es posible gracias a las contribuciones de todos nosotros
PD2: Me gusta mucho el foro
, la gente comparte sus conocimientos de una manera excepcional y todos estamos dispuestos a ayudar al prójimo que en verdad quiera aprender y ser ayudado claro!
Saludos.