Código más simple que el bit bitging para que el hardware de serie múltiple funcione con 8051

0

Creé un circuito como el siguiente:

Tengo sub-circuitos que todos toman datos en serie como entrada y hacen un procesamiento misceláneo con ellos. La mayoría de los sub-circuitos son solo pantallas de luz. Quiero controlar dichos circuitos con un microcontrolador con código simple.

Para simplificar, supongamos que todos estos sub-circuitos no tienen opción para un restablecimiento de datos y que las únicas entradas permitidas para ellos son el reloj y los datos en 74HC164 de cada sub-circuito. He ilustrado eso en el lado derecho del circuito mostrado.

Debido al cableado de PCB y demás, terminé conectando los pines 4 y 5 del decodificador 74HC138 a la línea TXD que (de acuerdo con varios recursos puede funcionar como un reloj en modo serie 0). Conecté el pin 6 a un pin GPIO en un intento por evitar falsas alarmas.

Lo que quiero hacer con el software es seleccionar fácilmente cualquier dispositivo y enviarle datos, preferiblemente con el menor número posible de ciclos de instrucción.

Debido a que el modo de puerto serie 0 para 8051 es un buen candidato, lo pensé utilizando un código como este:

mov P1,#8Fh ;use 1st device
clr TI
mov SBUF,A ;A=8 bits of data
jnb TI,$ ;wait for full transmission
mov P1,#9Fh ;use 2nd device
clr TI
mov SBUF,A ;A=8 bits of data
jnb TI,$ ;wait for full transmission
clr TI
mov SBUF,A ;A=8 bits of data
jnb TI,$ ;wait for full transmission - here we sent 16 bytes to device 2.

Ese es el tipo de código que finalmente me gusta usar, pero siento que hay un pequeño problema porque si no me equivoco, un documento en línea afirma que la línea TXD va de baja a alta cuando señala que los datos están listos. y me hace pensar que la TXD se mantendrá baja si no se transmiten datos. Si ese documento es correcto, si elijo cambiar de dispositivo, el último dispositivo utilizado tendrá una transición de baja a alta (lo que significa que se procesará un bit adicional no deseado).

Mis únicas otras opciones son explorar otros modos de serie y si eso no funciona, es posible que tenga que golpear o rehacer todo el hardware (que es una opción que no tomaré).

¿Alguien tiene alguna solución sólida para esto?

    
pregunta

1 respuesta

0
  

la línea TXD va de baja a alta cuando señala que los datos están listos. y   me hace pensar que el TXD se mantendrá bajo si no se transmiten datos.

Según el Atmel 8051 Microcontrollers Hardware Manual TXD está inactivo. Esto es consistente con pasar de bajo a alto cuando el bit de datos está "listo" para ser registrado en el receptor.

    
respondido por el Bruce Abbott

Lea otras preguntas en las etiquetas