1 chapter 10 8051 serial port programming in assembly and c

107
1 Chapter 10 8051 Serial Port Programming in Assembly and C

Upload: logan-sharp

Post on 26-Dec-2015

295 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

1

Chapter 10 8051 Serial Port Programming in

Assembly and C

Page 2: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

2

Objective

• 8051 提供序列傳輸 (serial communication) 的功能,允許 programmer 每次一個 bit 一個 bit 的傳送或接收外界的資料。

• 由於 IBM PC 經常與 8051 通訊,因此我們特別強調 8051 利用 RS232 與 PC 的 COM port 溝通。

• 所以要瞭解序列傳輸的基本特性, RS232 的規格,轉換電壓準位的 MAX232 IC 。

• 我們也要瞭解 8051 內部相關 registers 的功能,學習撰寫 8051 序列傳輸的程式。

Page 3: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

3

Sections

10.1 Basics of serial communication

10.2 8051 connection to RS232

10.3 8051 serial port programming in Assembly

10.4 Programming the second serial port

10.5 Serial port programming in C

Page 4: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

4

Section 10.1Basics of Serial Communication

Page 5: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

5

Figure 4-1. 8051 Pin DiagramPDIP/Cerdip

123

4567891011121314151617181920

403938

3736353433323130292827262524232221

P1.0P1.1P1.2

P1.3P1.4P1.5P1.6P1.7RST

(RXD)P3.0(TXD)P3.1

(T0)P3.4(T1)P3.5

XTAL2XTAL1

GND

(INT0)P3.2

(INT1)P3.3

(RD)P3.7(WR)P3.6

VccP0.0(AD0)P0.1(AD1)

P0.2(AD2)P0.3(AD3)P0.4(AD4)P0.5(AD5)P0.6(AD6)P0.7(AD7)

EA/VPPALE/PROG

PSENP2.7(A15)P2.6(A14)P2.5(A13)P2.4(A12)P2.3(A11)P2.2(A10)P2.1(A9)P2.0(A8)

8051(8031)

Page 6: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

6

Inside Architecture of 8051

CPU

On-chip RAM

On-chip ROM for program code

4 I/O Ports

Timer 0

Serial Port

Figure 1-2. Inside the 8051 Microcontroller Block Diagram

OSC

Interrupt Control

External interrupts

Timer 1

Timer/Counter

Bus Control

TxD RxDP0 P1 P2 P3

Address/Data

Counter Inputs

Page 7: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

7

8051 and PC

• The 8051 module connects to PC by using RS232.• RS232 is a protocol which supports full-duplex,

synchronous/asynchronous, serial communication.• We discuss these terms in following sections.

PC 8051

COM 1 port

RS232

MAX232 UART

Page 8: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

8

Simplex vs. Duplex Transmission

• Simplex transmission: the data can sent in one direction.– Example: the computer only sends data to the printer.

• Duplex transmission: the data can be transmitted and received.

Transmitter Receiver

Transmitter

ReceiverReceiver

Transmitter

Device 1 Device 2

Device 2Device 1

Page 9: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

9

Half vs. Full Duplex

• Half duplex: if the data is transmitted one way at a time.

• Full duplex: if the data can go both ways at the same time.– Two wire conductors for the data lines.

Transmitter

Receiver

Receiver

Transmitter

Transmitter

Receiver

Receiver

Transmitter

Page 10: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

10

Figure 10-2. Simplex, Half-, and Full-Duplex Transfers

Half Duplex

Full Duplex

Transmitter

Receiver

Transmitter

Receiver

Receiver

Transmitter

Receiver

Transmitter

Transmitter ReceiverSimplex

Page 11: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

11

Parallel vs. Serial

• Computers transfer data in two ways:– Parallel

• Data is sent a byte or more at a time (fast)

• Only very short distance between two systems

• The 8-bit data path is expensive

• Example: printer, hard disks

– Serial• The data is sent one bit at a time (slow) with simple wire

• Relative long distance (rarely distortion)

• cheap

• For long-distance data transfers using communication lines such as a telephone, it requires a modem to modulate (0/1 to analog) and demoulate (analog to 0/1).

Page 12: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

12

Figure 10-1. Serial versus Parallel Data Transfer (1/2)

Sender Receiver Sender Receiver

Serial Transfer Parallel Transfer

D0

D7

Page 13: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

13

Figure 10-1. Serial versus Parallel Data Transfer (2/2)

Sender Receiver Sender Receiver

Serial Transfer Parallel Transfer

D0-D7D0

Other control lines

Other control lines

Page 14: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

14

Serial Communication

• How to transfer data?– Sender:

• The byte of data must be converted to serial bits using a parallel-in-serial-out shift register.

• The bit is transmitted over a single data line.

– Receiver• The receiver must be a serial-in-parallel-out shift register to

receive the serial data and pack them into a byte.

11101000001011

‘A’

register8-bit character

register8 1

parallel-in serial-out

serial-in parallel-out

Page 15: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

15

Asynchronous vs. Synchronous

