0
\$\begingroup\$

I have a problem, I need to connect two microcontrollers and programming one of those as a transmitter and the other as a receiver, I've tried to do this but it's not working, and I don't know why.

The serial communication need to be in Mode 0. The transmitter microcontroller has a dip-switch where I enter the data (a number) and I need to be displaying in Led's connected in the receiver microcontroller.

Here is the code for both, I hope you can help me, thanks.

.................Transmitter.................

       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

..................Receiver...................

        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
\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

On an MCS-51 microcontroller (MCU) like the AT89S52, UART mode 0 is a synchronous clocked serial port.

In Mode 0...

(a) When you write a byte to the serial port register to start a transmission, the AT89S52 (a) generates 8 clocks on its TXD output and (b) shifts out 8 data bits on the RXD output.

(b) When you read a byte from the serial port register (SFR) to start a receive, the AT89S52 (a) generates 8 clocks on its TXD output and (b) shifts in 8 data bits on the RXD output.

(c) TXD is always a serial clock output. RXD is a serial data in/out line.

(d) Transmission and reception only happen when software reads/writes the SFR. A typical UART serial receive port is always listening. This UART is Mode 0 is not.

So Mode 0 is ideal for controlling serial-to-parallel logic chips as I/O expanders.

And Mode 0 is useless for communication between two microcontrollers. Use Mode 2 instead.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.