Programación Específica > Programación en C
Comunicación RS232-16F876A-MAX232
(1/1)
Ricardo.Ojeda:
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í:
--- Código: Text --- #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_rdavoid 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!
allisap:
tu problema esta en la linea 18
--- Citar --- printf(rcvchar);
--- Fin de la cita ---
cuando recibes un caracter por ejemplo una A (ascci 65)
recibes un 65 decimal
pero cuando lo envías de regreso por el serial usando
printf(rcvchar);
estas enviando un 65 (un seis decimal y un cinco decimal separados)
para recibirlo correctamente prueba con esto
printf('%c',rcvchar);
espero que te sirva, saludos
Victor Pasilla Campos
Navegación
Ir a la versión completa