TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fastyx en 13 de Abril de 2007, 12:49:09
-
Amigos : necesito conocer que ocurre con getc ( ) si desde por ejemplo la terminal de puerto serie ( siow) del ccs envio una cadena de caracteres seguidas
por ejemplo 0xc0 0xc1 0xc2 ,
segun el ccs:
getc():
Function:
This function waits for a character to come in over the RS232 RCV pin and returns the character( ADONDE LO RETORNA? ) . If you do not want to hang forever waiting for an incoming character use kbhit() to test for a character available. If a built-in USART is used the hardware can buffer 3 characters otherwise GETC must be active while the character is being received by the PIC®.
If fgetc() is used then the specified stream is used where getc() defaults to STDIN (the last USE RS232).
que hace? toma el primer byte y los otros dos los pierde ? como puedo yo ante una cadena como esta procesar uno por uno?
agradeceria cualquier ayuda para salir de este embrollo y dejar de preguntar y preguntar...
-
Si, toma un solo caracter.
Debes repetir el ciclo tantas veces como sea necesario.
Saludos
-
gracias por contestar!
hay alguna manera entonces ( me imagino que si ) de detectar el bit de start que llega a mi placa desde el serial , permitir la entrada de los 9 bit restantes ( 8 + el de stop ) y mandarle una señal por ejemplo cts para que el serial pare la transmision?
-
también puedes implementar un eco para controlar las transferencias, después que el pic tome el dato con getc debe enviar a la otra terminal un dato (ej: 'a') y en la otra terminal debe esperar a que llegue esa 'a' antes de enviar el siguiente dato.
-
lo que decis esta bueno , de lo que quiero estar seguro es mandarle el 'a' cuando haya terminado de entrar el byte limpito y antes que mande el que le sigue en la fila
-
este es parte de un código que monté para transmitir por usb.
del lado del pic:
...
if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
printf(usb_cdc_putc,"%Lx", value); // envia el ADRESH:ADRESL al HOST
...
del lado de la pc (usando visual basic)
...
Private Sub Timer2_Timer()
On Error GoTo palla1
MSComm1.Output = "a"
Exit Sub
...
el pic se queda esperando por la 'a' que debe mandar la PC, hasta que no llegue el micro no manda datos.
por su parte la PC está continuamente enviando la 'a' y se queda escuchando y captando los datos que le envía el pic.
es mas o menos una idea, se podría mejorar si el pic envía un dato de confirmación, ya sería como armar un paquete de datos, mediante tramas (sería otra historia).
-
ok gracias por la idea!!
-
Hola fastyx, si lo que necesitas es recivir una cadena de caracteres por rs232 entonces usa la funcion gets(), que en la ayuda del CCS te la explican bien, es muy parecida a getc() solo que espera por los caracteres hasta que recive un enter (es decir 0x0d en hex si no me equivoco), en cuanto a donde los pones, pues los pone en el buffer de entrada del pic hasta que llega otro caracter... otra forma de hacerlo es usando la interrupcion de puerto serie int_rda, asi cada ves que recivas un caracter el pic interrumpe y lo lee... de todas formas dime tu correo y te envio un ejemplo completo con codigo fuente y simulado en proteus para que veas como se hace... Saludos J.C