Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

18/09/2013 #1


Cómo leer mas 2 bytes seguidos en la comunicación serial del pic
Soy nuevo,
hola amigos ! tengo una duda : Entiendo de que el pic solo puede leer 8 bits a la vez ósea que solo 1byte , mediante la comunicación serial; a hora mi duda es: Como puedo hacer para que el pic lea mas de 2 bytes seguidos, he hecho un programa en app inventor que envía 8 bytes seguidos por medio de bluetooth y recibo los datos mediante un modulo bluetooth HC-06, la salida de dicho modulo es serial la cual la he conectado a los pines rx y tx del pic y al parecer todo funciona de maravilla únicamente con 1byte, pero cuando envío mas de 2 bytes el pic únicamente lee 1byte y pues es necesario que lea los 8 bytes seguidos para implementarlo a un proyecto que estoy haciendo. El programa del Pic que he realizado esta elaborado en mikrobasic pro y es el siguiente:



program UART
dim DATO as byte
dim cont as byte
main:
ANSELC = 0 \' configuración del puerto C como salidas digitales
ANSELB = 0
TRISB = 0
PORTB = 0

UART1_Init(9600) \' inicializar modulo UART a una velocidad de 9600

Delay_ms(100) \' espera para la estabilización del modulo



while (TRUE)

if (UART1_data_Ready() <> 0) then \' si el byte de Start es recibido
DATO = UART1_Read() \' entonces que lea los datos recibidos y que los aguarde en la variable DATO
portb = DATO \' que muestre los DATOS recibidos en el PUERTOB
delay_ms(500)
end if

wend
end. ...
18/09/2013 #2

Avatar de BKAR

"Entiendo de que el pic solo puede leer 8 bits a la vez ósea que solo 1byte"

en los 16F
lee y se carga al registro RCREG, cuanod se completen los 8bits(si es que desprecias rxd9) que llegan al USART por el RX, entonces se activa un flag que indico que llego algo a RCREG.

eso se pude hacer por interrupcion o preguntando por el flag (poleo)

si el pic lee 1 byte OK, a la vez.. simplemente has la misma subrutina para leer otro...

el pic recive un BYTE y lo guarda en RCREG,si todo esta configurado como debe ser... chanca ese registro si es que llega un nuevo dato... y asi y asi..

bueno, en tu codigo C vuelve a preguntar con "UART1_Read()" guarda en "DATO2", que se yo..
18/09/2013 #3

Avatar de electroconico

Tienes que implementar un buffer.
Lo que es recibir el dato serial y almacenarlo,cuando tengas los 8 bytes los procesas.

Puedes guardarlos en un arreglo.(ARRAY)
18/09/2013 #4


Si esperas tanto -> delay_ms(500)
cuando vas a leer el siguiente byte de la trama ya lo has perdido(e incluso muchos más).
18/09/2013 #5

Avatar de Scooter

Entierra muy hondo la función delay y no la uses mas. Es una plaga.

En serio, si haces retardos largos el sistema está muerto y todo lo que pase se pierde. Úsala solo para retardos de unos pocos (muy pocos) ms.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.