TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: moneli en 22 de Abril de 2008, 09:16:46
-
hola a todos, soy nuevo en el foro y necesito aclarar algunas dudas en cuanto a la comunicacion RS232.... de antemano los doy las gracias y los felicito por este foro que esta genial... y bueno a lo que iba... a modo de ubicacion estoy usando el PIC16F73, trabajo en C con el CCS
la idea es recibir una cadena de caracteres por puerto serie y mostrarla en un LCD, ahora bien ya logre enviar un caracter desde la PC con un programa hecho por mi, y lo muestro en el LCD del cacharo, pero cuando envio una cadena de caracteres me muestra cosas raras en el LCD
ahora bien pregunto
1ro- Como se puede recivir una cadena de caracteres, existe alguna funcion aparte de getc(), que lo haga, he probado hacer un buffer y guardar los caracteres uno a uno pero nada.
si me pudieran orientar como hacerlo o por lo menos donde puedo encontrar informacion sobre el tema se lo agradeceria mucho, saludos y gracias por su tiempo
-
1ro- Como se puede recivir una cadena de caracteres, existe alguna funcion aparte de getc(), que lo haga, he probado hacer un buffer y guardar los caracteres uno a uno pero nada.
si me pudieran orientar como hacerlo o por lo menos donde puedo encontrar informacion sobre el tema se lo agradeceria mucho, saludos y gracias por su tiempo
Puedes hacer precisamente eso, una función que lea un caracter por caracter y lo guarde en el buffer. De todas formas deberás indicarle a esa función qué la hace terminar, es decir si va guardando en el buffer hasta que llegue un #0 o si lo hace hasta que llegue un #13 , etc.
Y si quieres, puedes pegar el código de la función que dices que no anda. Saludos
-
Hola.
La mejor manera de trabajar con el RS232 es con interrupciones. Ve a la pagina del GRAN RedRaven (http://picmania.garcia-cuervo.com/index.php), yo aprendi de ahi casi toooodo lo del CCS y va de lujo hasta ahora (Las otras partes de mi aprendizaje se las debo a J1M, Nocturno ... y demas!!! GRACIAS:mrgreen:).
Hay una seccion en la cual esta descrito el manejo del serial con interrupciones de una manera muuuuuy detallada :-), te aseguro que lo entenderas!!!!! :P
Un saludo
-
Saludos gente pregunto...
todos los pic traen prefijados el pin de Tx y Rx, pero segun he visto por software se pueden usar otros, ahora la duda mia es la siguiente cuando uso las interrupciones de Tx y Rx estas salen a buscar los pines prefijados o usan los que configuro por sotfware... como puede saber eso y como se pueden cambiar... saludos y suerte J.C
-
mira, justamente hace poco termine de hacer un ejemplo con lo q pedis... te lo paso
(ojo con las conexiones)
#include <16F84A.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#define Tx PIN_A1 // PIN de Transmisión
#define Rx PIN_A0 // PIN de Recepción
#use rs232(baud=9600,parity=N,xmit=Tx,rcv=Rx,bits=8)
#use fast_io (a)
#use fast_io (b)
#define use_portb_lcd TRUE
#include "lcd.c"
void main()
{
char a[16];
lcd_init();
printf("pic a la espera\n");
printf(lcd_putc,"\fpic listo");
while(true)
{
gets(a);
printf("recibido: %s\n",a);
printf(lcd_putc,"\frecibido:\n%s",a);
}
}
-
Cuando se usa el #use rs232 ..... y se usan los pines asignados en HW si se puede utilizar las interrupciones, si se usan los otros pines no. De hecho, en el ejemplo EX-ENCRY usan dos modulos de serial y en uno de ellos se atiende la interrupcion por el RB0.
Creo que la interrupcion del serial es cuando se llena el registro RCREG, en el datasheet esta conectado el diagrama de transmision al pin RX/DT.... asi que por eso mi conclusion.... pero la verdad verdad .... no he probado con otros pines
-
gracias a todos por su ayuda con este tema de la rs232, la verdad me hubiera sido imposible lograr comunicarme... felizmente y gracias a ustedes ya puedo conectar un tareco a la PC :-/ :-/ :-/... cuenten con mi ayuda para lo que sea... pronto publicare el codigo completo de mi proyecto para los que deseen hacer una cerradura optica... gracias de nuevo saludos y suerte J.C