Tengo un problema, necesito conectar dos microcontroladores y programar uno de esos como transmisor y el otro como receptor, he intentado hacer esto pero no funciona, y no se porque.
La comunicación serial necesita estar en Modo 0. El microcontrolador transmisor tiene un dip-switch donde ingreso los datos (un número) y necesito estar visualizando en Led's conectados en el microcontrolador receptor.
Aquí está el código para ambos, espero que me puedan ayudar, gracias.
.................Transmisor.................
MOV SCON, #00H; MODE 0 AS A TRANSMITTER
HERE: MOV A, P1; MOVE THE DATA ON P1(DIP-SWITCH) TO ACCUMULATOR
CLR TI; CLEAR THE BIT TI
MOV SBUF, A; MOVE THE DATA TO SBUF
JNB TI,$ ; PAUSE UNTIL THE TI BIT IS SET
SJMP HERE
..................Receptor...................
MOV SCON, #10H; MODE O AS A RECEIVER
WAIT: JNB RI, WAIT; PAUSE UNTIL THE RI BIT IS SET
CLR RI
MOV A, SBUF; MOVE THE DATA SEND TO ACC
MOV P1, A; MOVE ACC TO P1 (LED'S)
SJMP WAIT
En un microcontrolador MCS-51 (MCU) como el AT89S52, el modo 0 de UART es un puerto serie sincronizado.
En Modo 0...
(a) Cuando escribe un byte en el registro del puerto serie para iniciar una transmisión, el AT89S52 (a) genera 8 relojes en su salida TXD y (b) desplaza 8 bits de datos en la salida RXD.
(b) Cuando lee un byte del registro del puerto serie (SFR) para iniciar una recepción, el AT89S52 (a) genera 8 relojes en su salida TXD y (b) cambia 8 bits de datos en la salida RXD.
(c) TXD es siempre una salida de reloj en serie. RXD es una línea de entrada/salida de datos en serie.
(d) La transmisión y la recepción solo ocurren cuando el software lee/escribe el SFR. Un puerto de recepción serial UART típico siempre está escuchando. Este UART es Modo 0 no lo es.
Por lo tanto, el Modo 0 es ideal para controlar chips lógicos de serie a paralelo como expansores de E/S.
Y el Modo 0 es inútil para la comunicación entre dos microcontroladores. Utilice el Modo 2 en su lugar.