• Serial communication uses two methods:– In synchronous communication, data is sent in blocks

of bytes.

– In asynchronous communication, data is sent without continuity.

bytebyte 10101111

preamble

10101010

senderreceiver

byte

senderreceiver start bit stop bit

bytebyte

time

byte byte

Page 16: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

16

UART & USART

• It is possible to write software to use both methods, but the programs can be tedious and long.

• Special IC chips are made for serial communication:– USART (universal synchronous-asynchronous

receiver-transmitter)

– UART (universal asynchronous receiver-transmitter)

• The 8051 chip has a built-in UART.

Page 17: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

17

8051 Serial Communication

• The 8051 has serial communication capability built into it.– Full-duplex

– Asynchronous mode only.

• How to detect that a character is sent via the line in the asynchronous mode?– Answer: Data framing!

Page 18: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

18

Framing (1/3)

• Each character is placed in between start and stop bits. This is called framing.– Figure 10-3. Framing ASCII “A” (41H)

stopbit

startbit mark0 0 0 0 0 01 1

D7 D0goes out last goes out first

Time (D0 first)

mark

Page 19: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

19

Framing (2/3)

• The start bit is 0 (low) and always one bit.• The LSB is sent out first.• The stop bits is 1 (high).• The stop bit can be one (if 8 bits used in ASCII) or

two bits (if 7 bits used in ASCII).– It is programmed for data that is 7 or 8 bits.

• When there is no transfer, the signal is 1 (high), which is referred to as mark.

Page 20: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

20

Framing (3/3)

• We have a total of 10 bits for each character:– 8-bits for the ASCII code

– 2-bits for the start and stop bits

– 20% overhead

• In some systems in order to maintain data integrity, the parity bit is included in the data frame.– In an odd-parity bit system the total number of bits,

including the parity bit, is odd.

– UART chips allow programming of the parity bit for odd-, even-, and no-parity options.

Page 21: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

21

Data Transfer Rate (1/2)

• How fast is the data transferred?• Three methods to describe the speed:

– Baud rate is defined as the number of signal changes per second.• The rate of data transfer is stated in Hz (used in modem).

– Data rate is defined as the number of bits transferred per second.• Each signal has several voltage levels.• The rate of data transfer is stated in bps (bits per second).

– Effective data rate is defined as the number of actual data bits transferred per second.

• Redundant bits must be removed

Page 22: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

22

Data Transfer Rate (2/2)

• The data transfer rate depends on communication ports incorporated into that system.– Ex: 100-9600 bps in the early IBM PC/XT

– Ex: 56K bps in Pentium-based PC

– The baud rate is generally limited to 100kHz.

Page 23: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

23

Example of Data Transfer Rate (1/2)

• Assume that data is sent in the following asynchronous mode:– 2400 baud rate

– each signal has 4 voltage levels (-5V, -3V, 3V, 5V)

– one start bit, 8-bit data, 2 stop bits

markstopbit

startbit mark00 10 01 10 00 1111 11

Time (D0 first)

8-bit character

stopbit

Page 24: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

24

Example of Data Transfer Rate (2/2)

• 2400 baud = 2400 signals per second =2400 Hz• 4 voltage level

– Log24=2, 2 bits is sent in every signal change

– Data rate = 2 * 2400 Hz = 4800 bps

• Effective ratio = 8 / (1+8+2) =8/11• Effective data rate = data rate * effective ratio =

4800 * 8 /11=3490.9 bps

Page 25: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

25

RS232 Standard

• RS232 (Recommended Standard 232) is an interfacing standard which is set by the Electronics Industries Association (EIA) in 1960.– RS232 is the most widely used serial I/O interfacing standard.

– RS232A (1963), RS232B (1965) and RS232C (1969), now is RS232E

– RS-232 is a standard for connecting between a DTE (Data Terminal Equipment) and a DCE (Data Circuit-terminating Equipment).

• Define the voltage level, pin functionality, baud rate, signal meaning, communication distance.

Page 26: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

26

DTE and DCE

• DTE (Data Terminal Equipment)– DTE refers to PC, 8051, or other equipments.

• DCE (Data Communication Equipment)– DCE refers to communication equipment, such as

modems, that are responsible for transferring the data.

TxD

RxD

DTE

RxD

TxD

DCE

GNDPC Com1 modem

GND

TxD

RxD

DTE

RxD

TxD

DCE

GNDPC Com1modemGND

Telephone Line

DTE viewDCE view

Page 27: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

27

IBM PC/compatible COM ports

• IBM PC has 2 COM ports. – Both COM ports have RS232-type connectors.

– For mouse, modem

• We can connect the 8051 serial port to the COM port of a PC for serial communication experiments.

PC 8051

COM 1 port

RS232

MAX232 UART

DTE view DTE view

Page 28: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

28

Null Modem Connection

• The simplest connection between a PC and microcontroller requires a minimum of three pins, TxD, RxD, and GND.– Figure 10-6 shows null modem connection

TxD

RxD

DTE

TxD

RxD

DTE

ground8051-based board

8051-based board

TxD

