Aquí está la situación.
Tengo un proyecto que utiliza varios sensores y se conecta a otra unidad a través de UART estándar (8N1).
Debido a que no es necesario perder datos de ningún dispositivo, hice que los sensores múltiples funcionaran como canales UART inalámbricos que logré hacer con éxito, pero el UART estándar no funciona correctamente (ya que algunos caracteres no se detectan en la recepción). final de la otra unidad). Creo que es un problema de matemáticas.
No puedo usar la interrupción en serie porque si lo hago, los datos se perderán de los sensores, por lo que estoy limitado a una interrupción de temporizador.
Actualmente, establezco la velocidad UART estándar en 38400bps y las velocidades de los sensores individuales son aproximadamente 680bps.
¿Estoy configurando el temporizador correctamente?
Así que mi pregunta es la siguiente. ¿Es correcto el siguiente cálculo matemático cuando quiero detectar de manera confiable cuando se procesa un byte de datos en serie a 38400bps?
TMOD = 22h ;Timers to mode 2 auto-reload
TH0 = 10h ;Timer executes every 240 clocks. If I'm not mistaken,
TL0 = 10h ; this means Timer executes 2x before serial character
; is processed? or do I need to subtract a number too?
set timer 0 run
set timer 0 overflow ;to start timer immediately
También la velocidad del cristal para mi micro es de 22.1184 MHz con tapas cerámicas de 33 pF entre cada clavija de cristal y la tierra.
La razón por la que pregunto es porque estoy adaptando mis ideas del tutorial de uart del software de Ricky en enlace pero ha agregado algunas matemáticas adicionales para detectar cuándo entran los bits, pero su programa se detiene mientras espera un poco. Estos puestos son lo que no quiero, por eso me voy con un temporizador, pero estoy buscando la ecuación perfecta.
¿Puede alguien decirme si estoy en la dirección correcta?