Microprocessing Systems - Chapter 5: Serial Port Operation - Lê Chí Thông
• 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
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 sites.google.com/site/chithong 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 sites.google.com/site/chithong 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) • fOSC = 12 MHz fCLK = 1 MHz TCLK = 1 μs • Assume SMOD=0: Timer 1 overflow rate = 1200 x 32 = 38.4 KHz Toverflow = 1/38.4 kHz = 26.04 μs • An overflow requires Toverflow/TCLK ≈ 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 sites.google.com/site/chithong 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) • fOSC = 11.0592 MHz TCLK = 12/11.0592 μs • Assume SMOD=0: Timer 1 overflow rate = 1200 x 32 = 38.4 KHz Toverflow = 1/0.0384 [μs] • An overflow requires Toverflow/TCLK = 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 sites.google.com/site/chithong 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 sites.google.com/site/chithong 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 SBUF,A ; 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 Your Turn! Ref. I. Scott Mackenzie 20Lê Chí Thông Assume that a string of data is stored in internal RAM at address 30H to 50H. Write a program that sends this string to serial port using UART 8-bit, 2400 baud, 11.059-MHz crystal. ĐH Bách Khoa TP.HCM Lê Chí Thông sites.google.com/site/chithong 11 Solution Ref. I. Scott Mackenzie 21Lê Chí Thông Assume that a string of data is stored in internal RAM at address 30H to 50H. Write a program that sends this string to serial port using UART 8-bit, 2400 baud, 11.059-MHz crystal. ORG 0000H MOV SCON,#01010010B MOV TMOD,#00100000B MOV TH1,#-12 SETB TR1 MOV R0,#30H LOOP: MOV A,@R0 ACALL SEND INC R0 CJNE R0,#51H,LOOP SJMP DONE SEND: JNB TI,$ CLR TI MOV SBUF,A RET DONE: NOP END 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 20 times SJMP DONE RECEIVE: JNB RI,$ ;receive buffer full? No: check again CLR RI ;yes: clear flag and MOV A,SBUF ; receive 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 22Lê Chí Thông ĐH Bách Khoa TP.HCM Lê Chí Thông sites.google.com/site/chithong 12 Your Turn! Ref. I. Scott Mackenzie 23Lê Chí Thông Write a program that receives a 20-byte string from serial port using UART 8-bit, 4800 baud, 11.059-MHz crystal, and then writes data to internal RAM from address 40H Problem 1 Ref. I. Scott Mackenzie 24Lê Chí Thông ĐH Bách Khoa TP.HCM Lê Chí Thông sites.google.com/site/chithong 13 Problem 2 Ref. I. Scott Mackenzie 25Lê Chí Thông 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 9th bit is whatever has been put in TB8 in SCON. • On reception, the 9th bit received is placed in RB8 in SCON. • Baud rate is either fOSC/64 (SMOD=0) or fOSC/32 (SMOD=1) Ref. I. Scott Mackenzie 26Lê Chí Thông ĐH Bách Khoa TP.HCM Lê Chí Thông sites.google.com/site/chithong 14 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 27Lê Chí Thông Adding a Parity Bit • A common use for the 9th 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 9th data bit to be transmitted: MOV C,P ;put even parity bit in C flag MOV TB8,C ;and move to the 9th data bit MOV SBUF,A;move from A to SBUF to transmit Ref. I. Scott Mackenzie 28Lê Chí Thông ĐH Bách Khoa TP.HCM Lê Chí Thông sites.google.com/site/chithong 15 Adding a Parity Bit • Eg. Put odd parity bit in TB8, which becomes the 9th 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 9th data bit MOV SBUF,A;move from A to SBUF to transmit Ref. I. Scott Mackenzie 29Lê Chí Thông 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 9th bit Ref. I. Scott Mackenzie 30Lê Chí Thông ĐH Bách Khoa TP.HCM Lê Chí Thông sites.google.com/site/chithong 16 Example 3 Ref. I. Scott Mackenzie 31Lê 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 9th data bit ACALL SEND ;send data INC R0 ;increase pointer DJNZ R2,LOOP ;loop 10 times SJMP DONE SEND: JNB TI,$ ;check TI empty? No: check again CLR TI ;yes: clear flag and MOV SBUF,A ; send data RET ;return DONE: NOP 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 8th bit Ref. I. Scott Mackenzie 32Lê 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 8th 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 8th 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 sites.google.com/site/chithong 17 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 9th 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 9th 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 33Lê Chí Thông 34 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
File đính kèm:
- microprocessing_systems_chapter_5_serial_port_operation_le_c.pdf