RxD

DTE

TxD

RxD

DTE

groundPC Com1

PC Com1

Page 29: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

29

RS232 Voltage Level

• The input and output voltage of RS232 is not of the TTL (Transistor-Transistor-Logic) compatible.– RS232 is older than TTL.

• We must use voltage converter (also referred to as line driver) such as MAX232 to convert the TTL logic levels to the RS232 voltage level, and vice versa.– MAX232, TSC232, ICL232

logic 0

-3V

-25V

3V

25V

logic 1

undefined

RS 232 Voltage

Page 30: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

30

MAX232

• MAX232 IC chips are commonly referred to as line drivers.

PC 8051

COM 1 port

RS232

MAX232 UART

RS232 voltage level

TTL voltage level

Page 31: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

31

RS232 pins

• Figure 10-4 shows the RS232 connector DB-25.• Table 10-1 shows the pins and their labels for the

RS232 cable.– DB-25P : plug connector (male)– DB-25S: socket connector (female)

• Figure 10-5 shows DB9 connector and Table 10-2 shows the signals.– IBM version for PC.

• All the RS 232 pin function definitions of Tables 10-1 and 10-2 are from the DTE point of view.

Page 32: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

32

Figure 10-4. RS232 Connector DB-25

14

1

25

13

Page 33: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

33

Table 10-1: RS232 Pins (DB-25) for DTE (1/2)

Pin Description

1 Protective ground

2 Transmitted data (TxD)

3 Received data (RxD)

4 Request to send (RTS)

5 Clear to send (CTS)

6 Data set ready (DSR)

7 Signal ground (GND)

8 Data carrier detect (DCD)

9/10 Reserved for data testing

11 Unassigned

12 Secondary data carrier detect

13 Secondary clear to send

Page 34: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

34

Table 10-1: RS232 Pins (DB-25) for DTE (2/2)Pin Description

14 Secondary transmitted data

15 Transmit signal element timing

16 Secondary received data

17 Receive signal element timing

18 Unassigned

19 Secondary request to sent

20 Data terminal ready (DTR)

21 Signal quality detector

22 Ring indicator (RI)

23 Data signal rate select

24 Transmit signal element timing

25 Unassigned

Page 35: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

35

Figure 10-5. DB-9 9-Pin Connector

6

1

9

5

Page 36: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

36

Table 10-2: IBM PC DB-9 Signals for DTE

Pin Description

1 Data carrier detect (DCD)

2 Received data (RxD)

3 Transmitted data (TxD)

4 Data terminal ready (DTR)

5 Signal ground (GND)

6 Data set ready (DSR)

7 Request to send (RTS)

8 Clear to send (CTS)

9 Ring indicator (RI)

Page 37: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

37

DB9 - DB25 conversion

DB9 DB25 Function

1 8 Data carrier detect

2 3 Receive data

3 2 Transmit data

4 20 Data terminal ready

5 7 Signal ground

6 6 Data set ready

7 4 Request to send

8 5 Clear to send

9 22 Ring indicator

Page 38: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

38

RS232 Handshaking Signals

• Many of the pins of the RS232 connector are used for handshaking signals.– DTR (data terminal ready)

– DSR (data set ready)

– RTS (request to send)

– CTS (clear to send)

– DCD (carrier detect, or data carrier detect)

– RI (ring indicator)

Page 39: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

39

Communication Flow

• While signals DTR and DSR are used by the PC and modem, respectively, to indicate that they are alive and well.

• RTS and CTS control the flow of data.• When the PC wants to send data, it asserts RTS.• If the modem is ready (has room) to accept the data,

it sends back CTS.• If, for lack of room, the modem does not activate

CTS, and PC will de-assert DTR and try again.

Page 40: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

40

RS422 & RS485

• By using RS232, the limit distance between two PCs is about 15m.

• It works well even the distance=30m.• If you want to transfer data with long distance (ex:

300m), you can use RS422 or RS485.

Page 41: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

41

Section 10.28051 Connection to RS232

Page 42: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

42

TxD and RxD pins in the 8051

• Many of the pins of the RS232 connector are used for handshaking signals. However, they are not supported by the 8051 UART chips.

• In 8051, the data is received from or transmitted to– RxD: received data (Pin 10, P3.0)– TxD: transmitted data (Pin 11, P3.1)

• TxD and RxD of the 8051 are TTL compatible.• The 8051 requires a line driver to make them RS232

compatible.– One such line driver is the MAX232 chip.

Page 43: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

43

MAX232 (1/2)

• MAX232 chip converts from RS232 voltage levels to TTL voltage levels, and vice versa.– MAX232 uses a +5V power source which is the same as

the source voltage for the 8051.

8051

MAX232

P3.1TxD

DB-9

P3.0RxD

11 11

10 12

14

13

2

3

5

Page 44: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

44

MAX232 (2/2)

• MAX232 has two sets of line drivers.– Figure 10.7 shows the inside of MAX232.

– MAX232 requires four capacitors ranging from 1 to 22 F. The most widely used value for these capacitors is 22F.

