Comunicación serie con microcontroladores AT89S52

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

Respuestas (1)

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.