Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
CHƯƠNG 5
HO T ð NG C A PORT N I TI P
(SERIAL PORT)
I. M
ð U:
Máy tính truy n d li u theo hai phương pháp: truy n d li u song song và truy n d li u n i
ti p.
• Truy n song song: S d ng nhi u dây d n ñ truy n d li u gi a các thi t b có kho ng cách
g n nhau (kho ng vài mét). Phương pháp này cho phép truy n d li u v i t c ñ cao nh s d ng
nhi u dây d n ñ truy n d li u ñ ng th i nên t i m t th i đi m có th truy n đư c nhi u bit thơng tin
nhưng kho ng cách truy n thì có nhi u h n ch .
• Truy n n i ti p: S d ng m t dây d n ñ truy n d li u (m t dây phát ñi và m t dây thu v )
gi a các thi t b có kho ng cách xa nhau (kho ng vài trăm mét tr lên). Phương pháp này s truy n d
li u v i t c ñ ch m hơn (so v i phương pháp truy n song song) vì ch s d ng m t dây d n ñ truy n
d li u nên t i m t th i ñi m ch có th truy n đư c m t bit thơng tin nhưng kho ng cách truy n thì
khơng b h n ch như phương pháp song song.
Chip 8051 có m t port n i ti p (serial port) v i các tính năng như sau:
• Lưu ý: trư ng h p đ c trưng th hai thì d li u th nh t s không b m t n u CPU ñ c xong
d li u th nh t trư c khi d li u th hai ñư c nh n ñ y ñ .
Các thanh ghi ch c năng ñ c bi t c a port n i ti p:
ð i lư ng ñ c trưng cho t c ñ truy n d li u nhanh hay ch m là t c đ baud (baud rate) hay
cịn g i là t n s ho t ñ ng c a port n i ti p có th là giá tr c ñ nh hay thay ñ i tùy theo yêu c u c a
ngư i l p trình. Khi ch ñ t c ñ baud thay ñ i ñư c s d ng, b ñ nh th i 1 cung c p xung clock t c
ñ baud và ta ph i l p trình sao cho phù h p. phiên b n chip 8031/8052, b ñ nh th i 2 cũng có th
đư c l p trình đ cung c p xung clock t c đ baud.
Giáo trình Vi x lý.
154
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
II. THANH GHI ð M PORT N I TI P (SBUF):
Thanh ghi SBUF (Serial Buffer Register): ñư c dùng ñ lưu gi d li u c n phát ñi và d li u ñã
nh n ñư c. Vi c ghi d li u vào thanh ghi SBUF s n p d li u ñ phát ñi và vi c ñ c d li u t thanh
ghi SBUF s truy xu t d li u ñã thu ñư c.
Thanh ghi SBUF bao g m 2 thanh ghi:
⇒ Thanh ghi phát (b ñ m phát): dùng ñ lưu gi d li u c n phát ñi.
⇒ Thanh ghi thu (b ñ m thu): dùng ñ lưu gi d li u ñã nh n đư c.
C u trúc c a thanh ghi SBUF:
•
Ví d : Các l
MOV
MOV
MOV
MOV
Giáo trình Vi x lý.
nh ghi d li u vào SBUF và ñ c d li u t SBUF.
SBUF, #45H
;Phát giá tr 45H qua port n i ti
SBUF, #”D”
;Phát giá tr 44H qua port n i ti
SBUF, A
;Phát n i dung c a A qua port n
A, SBUF
;ð c d li u thu ñư c t port n
155
p.
p.
i ti p.
i ti p.
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
III. THANH GHI ðI U KHI N PORT N I TI P (SCON):
Thanh ghi SCON (Serial Control Register): ch a các bit dùng ñ ñi u khi n ch ñ ho t ñ ng
và báo tr ng thái c a port n i ti p.
C u trúc c a thanh ghi SCON:
Bit
7
6
5
4
3
2
1
0
SCON: Serial Control Register
9F 9E 9D 9C 9B 9A 99 98
SM1
REN
RB8
RI
SM0
SM2
TB8
TI
Địa chỉ bit (HEX)
Ký hiệu
RI: Receive Interrupt Cờ ngắt thu. RI = 1 ngay khi kết
thúc việc thu một dữ liệu, RI được xóa bởi phần mềm.
TI: Transmit Interrupt Cờ ngắt phát. TI = 1 ngay khi kết
thúc việc phát một dữ liệu, TI được xóa bởi phần mềm.
RB8: Receive bit 8
Bit thứ 9 nhận được (chế độ 2 và 3).
TB8: Transmit bit 8
Bit thứ 9 được phát (chế độ 2 và 3).
Bit này được set (1) hoặc xóa (0) bởi phần mềm.
REN: Receive Enable
để nhận các dữ liệu.
Cho phép thu. Bit này phải được set
SM2: Serial Mode 2 Bit 2 chọn chế độ của port nối tiếp.
Bit này cho phép truyền thông đa xử lý ở chế độ 2 và 3; bit
RI sẽ không được tích cực nếu bit thứ 9 nhận được là 0.
SM1: Serial Mode 1
Bit 1 chọn chế độ của port nối tiếp.
SM0: Serial Mode 0
Bit 0 chọn chế độ của port nối tiếp.
Các ch ñ c a port n i ti p:
Trư c khi s d ng port n i ti p c n ph i:
Giáo trình Vi x lý.
156
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Ví d : Kh i đ ng port n i ti p
li u t chân TxD.
Trư ng ðH Cơng nghi p Tp.HCM.
ch đ 1, cho phép port thu d li u t chân RxD và s n sàng phát d
Gi i
Ta dùng l nh:
MOV SCON, #52H
Gi i thích:
SM0 = 0, SM1 = 1 → cho phép port ho t ñ ng ch ñ 1.
REN = 1 → cho phép port n i ti p ñư c phép thu d li u.
TI = 1 → chu n b port n i ti p s n sàng phát d li u qua chân TxD.
RI = 0 → chu n b port n i ti p s n sàng thu d li u qua chân RxD.
IV. CÁC CH ð
HO T ð NG C A PORT N I TI P:
1. Ch ñ 0 – Thanh ghi d ch 8 bit:
Quá trình phát d li u:
• Q trình kh i đ ng: Ghi d li u c n phát vào SBUF ⇒ Vi c phát d li u b t ñ u: D li u t
SBUF ñư c d ch ra chân RxD ñ ng th i v i các xung clock d ch bit ñư c g i ra chân TxD (m i
bit ñư c truy n ñi trên chân RxD trong 1 chu kỳ máy).
W
Giáo trình Vi x lý.
ri t
e
157
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
• Gi n đ th i gian phát d li u:
Q trình thu d li u:
• Q trình kh i ñ ng: Set bit cho phép thu (REN=1) → Xóa c ng t thu (RI=0) ⇒ Vi c thu d
li u b t ñ u: Các xung clock d ch bit ñư c g i ra chân TxD và d li u t thi t b bên ngồi
đư c d ch vào chân RxD b i các xung clock d ch bit này (vi c d ch d li u vào chân RxD x y ra
c nh lên c a xung clock d ch bit).
• Gi n đ th i gian thu d li u:
ng d ng: M t ng d ng kh thi c a ch ñ 0 (ch ñ thanh ghi d ch bit) là m r ng thêm các ngõ ra
cho chip 8051. M t vi m ch thanh ghi d ch n i ti p – song song có th đư c n i v i các chân TxD và
RxD c a chip 8051 ñ cung c p thêm 8 đư ng xu t (xem hình v bên dư i). Các thanh ghi d ch bit
khác có th ghép cascade v i thanh ghi d ch bit ñ u tiên ñ m r ng thêm n a.
Giáo trình Vi x lý.
158
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
8051
Data
A1H
W
Trư ng ðH Công nghi p Tp.HCM.
Shift register: Thanh ghi dịch bit.
8 extra outputs: 8 ngõ ra mở rộng.
8 Extra outputs
ri t
e
D7
SBUF 10100001B
RxD
Serial port
D0
Shift Register
Data
DATA
10100001
SHIFT CLOCK
Clock
TxD
Chế độ thanh ghi dịch bit của port nối tiếp.
2. Ch ñ 1 – UART 8 bit có t c ñ baud thay ñ i:
Trong ch ñ 1, port n i ti p c a 8051 ho t ñ ng như m t b thu phát khơng đ ng b 8 bit có
t c đ baud thay đ i (UART - Universal Asynchronous Receiver Transmitter).
UART là m t b thu phát d li u n i ti p v i m i ký t d li u ñư c ñ ng trư c b i m t bit
START (logic 0) và ñư c ñ ng sau b i m t bit STOP (logic 1). Th nh tho ng, m t bit ch n l (Parity
bit) ñư c chèn vào gi a bit d li u sau cùng và bit stop. Ho t ñ ng ch y u c a UART là bi n ñ i d
li u phát t song song thành n i ti p và bi n ñ i d li u thu t n i ti p thành song song.
Hình v khng d ng d li u khi đư c s d ng
[1]
[0]
D0
START
BIT
(Mức 0)
D1
D2
D3
D4
DATA BIT
ch đ UART:
D5
D6
D7
Bit này có thể
có hoặc không
có tùy theo yêu
cầu sử dụng
PARITY STOP
BIT
BIT
(Mức 1)
Khuông d ng c a m t d li u khi s d ng ch đ UART 8 bit:
Giáo trình Vi x lý.
159
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
Q trình phát d li u:
• Q trình kh i ñ ng: Ghi d li u c n phát vào SBUF ⇒ Vi c phát d li u b t ñ u: D li u t
SBUF ñư c d ch ra chân TxD (theo th t : Start bit → 8 bit data (D0 .. D7) → Stop bit) → c
TI=1.
W
rit
e
• T c đ baud: do ngư i l p trình thi t l p và đư c qui đ nh b i t c ñ tràn c a Timer 1.
• Th i gian c a 1 bit trên đư ng truy n: b ng ngh ch ñ o c a t c đ baud (1 / Baud rate).
• C ng t phát TI = 1: khi bit stop ñư c xu t hi n trên chân TxD.
Qúa trình thu d li u:
• Q trình kh i đ ng: M t s chuy n tr ng thái t m c 1 xu ng m c 0 t i chân RxD (t c xu t
hi n bit Start) ⇒ Vi c thu d li u b t ñ u: 8 bit d li u ñư c d ch vào trong SBUF (theo th t :
D0→D1→…→D7) → Stop bit (bit th 9) ñư c ñưa vào bit RB8 (thu c thanh ghi SCON) → c
RI=1.
• T c đ baud: do ngư i l p trình thi t l p và đư c qui ñ nh b i t c ñ tràn c a Timer 1.
• Hai đi u ki n b t bu c đ th c hi n q trình thu d li u như trên:
o RI = 0 → Yêu c u này có nghĩa là chip 8051 đã đ c xong d li u trư c đó và xố c RI..
o (SM2 = 1 và Stop bit = 1) ho c SM2 = 0 → ch áp d ng trong ch đ truy n thơng đa x
lý. u c u này có nghĩa là khơng set c RI b ng 1 trong ch đ truy n thơng đa x lý
khi bit d li u th 9 là 0.
• C ng t thu RI = 1: khi 8 bit d li u ñã ñư c n p vào SBUF.
Lưu ý: Trư ng h p các tín hi u nhi u xu t hi n trên ñư ng truy n (làm cho ñư ng truy n xu t hi n
m c th p) d n ñ n làm cho b thu nh n d ng sai, cho đó là s xu t hi n c a START bit (logic 0) và
ti n hành th c hi n quá trình thu d li u, t đó d n đ n k t qu nh n vào s khơng đúng. ð tránh đi u
này x y ra thì khi đư ng truy n có s chuy n tr ng thái t 1 xu ng 0, b thu yêu c u m c 0 này ph i
Giáo trình Vi x lý.
160
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
đư c duy trì trên đư ng truy n trong m t kho ng th i gian xác ñ nh. N u khơng đ m b o đư c như
th , b thu ñư c gi s r ng ñã nh n đư c nhi u thay vì nh n ñư c START bit h p l . Lúc ñó b thu s
ñư c thi t l p l i, quay v tr ng thái ngh và ch s chuy n tr ng thái t 1 xu ng 0 k ti p trên ñư ng
truy n.
3. Ch ñ 2 – UART 9 bit có t c đ baud c đ nh:
(Tương t như UART 8 bit, ch khác
s bit d li u là 9 bit)
Khuông d ng c a m t d li u khi s d ng ch ñ UART 9 bit:
4. Ch ñ 3 – UART 9 bit có t c đ baud thay đ i:
(Tương t như UART 9 bit, ch khác
Giáo trình Vi x lý.
161
t c ñ baud có th thay ñ i)
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
Recei
Trans
Receive
Transmit
Khuông d ng c a m t d li u khi s d ng ch ñ UART 9 bit:
V. KH I ð NG VÀ TRUY XU T CÁC THANH GHI:
1. Bit cho phép thu (nh n) d li u (REN: Receive Enable):
• Cơng d ng: dùng đ cho phép (ho c không cho phép) nh n các ký t d li u.
REN = 1: Cho phép nh n d li u ⇒ l nh th c hi n: SETB REN
REN = 0: Không cho phép d li u ⇒ l nh th c hi n: CLR REN
2. Bit d li u th 9:
• Cơng d ng: tùy thu c vào ñ c tính k thu t c a thi t b n i ti p mà có th yêu c u ho c không
yêu c u bit d li u th 9.
Khi phát d li u: bit d li u th 9 ph i ñư c n p vào bit TB8 c a SCON trư c khi phát ñi.
Khi thu d li u: bit d li u th 9 s ñư c n p vào bit RB8 c a SCON sau khi thu xong.
3. Bit ki m tra ch n / l (P: Parity):
• Cơng d ng: Trong chip 8051 thì bit Parity đư c dùng đ thi t l p vi c ki m tra ch n cho 8 bit
d li u ch a trong thanh ghi A (thư ng dùng ñ ki m tra l i khi truy n d li u).
P = 1 ⇒ S lư ng bit 1 trong thanh ghi A là s l .
P = 0 ⇒ S lư ng bit 1 trong thanh ghi A là s ch n.
ho c
S lư ng bit 1 trong thanh ghi A và bit P là m t s ch n.
ch đ 1 (UART 8 bit) thì bit ch n/l do chip 8051 t o ra có th ñư c thêm vào t i bit th 8
(v trí D7) và khi đó ta ch có th truy n d li u ch có 7 bit.
Giáo trình Vi x lý.
162
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
ch đ 2, 3 (UART 9 bit) thì bit ch n/l do chip 8051 t o ra có th đư c thêm vào t i bit th 9
(nghĩa là thêm vào bit TB8 c a SCON) và khi đó ta có th truy n d li u có 8 bit.
START D0 D1 D2 D3 D4 D5 D6 D7 PARITY
STOP
Bit thứ 9
DATA (8 bit)
Ví d : Truy n d li u (ch ñ 2, 3 – UART 9 bit) ch a trong thanh ghi A thông qua port n i ti p v i
yêu c u truy n 8 bit d li u + 1 bit ki m tra ch n (bit P).
Chu i l nh th c hi n:
MOV
C, P
;Chuy n bit ki m tra ch n (bit P) vào TB8 và
MOV
TB8, C
;bit này tr thành bit th 9.
MOV
SBUF, A
;Truy n 8 bit d li u trong A thông qua port.
Ví d : Truy n d li u (ch đ 2, 3 – UART 9 bit) ch a trong thanh ghi A thông qua port n i ti p v i
yêu c u truy n 8 bit d li u + 1 bit ki m tra l (l y bù bit P).
Chu i l nh th c hi n:
MOV
C, P
;Bi n ñ i bit ki m tra ch n (bit P) thành bit
CPL
C
;ki m tra l , chuy n bit ki m tra l vào TB8 và
MOV
TB8, C
;bit này tr thành bit th 9.
MOV
SBUF, A
;Truy n 8 bit d li u trong A thơng qua port.
Ví d : Truy n d li u (ch ñ 1 – UART 8 bit) ch a trong thanh ghi A thông qua port n i ti p v i yêu
c u truy n 7 bit d li u + 1 bit ki m tra ch n (bit P).
Chu i l nh th c hi n:
CLR
ACC.7
MOV
C, P
MOV
ACC.7, C
MOV
SBUF, A
;Xoá bit th 8 (D7) trong thanh ghi A.
;Sao chép bit ki m tra ch n vào C.
;ð t bit ki m tra ch n vào bit th 8 trong A.
;Truy n 7 bit d li u c ng bit ki m tra ch n.
4. Các c ng t c a port n i ti p:
T ph n trình bày trên đây, ta có th th y r ng:
•
Thơng qua vi c ki m tra c ng t TI có th bi t đư c chip 8051 ñã s n sàng ñ truy n m t
byte d li u hay chưa. C n chú ý r ng, ñây c TI ñư c ñ t (TI = 1) khi 8051 đã hồn t t vi c truy n
m t byte d li u, cịn đư c xố (TI=0) thì ph i do ngư i l p trình th c hi n b ng l nh (CLR TI). Cũng
nên nh r ng, n u ghi m t byte vào thanh ghi SBUF trư c khi c TI ñư c đ t (TI = 1) thì s có nguy
cơ b m t ph n d li u trư c đó do chưa k p truy n đi. C TI có th ñư c ki m tra b ng l nh (JNB
TI,…) ho c s d ng phương pháp ng t (s đư c trình bày trong chương ti p theo).
Giáo trình Vi x lý.
163
Biên so n: Ph m Quang Trí
Chương 5: Ho t ñ ng c a port n i ti p (Serial Port).
Trư ng ðH Công nghi p Tp.HCM.
•
Thơng qua vi c ki m tra c ng t RI có th bi t đư c chip 8051 đã nh n xong m t byte d
li u hay chưa. C n chú ý r ng, ñây c RI ñư c đ t (RI = 1) khi 8051 đã hồn t t vi c nh n m t byte
d li u, cịn đư c xố (RI=0) thì ph i do ngư i l p trình th c hi n b ng l nh (CLR RI). Cũng nên nh
r ng, n u không ti n hành c t n i dung c a thanh ghi SBUF vào nơi an tồn thì s có nguy cơ b m t
d li u v a nh n ñư c do d li u ti p theo đư c chuy n vào. C RI có th ñư c ki m tra b ng l nh
(JNB RI,…) ho c s d ng phương pháp ng t (s đư c trình bày trong chương ti p theo).
Lưu ñ và ño n l nh ñ ki m tra và thu m t d li u n i ti p t thi t b bên ngoài vào chip 8051
(ch a vào A):
Lưu ñ và ño n l nh ñ ki m tra và phát m t d li u n i ti p t chip 8051 (ch a trong A) ra thi t b
bên ngồi:
VI. TRUY N THƠNG ðA X
LÝ:
Các ch ñ 2 và 3 là các ch ñ d phịng cho vi c truy n thơng đa x lý. Trong các ch ñ này, 9
bit d li u ñư c thu và bit th 9 ñưa ñ n RB8. Port có th đư c l p trình sao cho khi bit stop ñư c
nh n, ng t do port n i ti p ch đư c tích c c n u RB8=1. ð c trưng này có th ñư c b ng cách set bit
SM2 trong thanh ghi SCON b ng 1. M t ng d ng cho ñi u này là m t môi trư ng m ng s d ng
nhi u 8051 ñư c s p x p theo mơ hình ch /t (master/slave) như hình dư i đây.
Giáo trình Vi x lý.
164
Biên so n: Ph m Quang Trí