• MAX233 performs the same job as the MAX232 but eliminates the need for capacitors.– Note that MAX233 and MAX232 are not pin compatible.

– Figure 10.8 (a) shows the inside of MAX233

– Figure 10.8 (b) shows the connection to the 8051

Page 45: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

45

Figure 10-7 (a): Inside MAX232

MAX232

161

34

5

2

6

14

13

7

8

11

12

10

9

15

Vcc

C1

C2

+

+

+

+

C3

C4

TTL side RS232 side

T1IN

R1OUT

T2IN

R2OUT

T1OUT

R1IN

T2OUT

R2IN

22 F

Page 46: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

46

Figure 10-7: (b) MAX232’s Connection to the 8051 (Null Modem)

8051

MAX232

P3.1TxD

DB-9

P3.0RxD

11 11

10 12

14

13

2

3

5

RS232-compatibleTTL-compatible

Page 47: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

47

Figure 10-8: (a) Inside MAX233

MAX233

7

15

10

11

16

5

4

18

19

2

3

1

20

6

Vcc

1217

14

9TTL side RS232 side

T1IN

R1OUT

T2IN

R2OUT

T1OUT

R1IN

T2OUT

R2IN

13

Page 48: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

48

Figure 10-8: (b) MAX233’s Connection to the 8051 (Null Modem)

8051

MAX233

P3.1TxD

DB-9

P3.0RxD

11 2

10 3

5

4

2

3

5

RS232-compatibleTTL-compatible

Page 49: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

49

Section 10.38051 Serial Port Programming in Assembly

Page 50: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

50

PC Baud Rates

• PC supports several baud rates.– You can use Netterm,

terminal.exe, stty, ptty to send/receive data.

• Hyperterminal supports baud rates much higher than the ones list in the Table.

110 bps

150

300

600

1200

2400

4800

9600 (default)

19200

Note: Baud rates supported by

486/Pentium IBM PC BIOS.

Page 51: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

51

Baud Rates in the 8051 (1/2)

• The 8051 transfers and receives data serially at many different baud rates by using UART.

• UART divides the machine cycle frequency by 32 and sends it to Timer 1 to set the baud rate.

• Signal change for each roll over of timer 1

XTAL oscillator

÷ 12÷ 32

By UART

Machine cycle frequency

28800 Hz

To timer 1 To set the Baud rate

921.6 kHz

11.0592 MHz

Timer 1

Page 52: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

52

Baud Rates in the 8051 (2/2)

• Timer 1, mode 2 (8-bit, auto-reload)• Define TH1 to set the baud rate.

– XTAL = 11.0592 MHz

– The system frequency = 11.0592 MHz / 12 = 921.6 kHz

– Timer 1 has 921.6 kHz/ 32 = 28,800 Hz as source.

– TH1=FDH means that UART sends a bit every 3 timer source.

– Baud rate = 28,800/3= 9,600 Hz

Page 53: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

53

Example 10-1

With XTAL = 11.0592 MHz, find the TH1 value needed to have the

following baud rates. (a) 9600 (b) 2400 (c) 1200

Solution:

With XTAL = 11.0592 MHz, we have:

The frequency of system clock = 11.0592 MHz / 12 = 921.6 kHz

The frequency sent to timer 1 = 921.6 kHz/ 32 = 28,800 Hz

(a) 28,800 / 3 = 9600 where -3 = FD (hex) is loaded into TH1

(b) 28,800 / 12 = 2400 where -12 = F4 (hex) is loaded into TH1

(c) 28,800 / 24 = 1200 where -24 = E8 (hex) is loaded into TH1

Notice that dividing 1/12th of the crystal frequency by 32 is the

default value upon activation of the 8051 RESET pin.

Page 54: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

54

Table 10–4 Timer 1 TH1 Register Values for Various Baud Rates

Page 55: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

55

Registers Used in Serial Transfer Circuit

• SBUF (Serial data buffer)• SCON (Serial control register)• PCON (Power control register)• You can see Appendix H (pages 609-611) for

details.• PC also has several registers to control COM1,

COM2.

Page 56: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

56

SBUF Register

• Serial data register: SBUF– An 8-bit register to store the serial data

– For a byte of data to be transferred via the TxD line, it must be placed in the SBUF.

MOV SBUF,A ;send data from A

– SBUF holds the byte of data when it is received by the 8051’s RxD line.

MOV A,SBUF ;receive and copy to A

– Not bit-addressable

Page 57: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

57

SCON Register

• Serial control register: SCONSM0, SM1 Serial port mode specifier

REN (Receive enable) set/cleared by software to

enable/disable reception.

TI Transmit interrupt flag.

RI Receive interrupt flag.

SM2 = TB8 = RB8 =0 (not widely used)

SM0 SM1 SM2 REN TB8 RB8 TI RI(LSB)

(MSB)

* SCON is bit-addressable.

Page 58: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

58

SM0, SM1

• SM0 and SM1 determine the framing of data.– SCON.6 (SM1) a1d SCON.7 (SM0)

– Only mode 1 is compatible with COM port of IBM PC.

– See Appendix A.3. and Appendix H

SM0 SM1 Mode Operating Mode Baud Rate

0 0 0 Shift register Fosc./12

0 1 1 8-bit UART Variable by timer1

1 0 2 9-bit UART Fosc./64 or Fosc./32

1 1 3 9-bit UART Variable

Page 59: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

59

REN (Receive Enable)

• SCON.4• Set/cleared by software to enable/disable reception.

– REN=1• It enable the 8051 to receive data on the RxD pin of the 8051.• If we want the 8051 to both transfer and receive data, REN must be

set to 1.• SETB SCON.4

– REN=0• The receiver is disabled. • The 8051 can not receive data.• CLR SCON.4

Page 60: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

60

TI (Transmit Interrupt Flag)

• SCON.1• When the 8051 finishes the transfer of the 8-bit

character, it raises the TI flag.• TI is raised by hardware at the beginning of the

stop bit in mode 1. • Must be cleared by software.

Page 61: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

61

RI (Receive Interrupt)

• SCON.0• Receive interrupt flag • When the 8051 receives data serially via RxD, it

gets rid of the start and stop bits and place the byte in the SBUF register.

• Set by hardware halfway through the stop bit time in mode 1.

• Must be cleared by software.

Page 62: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

62

SM2

• SCON.5• SM2 enables the multiprocessor communication

for mode 2 & 3.– SM2=0 : to receive data two processors talks

– SM2=1 : to receive address multiprocessor talks

1 2 3 4 5TxD RxD

data0 data0 address=51

8 bitsTB8(the 9th bit)

time

Page 63: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

63

TB8 (Transfer Bit 8)

• SCON.3• For multiprocessor communication• The 9th bit will be transmitted in mode 2 & 3.

– TB8 = 1: address

– TB8 = 0: data

• Set/Cleared by software.

Page 64: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

64

RB8 (Receive Bit 8)

• SCON.2• For multiprocessor communication• In serial mode 1, RB8 gets a copy of the stop bit

when an 8-bit data is received.• In serial mode 2 & 3, RB8 gets a copy of the 9th

bit. In fact, it is the TB8 in transmitter.

Page 65: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

65

Figure 10-9. SCON Serial Port Control Register (Bit Addressable)

SM0 SCON.7 Serial port mode specifier

SM1 SCON.6 Serial port mode specifier

SM2 SCON.5 Used for multiprocessor communication. (Make it 0)

REN SCON.4 Set/cleared by software to enable/disable reception.

TB8 SCON.3 Not widely used.

RB8 SCON.2 Not widely used.

TI SCON.1 Transmit interrupt flag. Set by hardware at the beginning of the stop bit in mode 1. Must be cleared by software.

RI SCON.0 Receive interrupt flag. Set by hardware halfway through the stop bit time in mode 1. Must be cleared by software.

Note: Make SM2, TB8, and RB8 = 0.

SM0 SM1 SM2 REN TB8 RB8 TI RI

Page 66: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

66

Transfer Data with the TI flag (1/2)

• The following sequence is the steps that the 8051 goes through in transmitting a character via TxD:

1. The byte character to be transmitted is written into the SBUF register.

2. It transfers the start bit.

3. The 8-bit character is transferred one bit at a time.

4. The stop bit is transferred.

SBUF TxDbit by bit8-bit char

UARTTI

Ashiftzero detect add start and

stop bits

8-bit

Page 67: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

67

Transfer Data with the TI flag (2/2)

• Sequence continuous:5. During the transfer of the stop bit, the 8051 raises the TI flag,

indicating that the last character was transmitted and it is ready to transfer the next character.

6. By monitoring the TI flag, we know whether or not the 8051 is ready to transfer another byte.– We will not overloading the SBUF register.

– If we write another byte into the SBUF before TI is raised, the untransmitted portion of the previous byte will be lost.

– We can use interrupt to transfer data in Chapter 11.

7. After SBUF is loaded with a new byte, the TI flag bit must be cleared by the programmer.

Page 68: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

68

Programming the 8051 to Transfer data Serially (1/2)

1. Use the timer 1 in mode 2 – MOV TMOD,#20H

2. Set the value TH1 to chose baud rate. Look at the Table 10-4.– MOV TH1,#0FDH ;Baud rate = 9600Hz

3. Set SCON register in mode 1.– MOV SCON,#50H

4. Start the timer.– SETB TR1

Page 69: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

69

Programming the 8051 to Transfer data Serially (2/2)

5. Clear TI flag.– CLR TI

6. The character byte to be transferred serially is written into the SBUF register.– MOV SBUF,#’A’

7. Keep monitoring the Transmit Interrupt (TI) to see if it is raised.– HERE: JNB TI, HERE

8. To transfer the next character, go to Step 5.

TI=0 transfer data

raise when sending the stop bit

Page 70: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

70

Example 10-2

Write a program for the 8051 to transfer letter “A” serially at 4800

baud, continuously.

Solution:

MOV TMOD,#20H ;timer 1, mode 2

