Академический Документы
Профессиональный Документы
Культура Документы
HCM
L Ch Thng
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
L Ch Thng
sites.google.com/site/chithong
L Ch Thng
Writing to SBUF loads data to be transmitted Reading SBUF accesses received data
Ref. I. Scott Mackenzie L Ch Thng 3
SCON Register
L Ch Thng
sites.google.com/site/chithong
L Ch Thng
SCON Register
L Ch Thng
L Ch Thng
sites.google.com/site/chithong
L Ch Thng
L Ch Thng
L Ch Thng
sites.google.com/site/chithong
L Ch Thng
L Ch Thng
sites.google.com/site/chithong
L Ch Thng
synchronization event
Ref. I. Scott Mackenzie L Ch Thng 11
sites.google.com/site/chithong
L Ch Thng
L Ch Thng
13
sites.google.com/site/chithong
L Ch Thng
L Ch Thng
16
sites.google.com/site/chithong
L Ch Thng
L Ch Thng
17
L Ch Thng
18
sites.google.com/site/chithong
L Ch Thng
Example 1: Transmission
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)
ORG 0000H MOV SCON,#01010010B MOV TMOD,#00100000B MOV TH1,#-24 SETB TR1 MOV R2,#10 MOV R0,#30H LOOP: MOV A,@R0 ACALL SEND INC R0 DJNZ R2,LOOP SJMP DONE SEND: JNB TI,$ CLR TI MOV SBUF,A RET DONE: NOP END
Ref. I. Scott Mackenzie
;Serial port mode 1 ;Timer 1 mode 2 ;reload count for 1200 baud ;start Timer 1 ;number of loops ;starting address ;get data ;send data ;increase pointer ;loop 10 times ;transmit buffer empty? No:check again ;yes: clear flag and ; send data ;return
L Ch Thng 19
Your Turn!
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.
L Ch Thng
20
sites.google.com/site/chithong
10
L Ch Thng
Solution
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 Ref. I. Scott Mackenzie END
L Ch Thng
21
Example 2: Reception
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.
ORG 0000H MOV SCON,#01010010B MOV TMOD,#00100000B MOV TH1,#-12 SETB TR1 MOV R2,#20 MOV R0,#40H LOOP: ACALL RECEIVE MOV @R0,A INC R0 DJNZ R2,LOOP SJMP DONE RECEIVE: JNB RI,$ CLR RI MOV A,SBUF RET DONE: NOP END Ref. I. Scott Mackenzie ;Serial port mode 1 ;Timer 1 mode 2 ;reload count for 2400 baud ;start Timer 1 ;number of loops ;starting address ;receive data ;store data ;increase pointer ;loop 20 times
;receive buffer full? No: check again ;yes: clear flag and ; receive data ;return
L Ch Thng 22
sites.google.com/site/chithong
11
L Ch Thng
Your Turn!
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
L Ch Thng
23
Problem 1
L Ch Thng
24
sites.google.com/site/chithong
12
L Ch Thng
Problem 2
L Ch Thng
25
L Ch Thng
26
sites.google.com/site/chithong
13
L Ch Thng
L Ch Thng
27
L Ch Thng
28
sites.google.com/site/chithong
14
L Ch Thng
L Ch Thng
29
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
L Ch Thng
30
sites.google.com/site/chithong
15
L Ch Thng
Example 3
ORG 0000H MOV SCON,#11010010B MOV TMOD,#00100000B MOV TH1,#-6 SETB TR1 MOV R2,#10 MOV R0,#30H LOOP: MOV A,@R0 MOV C,P CPL C MOV TB8,C ACALL SEND INC R0 DJNZ R2,LOOP SJMP DONE SEND: JNB TI,$ CLR TI MOV SBUF,A RET DONE: NOP END
Ref. I. Scott Mackenzie
;Serial port mode 3 (9-bit) ;Timer 1 mode 2 ;reload count for 4800 baud ;start Timer 1 ;number of loops ;starting address ;get data ;put even parity bit in C flag ;convert to odd parity ;and move to the 9th data bit ;send data ;increase pointer ;loop 10 times ;check TI empty? No: check again ;yes: clear flag and ; send data ;return
L Ch Thng
31
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
ORG 0000H MOV SCON,#01010010B MOV TMOD,#00100000B MOV TH1,#-6 SETB TR1 MOV R2,#10 MOV R0,#30H LOOP: MOV A,@R0 CLR ACC.7 MOV C,P CPL C MOV ACC.7,C ACALL SEND INC R0 DJNZ R2,LOOP SEND: JNB TI,$ CLR TI MOV A,SBUF RET END
Ref. I. Scott Mackenzie
;Serial port mode 1 (8-bit) ;Timer 1 mode 2 ;reload count for 4800 baud ;start Timer 1 ;number of loops ;starting address ;get data ;clear the 8th bit of A ;put even parity bit in C flag ;convert to odd parity ;and move to the 8th bit of A ;send data ;increase pointer ;loop 10 times ;check TI empty? No: check again ;yes: clear flag and ; send data ;return
L Ch Thng 32
sites.google.com/site/chithong
16
L Ch Thng
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
L Ch Thng
33
References
I. Scott Mackenzie, The 8051 Microcontroller Cc ti liu trn Internet khng trch dn hoc khng ghi tc gi
L Ch Thng
34
sites.google.com/site/chithong
17