Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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?
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!!
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?
Pega el codigo aqui.
¿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?