Hola buenas.
Estoy realizando un proyecto con el PIC 16F876A y necesito comunicarlo con el PC vía RS232. Mediante un programa (tipo hyperterminal) intento la transmisión al PIC y ocurre lo siguiente:
TRANSMITO: dsdeewrdzxzcc
RECIBO: €@€@€@€@€@DHDH €@ €@
Está configurado a 9600-8-n-1 y la conexión del MAX232 que utilizo es la de condensadores de 1 uF, usando los pines 11,14 y 12,13
Dejo el código del programa que tengo en el pic, por si el error se encuentra ahí:
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // Los Fuses de siempre
#use delay(clock=4000000) // Oscilador a 4 Mhz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // RS232 Estándar
char rcvchar;
// INTERRUPCON /////////////////////////////////////////////////////////////
#int_rda
void serial_isr() // Interrupción recepción serie USART
{
rcvchar=0x00; // Inicializo caracter recibido
if(kbhit()) // Si hay algo pendiente de recibir ...
{
rcvchar=getc(); // lo descargo y ...
printf(rcvchar);
}
}
//////// Programa Principal /////////////////////////////////////////////////////////
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// TODO: USER CODE!!
set_tris_C(0x90);
enable_interrupts(int_rda); // Habilita Interrupción RDA
enable_interrupts(global); // Habilita interrupciones
do
{
// Con esta rutina cada dato que se recibe, lo devuelve (es bastante básico).
// Hay que modificar para hacer lo que se necesite con el dato recibido.
} while (TRUE);
}
A ver si alguien me puede hechar una mano para resolver este problema en la comunicación.
Muchas gracias y saludos!