MOV TH1,#-6 ;4800 baud rate

MOV SCON,#50H ;8-bit,1 stop, REN enabled

SETB TR1 ;start timer 1

AGAIN: MOV SBUF,#”A” ;letter “A” to be transferred

HERE: JNB TI,HERE ;wait for the last bit

CLR TI ;clear TI for next char

SJMP AGAIN ;keep sending A

Page 71: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

71

Example 10-3 (1/2)Write a program to transfer the message “YES” serially at 9600

baud, 8-bit data, 1 stop bit. Do this continuously.

Solution:

MOV TMOD,#20H ;timer 1, mode 2

MOV TH1,#-3 ;9600 baud

MOV SCON,#50H

SETB TR1

AGAIN:MOV A,#”Y” ;transfer “Y”

ACALL TRANS

MOV A,#”E” ;transfer “E”

ACALL TRANS

MOV A,#”S” ;transfer “S”

ACALL TRANS

SJMP AGAIN ;keep doing it

Page 72: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

72

Example 10-3 (2/2)

;serial data transfer subroutine

TRANS:MOV SBUF,A ;load SBUF

HERE: JNB TI,HERE ;wait for last bit to transfer

CLR TI ;get ready for next byte

RET

Page 73: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

73

Receive Data with the RI flag (1/2)

• The following sequence is the steps that the 8051 goes through in receiving a character via RxD:

1. 8051 receives the start bit indicating that the next bit is the first bit of the character to be received.

2. The 8-bit character is received one bit at a time. When the last bit is received, a byte is formed and placed in SBUF.

shift regiterRxDbit by bit 8-bit

UART RI

SBUFloadshift

A

REN=1

remove/check the start and stop bits

8-bit

Page 74: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

74

Receive Data with the TI flag (2/2)

• Sequence continuous:3. The stop bit is received. During receiving the stop bit, the

8051 make RI=1, indicating that an entire character was been received and must be picked up before it gets overwritten by an incoming character.

4. By monitoring the RI flag, we know whether or not the 8051 has received a character byte.– If we fail to copy SBUF into a safe place, we risk the loss of the

received byte.

– We can use interrupt to transfer data in Chapter 11.

5. After SBUF is copied into a safe place, the RI flag bit must be cleared by the programmer.

Page 75: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

75

Programming the 8051 to Receive data Serially (1/2)

1. Use the timer 1 in mode 2 – MOV TMOD,#20H

2. Set the value TH1 to chose baud rate. Look at the Table 10-4.– MOV TH1,#0FDH ;Baud rate = 9600Hz

3. Set SCON register in mode 1.– MOV SCON,#50H

4. Start the timer.– SETB TR1

Page 76: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

76

Programming the 8051 to Receive data Serially (2/2)

5. Clear RI flag.– CLR RI

6. Keep monitoring the Receive Interrupt (RI) to see if it is raised.– HERE: JNB RI, HERE

7. When RI is raised, SBUF has the whole byte. Move the content of SBUF to a safe place.– MOV A,SBUF

8. To receive the next character, go to Step 5.

RI=0 receive data

raise when getting the stop bit

Page 77: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

77

Example 10-4

Program the 8051 to receive bytes of data serially, and put them in

P1. Set the baud rate at 4800, 8-bit data, and 1 stop bit.

Solution:

MOV TMOD,#20H ;timer1, mode 2 (auto reload)

MOV TH1,#-6 ;4800 baud

MOV SCON,#50H ;8-bit, 1 stop, REN enabled

SETB TR1 ;start timer 1

HERE: JNB RI,HERE ;wait for char to come in

MOV A,SBUF ;save incoming byte in A

MOV P1,A ;send to port 1

CLR RI ;get ready to receive next byte

SJMP HERE ;keep getting data

Page 78: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

78

Example 10-5 (1/4)

Assume that the 8051 serial port is connected to the COM port of the IBM PC, and on the PC we are using the terminal.exe program to send and receive data serially.

P1 and P2 of the 8051 are connected to LEDs and switches, respectively.

Write an 8051 program to (a) send to the PC the message ”We Are Ready”, (b) receive any data sent by the PC and put it on LEDs

connected to P1, and (c) get data on switches connected to P2 and send it to

the PC serially. The program should perform part (a) once, but parts (b) and

(c) continuously. Use the 4800 baud rate.

Page 79: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

79

Example 10-5 (2/4)

Solution:

ORG 0

MOV P2,#0FFH ;make P2 an input port

MOV TMOD,#20H

MOV TH1,#0FAH ;4800 baud rate

MOV SCON,#50H

SETB TR1 ;start timer 1

MOV DPTR,#MYDATA ;load pointer for message

TxD

RxD

P1

P2

LED

SW

To PC

COM port

8051

Page 80: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

80

Example 10-5 (3/4)

MOV DPTR,#MYDATA ;load pointer for message

H_1: CLR A

MOVC A,@A+DPTR ;get the character

JZ B_1 ;if last character get out

ACALL SEND

INC DPTR

SJMP H_1 ;next character

