fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

UART PIC

5 Respuestas
4 Usuarios
0 Reactions
1,613 Visitas
superprp
Respuestas: 203
Topic starter
(@superprp)
Estimable Member
Registrado: hace 18 años

Buenas,

Tengo unas dudas sobre el funcionamiento de las UART, os comento:
Cuado tu pones putUART1(buffer); esto envia el vector buffer por el puerto serie, pero si el vector tiene 4 posiciones, y son de tipo char, quiere decir que envias 4 bytes, esto como se hace? se envian un byte y hasta que no se envien todos no sigue ejecutando instrucciones? lo pone en algun registro de envio y sigue realizando tareas el pic y eso se va enviando? como va exactamente?

Responder
4 respuestas
morgoz
Respuestas: 208
(@morgoz)
Estimable Member
Registrado: hace 18 años

Buenas!!

Yo con PIC no he hecho nada nunca.

Por como planteas el código, parece que la sentencia "putUART1" es de un lenguaje de mayor nivel que ensamblador puro, con lo que lo más seguro es que "por detrás" de esta sentencia se ejecute un código de más bajo nivel en el que tu vector quede almacenado en posiciones de la memoria RAM y estas vayan siendo recorridas y enviadas por el puerto serie de forma "transparente" al programador.

El UART de tu micro tendrá un determinado tamaño de buffer (normalmente 1 byte en envío y 1 byte en buffer), aunque depende del protocolo que hayas establecido, el datagrama (lo que envías) puede llevar 5, 6, 7 u 8 bits de datos, pero no nos liemos.

Asi pues, en tu caso, por detrás de esa sencilla instrucción "putUART1" probablemente lo que se haga sea: (supongamos el UART inicializado y activo para enviar datos) almacenar en posiciones de memoria tu vector (4 posiciones de 1 byte), recoger un dato de 1 byte y meterlo en el buffer del UART, esperar a que el buffer quede libre (pasaría el dato al buffer de envío), incrementar la posición de memoria a la que se accederá, leer el siguiente dato, meterlo en el buffer ya liberado del UART, etc...

Respecto al tema de si se van ejecutando el resto de instrucciones mientras se envían los datos, si y no. Al no ser que estes programando con threads en una plataforma multiprocesador, depende de lo "sabio" que sea el compilador de tu lenguaje, el lenguaje de más bajo nivel que se genere estará más o menos optimizado, pero en este caso lo más probable es que no se ejecute nada más hasta que todo el vector de datos se haya enviado.

Espero haberme explicado medianamente bien.

Saludos!!

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

superprp, es posible que lo haga por interrupciones, y el putUART1 lo que hace sea habilitar las interrupciones para que cada vez que se genera una recoja el siguiente caracter del buffer.

S2

Ranganok Schahzaman

PD: Qué compilador es CCS o C18?

Responder
Lorth
Respuestas: 188
(@lorth)
Estimable Member
Registrado: hace 17 años

Pega el codigo aqui.

Responder
superprp
Respuestas: 203
Topic starter
(@superprp)
Estimable Member
Registrado: hace 18 años

¿es posible que se envie algún byte dos veces? lo tengo ejecutando sobre 10 minutos y en ese tiempo hay un par de mensajes que me ha enviado un byte duplicado y por lo tanto mal el mensaje porque tiene un byte mas que no esperaba, ¿a que se puede deber? alguna idea?

Responder
Compartir: