Tải bản đầy đủ (.pdf) (14 trang)

Các vi điều khiển 8051 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.15 MB, 14 trang )

ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
1
Chapter 5
Serial Port Operation
The 8051 Microcontroller
Lê Chí Thông
Ref. I. Scott Mackenzie, The 8051 Microcontroller
Serial Port
• RXD (P3.0) and TXD (P3.1) pins
• Full Duplex: simultaneous transmission and reception
• 2 special function registers: SCON and SBUF
• SCON: status bits and control bits
• SBUF: same address but 2 buffers; 1 buffer for
transmission and 1 buffer for reception
• Baud rate (serial port frequency of operation) is
supplied and programmed by Timer1
Ref. I. Scott Mackenzie 2Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
2
Serial port block diagram
Writing to SBUF loads data to be transmitted
Reading SBUF accesses received data
P→
→→
→S buffer S→
→→
→P buffer
Ref. I. Scott Mackenzie 3Lê Chí Thông
SCON Register


Ref. I. Scott Mackenzie 4Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
3
SCON Register
Ref. I. Scott Mackenzie 5Lê Chí Thông
Mode 0: 8-Bit Shift Register
• RXD is used for both data input and output
• Serial data enter and exit (LSB first) through RXD
• TXD line serves as the clock
• TXD outputs the shift clock
• Baud rate = 1/12 f
OSC
Ref. I. Scott Mackenzie 6Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
4
Mode 0: 8-Bit Shift Register
• Transmission is initiated by instruction that writes
data to SBUF (eg. MOV SBUF,A)
Ref. I. Scott Mackenzie 7Lê Chí Thông
Mode 0: 8-Bit Shift Register
• Reception is initiated when REN is 1 and RI is 0
• Set REN at the beginning of a program
• Clear RI to begin a data input operation
Ref. I. Scott Mackenzie 8Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
5
Mode 0: 8-Bit Shift Register

• One application of shift register mode is to expand the
out capability of the 8051
• A serial-to-parallel shift register IC can be
connected to the 8051 TXD and RXD lines to
provide an extra output lines
Ref. I. Scott Mackenzie 9Lê Chí Thông
Mode 1: 8-Bit UART with Variable Baud Rate
• UART: Universal Asynchronous Receiver/Transmitter
• A data frame includes a start bit (low), data bits,
and a stop bit (high).
• A parity bit is sometimes inserted between the last
data bit and the stop bit.
• Mode 1: 10 bits are transmitted on TXD or received on
RXD, including a start bit (0), 8 data bits (LSB first),
and a stop bit (1).
• The stop bit goes into RB8 in SCON.
• Baud rate is set by the Timer 1 overflow rate.
Ref. I. Scott Mackenzie 10Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
6
Mode 1: 8-Bit UART with Variable Baud Rate
• Transmission is initiated by writing to SBUF.
• TI is set at the end of character transmission and
indicates “transmit buffer empty”.
WAIT:JNB TI,WAIT ;Check TI until set
CLR TI ;Clear TI
MOV SBUF,A ;Send character
synchronization event
stop

Ref. I. Scott Mackenzie 11Lê Chí Thông
Mode 1: 8-Bit UART with Variable Baud Rate
• Reception is initiated by a 1-to-0 transition on RXD.
1. The stop bit goes into RB8 in SCON.
2. SBUF is loaded with 8 data bits.
3. RI is set at the end of character reception and
indicates “receiver buffer full”.
• Conditions for reception:
1. RI=0, and
2. SM2=0, or SM2=1 and the received stop bit = 1
WAIT:JNB RI,WAIT ;Check RI until set
CLR RI ;Clear RI
MOV A,SBUF ;Read character
Ref. I. Scott Mackenzie 12Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
7
Serial Port Baud Rates
1MHz (12 MHz crystal)
To set SMOD:
MOV A,PCON
SETB ACC.7
MOV PCON,A
375K/187.5K (12 MHz crystal)
Ref. I. Scott Mackenzie 13Lê Chí Thông
Using Timer 1 as the Baud Rate Clock
• Usually use Timer 1 Mode 2 to provide baud rate clock
• Baud Rate = Timer 1 overflow rate / 32 (SMOD=0)
• Baud Rate = Timer 1 overflow rate / 16 (SMOD=1)
• Eg. Calculate Timer 1 overflow rate to provide 1200

baud operation (12 MHz crystal)
• f
OSC
= 12 MHz  f
CLK
= 1 MHz  T
CLK
= 1 μs
• Assume SMOD=0: Timer 1 overflow rate = 1200 x
32 = 38.4 KHz  T
overflow
= 1/38.4 kHz = 26.04 μs
• An overflow requires T
overflow
/T
CLK
≈ 26 clocks
 The reload value for Timer 1 is -26
Ref. I. Scott Mackenzie 14Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
8
Error in Baud Rate
• Due to rounding, there is a slight error. Generally, a 5%
error is tolerable.
• Exact baud rates are possible using an 11.0592 MHz
crystal.
• Eg. Calculate Timer 1 overflow rate to provide 1200
baud operation (11.0592 MHz crystal)
• f

OSC
= 11.0592 MHz  T
CLK
= 12/11.0592 μs
• Assume SMOD=0: Timer 1 overflow rate = 1200 x
32 = 38.4 KHz  T
overflow
= 1/0.0384 [μs]
• An overflow requires T
overflow
/T
CLK
= 24 clocks
 The initial value for Timer 1 is -24
Ref. I. Scott Mackenzie 15Lê Chí Thông
Baud Rate Summary
Ref. I. Scott Mackenzie 16Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
9
Initialize the Serial Port
ORG 0000H
MOV SCON,#01010010B ;Serial port mode 1
MOV TMOD,#00100000B ;Timer 1 mode 2
MOV TH1,#-26 ;reload count for 1200 baud
SETB TR1 ;start Timer 1

Ref. I. Scott Mackenzie 17Lê Chí Thông
Initialize the Serial Port (SMOD=1)
ORG 0000H

MOV SCON,#01010010B ;Serial port mode 1
MOV A,PCON
SETB ACC.7 ;SMOD=1
MOV PCON,A
MOV TMOD,#00100000B ;Timer 1 mode 2
MOV TH1,#-26 ;reload count for 2400 baud
SETB TR1 ;start Timer 1

Ref. I. Scott Mackenzie 18Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
10
Example 1: Transmission
ORG 0000H
MOV SCON,#01010010B ;Serial port mode 1
MOV TMOD,#00100000B ;Timer 1 mode 2
MOV TH1,#-24 ;reload count for 1200 baud
SETB TR1 ;start Timer 1
MOV R2,#10 ;number of loops
MOV R0,#30H ;starting address
LOOP: MOV A,@R0 ;get data
ACALL SEND ;send data
INC R0 ;increase pointer
DJNZ R2,LOOP ;loop 10 times
SJMP DONE
SEND: JNB TI,$ ;transmit buffer empty? No:check again
CLR TI ;yes: clear flag and
MOV A,SBUF ; send data
RET ;return
DONE: NOP

END
Assume a 10-byte string of data is stored in the internal RAM from the location 30H.
Write a program that sends this string to the 8051 serial port (1200 baud, crystal
11.0592 MHz)
19Lê Chí ThôngRef. I. Scott Mackenzie
Example 2: Reception
ORG 0000H
MOV SCON,#01010010B ;Serial port mode 1
MOV TMOD,#00100000B ;Timer 1 mode 2
MOV TH1,#-12 ;reload count for 2400 baud
SETB TR1 ;start Timer 1
MOV R2,#20 ;number of loops
MOV R0,#40H ;starting address
LOOP: ACALL RECEIVE ;receive data
MOV @R0,a ;store data
INC R0 ;increase pointer
DJNZ R2,LOOP ;loop 10 times
SJMP DONE
RECEIVE:
JNB RI,$ ;receive buffer full? No: check again
CLR RI ;yes: clear flag and
MOV SBUF,A ; send data
RET ;return
DONE: NOP
END
Write a program that receives a 20-byte string from the 8051 serial port (2400 baud,
crystal 11.0592 MHz) and then stores in the internal RAM from the location 40H.
Ref. I. Scott Mackenzie 20Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile

11
Mode 2: 9-Bit UART with Fixed Baud Rate
• Mode 2: 11 bits are transmitted on TXD or received on
RXD, including a start bit (0), 9 data bits (LSB first),
and a stop bit (1).
• On transmission, the 9
th
bit is whatever has been
put in TB8 in SCON.
• On reception, the 9
th
bit received is placed in RB8
in SCON.
• Baud rate is either f
OSC
/64 (SMOD=0)
or f
OSC
/32 (SMOD=1)
Ref. I. Scott Mackenzie 21Lê Chí Thông
Mode 3: 9-Bit UART with Variable Baud Rate
• 9-bit UART: same as mode 2
• Variable baud rate: same as mode 1
Ref. I. Scott Mackenzie 22Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
12
Adding a Parity Bit
• A common use for the 9
th

bit is to add parity to a
character.
• The P bit in PSW register is set or cleared to establish
even parity with 8 bits in A register.
• Eg. Put even parity bit in TB8, which becomes the 9
th
data bit to be transmitted:
MOV C,P ;put even parity bit in C flag
MOV TB8,C ;and move to the 9
th
data bit
MOV SBUF,A;move from A to SBUF to transmit
Ref. I. Scott Mackenzie 23Lê Chí Thông
Adding a Parity Bit
• Eg. Put odd parity bit in TB8, which becomes the 9
th
data bit to be transmitted:
MOV C,P ;put even parity bit in C flag
CPL C ;convert to odd parity
MOV TB8,C ;and move to the 9
th
data bit
MOV SBUF,A;move from A to SBUF to transmit
Ref. I. Scott Mackenzie 24Lê Chí Thông
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
13
Example 3
Assume a 10-byte string of 8-bit ASCII codes is stored in internal RAM from the
location 30H. Write a program that transmits this string out the 8051 serial port (4800

baud, crystal 11.0592 MHz) with odd parity added as the 9
th
bit
Ref. I. Scott Mackenzie 25Lê Chí Thông
ORG 0000H
MOV SCON,#11010010B ;Serial port mode 3 (9-bit)
MOV TMOD,#00100000B ;Timer 1 mode 2
MOV TH1,#-6 ;reload count for 4800 baud
SETB TR1 ;start Timer 1
MOV R2,#10 ;number of loops
MOV R0,#30H ;starting address
LOOP: MOV A,@R0 ;get data
MOV C,P ;put even parity bit in C flag
CPL C ;convert to odd parity
MOV TB8,C ;and move to the 9
th
data bit
ACALL SEND ;send data
INC R0 ;increase pointer
DJNZ R2,LOOP ;loop 10 times
SEND: JNB TI,$ ;check TI empty? No: check again
CLR TI ;yes: clear flag and
MOV A,SBUF ; send data
RET ;return
END
Example 4
Assume a 10-byte string of 7-bit ASCII codes is stored in internal RAM from the
location 30H. Write a program that transmits this string out the 8051 serial port (4800
baud, crystal 11.0592 MHz) with odd parity added as the 8
th

bit
Ref. I. Scott Mackenzie 26Lê Chí Thông
ORG 0000H
MOV SCON,#01010010B ;Serial port mode 1 (8-bit)
MOV TMOD,#00100000B ;Timer 1 mode 2
MOV TH1,#-6 ;reload count for 4800 baud
SETB TR1 ;start Timer 1
MOV R2,#10 ;number of loops
MOV R0,#30H ;starting address
LOOP: MOV A,@R0 ;get data
CLR ACC.7 ;clear the 8
th
bit of A
MOV C,P ;put even parity bit in C flag
CPL C ;convert to odd parity
MOV ACC.7,C ;and move to the 8
th
bit of A
ACALL SEND ;send data
INC R0 ;increase pointer
DJNZ R2,LOOP ;loop 10 times
SEND: JNB TI,$ ;check TI empty? No: check again
CLR TI ;yes: clear flag and
MOV A,SBUF ; send data
RET ;return
END
ĐH Bách Khoa TP.HCM Lê Chí Thông
www.tinyurl.com/thongchile
14
Multiprocessor Communications

• When SM2=1, reception is done only if RB8=1.
• The master first sends out an address byte that has 1 in the 9
th
bit. So all slave can receive the address byte and examine it to
test if it is being addressed.
• The addressed slave will clear its SM2 bit and prepare to receive
the data bytes that follow. The 9
th
bit in data byte is 0.
• The slaves that were not addressed leave their SM2 bits set and
ignore the incoming data bytes
Ref. I. Scott Mackenzie 27Lê Chí Thông
28
References
Lê Chí Thông
• I. Scott Mackenzie, The 8051 Microcontroller
• Các tài liệu trên Internet không trích dẫn hoặc không ghi tác
giả
Ref. I. Scott Mackenzie

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×