B_1: MOV A,P2 ;read data on P2

ACALL SEND ;transfer it serially

ACALL RECV ;get the serial data

MOV P1,A ;display it on LEDs

SJMP B_1 ;stay in loop indefinitely

(a)

(c)

(b)

Page 81: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

81

Example 10-5 (4/4)

;-----------serial data transfer. ACC has the data

SEND: MOV SBUF,A ;load the data

H_2: JNB TI,H_2 ;stay here until last bit gone

CLR TI ;get ready for next char

RET

;-------------- Receive data serially in ACC

RECV: JNB RI,RECV ;wait here for char

MOV A,SBUF ;save it in ACC

CLR RI ;get ready for next char

RET

;---------------The message to send

MYDATA:DB “We Are Ready”,0

END

Page 82: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

82

Doubling the Baud Rate in the 8051

• There are two ways to increase the baud rate of data transfer in the 8051:

1. To use a higher frequency crystal.• It is not feasible in many situations since the system crystal is

fixed.

• Many new crystal may not be compatible with the IBM PC serial COM ports baud rate.

2. To change a bit in the PCON register.– This is a software way by setting SMOD=1.

Page 83: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

83

PCON Register

SMOD Double baud rate. If Timer 1 is used to generate baud and SMOD=1, the baud rate is doubled when the Serial Port is used in modes 1,2,3.

GF1,GF0 General purpose flag bit.

PD Power down bit. Setting this bit activates “Power Down” operation in the 80C51BH. (precedence)

IDL Idle Mode bit. Setting this bit activates “Idle Mode” operation in the 80C51BH.

SMOD -- -- -- GF1 GF2 PD IDL(LSB)

(MSB)

* PCON is not bit-addressable. See Appendix H. p410

Page 84: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

84

SMOD Flag of the PCON Register

• Power control register: PCONMOV A, PCON

SETB ACC.7

MOV PCON,A ;we don’t want to modify other bits

– An 8-bit register

– Not bit-addressable

– SCOM=0: default

– SCOM=1: double the baud rate

– See Table 10-5

Page 85: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

85

Table 10-5: Baud Rate Comparison for SMOD = 0 and SMOD =1

TH1 (Decimal) (Hex) SMOD = 0 SMOD = 1

-3 FD 9,600 19,200

-6 FA 4,800 9,600

-12 F4 2,400 4,800

-24 E8 1,200 2,400

Note: XTAL = 11.0592 MHz.

XTALoscillator

÷ 12÷ 16

÷ 32

Machine cycle freq.

921.6 kHz

57600 Hz

28800 Hz

To timer 1 to set baud rate

11.0592 MHz SMOD = 1

SMOD = 0

Page 86: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

86

Baud Rates for SMOD=0

• When SMOD=0, the 8051 divides 1/12 of the crystal frequency by 32, and uses that frequency for timer 1 to set the baud rate.– XTAL = 11.0592 MHz

– The system frequency = 11.0592 MHz / 12 = 921.6 kHz

– Timer 1 has 921.6 kHz/32 = 28,800 Hz as source.

– TH1=256 - Crystal frequency/(12*32*Baud rate)

• Default on reset– See Appendix A, page 363

Page 87: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

87

Baud Rates for SMOD=1

• When SMOD=1, the 8051 divides 1/12 of the crystal frequency by 16, and uses that frequency for timer 1 to set the baud rate.– XTAL = 11.0592 MHz

– The system frequency = 11.0592 MHz / 12 = 921.6 kHz

– Timer 1 has 921.6 kHz/16 = 57,600 Hz as source.

– TH1=256 - Crystal frequency/(12*16*Baud rate)

Page 88: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

88

Example 10-6 (1/2)

Assuming that XTAL = 11.0592 MHz for the following program,

state (a) what this program does, (b) compute the frequency used by

timer 1 to set the baud rate, and (c) find the baud rate of the data

transfer.

Solution:

(a) This program transfers ASCII letter B (01000010 binary)

continuously.

(b) and (c) With XTAL = 11.0592 MHz and SMOD = 1

11.0592 / 12 = 921.6 kHz machine cycle frequency.

921.6 /16 = 57,600 Hz frequency used by timer 1 to set the baud rate.

57,600 / 3 = 19,200, the baud rate.

Page 89: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

89

Example 10-6 (2/2)

MOV A,PCON

SETB ACC.7

MOV PCON,A ;SMOD=1, double baud rate

MOV TMOD,#20H ;Timer 1, mode 2, auto reload

MOV TH1,#-3 ;19200 baud rate

MOV SCON,#50H ;8-bit data,1 stop bit, RI enabled

SETB TR1 ;start Timer 1

MOV A,#”B” ;transfer letter B

A_1:CLR TI ;make sure TI=0

MOV SBUF,A ;transfer it

H_1:JNB TI H_1 ;check TI

SJMP A_1 ;do again

Page 90: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

90

Example 10-7 x

Find the TH1 value (in both decimal and hex) to set the baud rate to each of the following: (a) 9600 Hz (b) 4800 Hz if SMOD =1

Assume that XTAL = 11.0592 MHz.

Solution:

With XTAL = 11.0592 and SMOD = 1,

11.0592 / 12 = 921.6 kHz machine cycle frequency.

921.6 / 16 = 57,600 Hz frequency used by the timer 1

(a) 57,600 / 9600 = 6 TH1 = -6 or TH1 = FAH.

(b) 57,600 / 4800 = 12 TH1 = -12 or TH1 = F4H.

Page 91: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

91

Example 10-8 x

Find the baud rate if TH1 = -2, SMOD = 1, and XTAL = 11.0592

MHz. Is this baud rate supported by IBM/compatible PCs?

Solution:

With XTAL = 11.0592 and SMOD = 1, we have timer 1 frequency

= 57,600 Hz. The baud rate is 57,600 / 2 = 28,800.

This baud rate is not supported by the BIOS of the PC; however, the PC can be programmed to do data transfer at such a speed. The software of many modems can do this.

Also, Hyperterminal in Windows 95 (and higher) supports this and other baud rates.

Page 92: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

92

Table 10–5 Baud Rate Comparison for SMOD = 0 and SMOD = 1

Page 93: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

93

Section 10.4Programming the Second Serial Port

Page 94: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

94

Second Serial Port

• Many of the new generations of the 8051 microcontrollers come with two serial ports.– DS89C4x0, DS89C320

– But not all versions of 8051/52 microcontroller.

• There two ports are called as Port 0 and Port 1.– Port 0 is as same as the original 8051.

– Port 1 uses new pins and new registers.

– See Table 10-6 and Figure 10-12 for registers

– See Figure 10-10 for 89C4x0

– See Figure 10-11 for connection with MAX232

Page 95: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

95

Table 10–6 SFR Byte Addresses for DS89C4x0 Serial Ports

as same as the original 8051 serial port

new SCON1,SBUF1

shared

Compare with p556 Table A-2

Page 96: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

96

Table 10–7 SFR Addresses for the

DS89C4x0 (420, 430, etc.)

Page 97: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

97

Figure 10–12 SCON0 and SCON1 Bit Addresses (TI and RI bits must be noted)

Page 98: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

98

Figure 10–10 DS89C4x0 Pin Diagram.

Note: Notice P1.2 and P1.3 pins are used by Rx and Tx lines of the 2nd serial port

port 1

port 0

Page 99: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

99

Figure 10–11 Connection with MAX232

(a) Inside MAX232 (b) MAX232’s Connection to the DS89C4x0

Page 100: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

100

Assembly Language for Second Port

• The older 8051 assemblers do not support the second serial port, we need to define them by their SFR address.– Example 10-11.

• Also, many C compiler do not support the second serial port, we have to declare the byte addresses of the new SFR register by using the SFR keyword.– Example 10-20

Page 101: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

101

Example 10-11 (1/2)

Write a program for the second serial port of the DS89C4x0 to continuously transfer the letter “A” serially at 4800 baud. User 8-bit data and 1 stop bit. User Timer 1.

Solution:

SBUF1 EQU 0C1H ;defined by yourself SCON1 EQU 0C0H TI1 BIT 0C1H RI1 BIT 0C0H

ORG 0H

MAIN: MOV TMOD,#20H

MOV TH1,#-6

MOV SCON1,#50H

SETB TR1

Page 102: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

102

Example 10-11 (2/2)

ANAIN:

MOV A,#’A’ ;send ‘A’ continuously

ACALL SENDCON2

SJMP AGAIN

SENDCOM2: ;send by using port 1

MOV SBUF1,A

JNB TI1,HERE

CLR TI1

RET

END

Page 103: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

103

Section 10.5Serial Port Programming in C

Page 104: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

104

Transmitting and Receiving Data in C

• Using C to program the serial port.– Example 10-15 does the same work as Example 10-11.

• Please read other examples by yourself.

Page 105: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

105

Example 10-15

Write an 8051 C program to transfer the letter “A” serially at 4800 baud continuously. Use 8-bit data and 1 stop bit.

Solution :

#include <reg51.h>void main(void) { TMOD=0x20; SCON=0x50; TH1=0xFA; //4800 baud rate TR1=1; while (1) { SBUF=‘A’; while (TI==0); TI=0; } }

Page 106: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

106

You are able to (1/2)

• Contract and compare serial versus parallel communication• List the advantages of serial communication over parallel• Explain serial communication protocol• Contrast synchronous versus asynchronous communication• Contrast half- versus full-duplex transmission• Explain the process of data framing• Describe data transfer rate and bps rate

Page 107: 1 Chapter 10 8051 Serial Port Programming in Assembly and C

107

You are able to (2/2)

• Define the RS232 standard• Explain the use of the MAX232 and MAX232 chips• Interface the 8051 with an RS232 connector• Discuss the baud rate of the 8051• Describe serial communication features of the 8051• Program the 8051 for serial data communication• Program the 8051 serial port in Assembly and C• Program the second serial port of DS89C4x0 in Assembly

and C