Xem mẫu
- 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 nh ghi d li u vào SBUF và ñ c d li u t SBUF.
MOV SBUF, #45H ;Phát giá tr 45H qua port n i ti p.
MOV SBUF, #”D” ;Phát giá tr 44H qua port n i ti p.
MOV SBUF, A ;Phát n i dung c a A qua port n i ti p.
MOV A, SBUF ;ð c d li u thu ñư c t port n i ti p.
Giáo trình Vi x lý. 155 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
Ñòa chæ bit (HEX)
SM1 REN RB8 RI
SM0 SM2 TB8 TI Kyù hieäu
RI: Receive Interrupt Côø ngaét thu. RI = 1 ngay khi keát
thuùc vieäc thu moät döõ lieäu, RI ñöôïc xoùa bôûi phaàn meàm.
TI: Transmit Interrupt Côø ngaét phaùt. TI = 1 ngay khi keát
thuùc vieäc phaùt moät döõ lieäu, TI ñöôïc xoùa bôûi phaàn meàm.
RB8: Receive bit 8 Bit thöù 9 nhaän ñöôïc (cheá ñoä 2 vaø 3).
TB8: Transmit bit 8 Bit thöù 9 ñöôïc phaùt (cheá ñoä 2 vaø 3).
Bit naøy ñöôïc set (1) hoaëc xoùa (0) bôûi phaàn meàm.
REN: Receive Enable Cho pheùp thu. Bit naøy phaûi ñöôïc set
ñeå nhaän caùc döõ lieäu.
SM2: Serial Mode 2 Bit 2 choïn cheá ñoä cuûa port noái tieáp.
Bit naøy cho pheùp truyeàn thoâng ña xöû lyù ôû cheá ñoä 2 vaø 3; bit
RI seõ khoâng ñöôïc tích cöïc neáu bit thöù 9 nhaän ñöôïc laø 0.
SM1: Serial Mode 1 Bit 1 choïn cheá ñoä cuûa port noái tieáp.
SM0: Serial Mode 0 Bit 0 choïn cheá ñoä cuûa port noái tieá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). Trư ng ðH Công nghi p Tp.HCM.
Ví d : Kh i ñ ng port n i ti p ch ñ 1, cho phép port thu d li u t chân RxD và s n sàng phát d
li u t chân TxD.
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:
• Quá 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
ri t
e
Giáo trình Vi x lý. 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:
Quá trình thu d li u:
• Quá 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 ngoà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). Trư ng ðH Công nghi p Tp.HCM.
8051 Shift register: Thanh ghi dòch bit.
Data 8 extra outputs: 8 ngoõ ra môû roäng.
A1H
W 8 Extra outputs
ri t
e
D7 D0
SBUF 10100001B DATA Shift Register
RxD
10100001 Data
Serial port SHIFT CLOCK
TxD Clock
Cheá ñoä thanh ghi dòch bit cuûa port noái tieá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 khuông d ng d li u khi ñư c s d ng ch ñ UART:
[1]
D0 D1 D2 D3 D4 D5 D6 D7
[0]
START DATA BIT Bit naøy coù theå PARITY STOP
BIT coù hoaëc khoâng BIT BIT
(Möùc 0) coù tuøy theo yeâu (Möùc 1)
caàu söû duïng
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.
Quá trình phát d li u:
• Quá 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:
• Quá 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 quá 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à xoá 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ý. Yê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 t c ñ baud có th thay ñ i)
Giáo trình Vi x lý. 161 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.
Khuông d ng c a m t d li u khi s d ng ch ñ UART 9 bit:
Transmit
Receive
Trans
Recei
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 ;Xoá bit th 8 (D7) trong thanh ghi A.
MOV C, P ;Sao chép bit ki m tra ch n vào C.
MOV ACC.7, C ;ð t bit ki m tra ch n vào bit th 8 trong A.
MOV SBUF, 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 ñã hoàn t t vi c truy n
m t byte d li u, còn ñư c xoá (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 ñã hoàn t t vi c nh n m t byte
d li u, còn ñư c xoá (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 toà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 ngoà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í
- Chương 5: Ho t ñ ng c a port n i ti p (Serial Port). Trư ng ðH Công nghi p Tp.HCM.
Khi b vi x lý ch (master) mu n truy n m t khôi d li u ñ n m t trong nhi u b x lý t (slave),
trư c tiên b vi x lý ch phát ñi m t byte ñ a ch nh n d ng b vi x lý t ñích. M t byte ñ a ch khác
v i m t byte d li u ch bit th 9 là 1 (ñ i v i byte ñ a ch ) và là 0 (ñ i v i byte d li u). M t byte
ñ a ch ng t t t c các b vi x lý t ñ cho m i m t b vi x lý t có th kh o sát byte nh n ñư c ñ
ki m tra xem có ph i là b vi x lý t ñang ñư c ñ nh ñ a ch không. B vi x lý t ñư c ñ nh ñ a ch
s xoá bit SM2 c a mình và chu n b nh n các byte d li u theo sau. Các b vi x lý t không ñư c
ñ nh ñ a ch có các bit SM2 c a chúng ñư c set b ng 1 và th c thi các công vi c c a riêng chúng, b
qua không nh n các byte d li u. Các b vi x lý này s ñư c ng t l n n a khi b vi x lý ch phát ti p
byte ñ a ch k . Các sơ ñ c th có th ñư c nêu ra sao cho m t khi liên k t ch t ñã ñư c thi t l p,
b vi x lý t cũng có th phát ñ n b vi x lý ch . Mưu m o ñây là không s d ng bit d li u th 9
sau khi liên k t v a ñư c thi t l p (ngư c l i các b vi x lý t khác có th ñư c ch n m t cách không
c ý).
SM2 không nh hư ng ñ n ch ñ 0, và trong ch ñ 1 thì bit này có th ñư c dùng ñ ki m tra s
h p l c a bit stop. ch ñ 1 thu, n u SM2 = 1, ng t thu s không ñư c tích c c tr khi bit stop thu
ñư c là h p l .
VII. T C ð BAUD C A PORT N I TI P:
1. T c ñ baud cho ch ñ 0:
f OSC
Baud rate =
12
2. T c ñ baud cho ch ñ 1, 3:
Timer I overflow rate
Baud rate =
16
Timer I overflow rate
Baud rate =
32
3. T c ñ baud cho ch ñ 2:
f OSC
Baud rate =
32
f OSC
Baud rate =
64
• Lưu ý:
o Sau khi h th ng reset thì bit SMOD = 0 (ch ñ m c ñ nh).
o Vì thanh ghi PCON không ñư c ñ nh ñ a ch t ng bit, nên ñ tăng g p ñôi t c ñ baud
(t c làm cho SMOD=1) ta ph i th c hi n b ng nh ng dòng l nh sau:
MOV A, PCON ;L y giá tr t thanh ghi PCON.
SETB ACC.7 ;SMOD = 1.
MOV PCON, A ;Chuy n giá tr m i vào PCON.
Giáo trình Vi x lý. 165 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.
4. S d ng Timer 1 làm xung clock t c ñ baud cho port n i ti p:
K thu t t o xung clock t c ñ baud b ng Timer 1:
V ch n ch ñ : thư ng dùng Timer 1 ch ñ 8 bit t ñ ng n p l i (Mode 2). Các t c ñ baud r t
ch m có th nh n ñư c b ng cách s d ng ch ñ 16 bit (Mode 1).
• Ví d : Kh i ñ ng thanh ghi TMOD ñ dùng T1 làm b t o xung t c ñ baud (cho T1 ho t ñ ng
ch ñ 2):
MOV TMOD, #2xH x: dành cho Timer 0
V ch n t c ñ baud:
G i M là giá tr c n n p cho thanh ghi TH1 ñ có t c ñ baud như yêu c u, ta có:
f
M=− Timer
Timer 1 overflow rate
f Timer 1 overflow rate
Mà: f = Timer và Baud rate =
Timer 12 16 (hoaëc 32)
f 1
⇒ M = − Osc ×
12 Baud rate × 16 (hoaëc 32)
V y ta có:
f f
M=− Osc , ( SMOD = 1) ho c M = − Osc , ( SMOD = 0)
192× Baud rate 384× Baud rate
Trong ñó: fOsc (Hz): t n s th ch anh.
Baud rate (bps): t c ñ baud c a port n i ti p.
• Ví d : T o t c ñ baud là 1200 v i trư ng h p SMOD = 0 và chip 8051 dùng th ch anh 12
MHz.
G i M là giá tr c n n p cho thanh ghi TH1 ñ có t c ñ baud như yêu c u, ta có:
f
M=− Osc , ( SMOD = 0)
384× Baud rate
6
12.10
⇒ M=− = −26,0416 ≅ -26 (làm tròn s ).
384 ×1200
Giáo trình Vi x lý. 166 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.
Chuy n giá tr này vào thanh ghi TH1:
MOV TH1, #(-26) ho c MOV TH1, #E6H
Chú ý: Do vi c làm tròn cho nên s có m t sai s nh trong vi c xác ñ nh chính xác t c ñ baud. Cho
nên ñ có t c ñ baud chính xác trong vi c truy n d li u thông qua port n i ti p thì ngư i ta thư ng
dùng th ch anh dao ñ ng có t n s 11,0592 MHz (thay vì là 12 MHz).
Ví d :
6
11,0592.10
⇒ M=− = −24 (không c n ph i làm tròn s )
384 ×1200
• B ng tính t c ñ baud cho port n i ti p:
VIII. CÁC BƯ C CƠ B N L P TRÌNH PORT N I TI P:
Trong các ch ñ truy n d li u n i ti p c a 8051 ñã nêu trên thì trên th c t s d ng, ñ th c hi n
vi c thu và phát d li u n i ti p gi a chip 8051 v i các thi t b khác (8051, máy tính, các thi t b
SPI,…) thư ng ngư i l p trình ch s d ng hai ch ñ sau : Mode 1 (UART 8 bit có t c ñ baud thay
ñ i) ho c Mode 3 (UART 9 bit có t c ñ baud thay ñ i). Còn hai ch ñ còn l i thì r t ít s d ng khi
c n truy n d li u n i ti p. Cho nên ñây chúng ta ch xem xét ñ n trình t th c hi n vi c l p trình
(bao g m thao tác kh i ñ ng và ñi u khi n thu/phát d li u) ñ 8051 có th truy n (phát) và nh n (thu)
d li u thông qua port n i ti p theo hai ch ñ UART nêu trên.
1. L p trình 8051 truy n (phát) d li u n i ti p:
• Ch n ch ñ ho t ñ ng cho port n i ti p:
MOV SCON, #...(1)…
• Ch n ch ñ ho t ñ ng Timer 1, cho bit GATE=0 và C/T=0:
MOV TMOD, #...(2)…
• Ch n giá tr thích h p (căn c vào t c ñ baud) cho Timer 1:
MOV TH1, #...(3)…
• Cho Timer 1 ch y:
SETB TR1
• Ki m tra xem ñã phát xong toàn b d li u trư c ñó hay chưa?
JNB TI, $
ho c
WAIT: JNB TI, WAIT
• Xoá c ng t phát TI (chu n b cho l n phát d li u ti p theo):
CLR TI
Giáo trình Vi x lý. 167 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.
• Ghi d li u c n phát vào port n i ti p ñ phát ñi:
MOV SBUF, ...(4)…
• Quay tr l i bư c 5 ñ phát m t d li u ti p theo.
Lưu ý:
(1): Giá tr dùng ñ qui ñ nh ch ñ ho t ñ ng c a port n i ti p. ð ñơn gi n trong vi c l p
trình, ta có th kh i ñ ng thanh ghi SCON theo như trình bày dư i ñây:
Mode 1: ...(1)… = 52H
Mode 3: ...(1)… = D2H
(2): Giá tr dùng ñ qui ñ nh ch ñ ho t ñ ng c a Timer 1 (dùng ñ t o t c ñ baud cho vi c
truy n d li u n i ti p). ð ñơn gi n trong vi c l p trình, ta có th kh i ñ ng thanh ghi TMOD theo
như trình bày dư i ñây (ch y u ñây ta ch c n s d ng Timer 1 Mode 2 – Ch ñ 8 bit t ñ ng n p
l i):
Mode 2: ...(2)… = 20H
(3): Giá tr dùng ñ qui ñ nh t c ñ baud cho port n i ti p. Giá tr này ph thu c vào t n s
th ch anh, bit SMOD và t c ñ baud mà ngư i l p trình mong mu n (xem thêm “B ng tính t c ñ
baud cho port n i ti p” như trên ñã trình bày).
...(3)… = M
f f
M=− Osc , ( SMOD = 1) ho c M = − Osc , ( SMOD = 0)
192× Baud rate 384× Baud rate
Trong ñó: fOsc (Hz): t n s th ch anh.
Baud rate (bps): t c ñ baud c a port n i ti p.
(4): D li u c n phát ñi thông qua port n i ti p. D li u này có th là n i dung c a m t ô nh ,
thanh ghi ho c m t giá tr t c th i.
Nên nh r ng, n u có yêu c u thì bit g i kèm theo (ví d như bit Parity) c n ph i thêm vào
trư c khi ti n hành quá trình phát d li u (Mode 1: kèm thêm vào v trí c a bit D7, Mode 3: kèm thêm
vào v trí c a bit TB8).
Giáo trình Vi x lý. 168 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.
2. L p trình 8051 nh n (thu) d li u n i ti p:
• Ch n ch ñ ho t ñ ng cho port n i ti p:
MOV SCON, #...(1)…
• Ch n ch ñ ho t ñ ng Timer 1, cho bit GATE=0 và C/T=0:
MOV TMOD, #...(2)…
• Ch n giá tr thích h p (căn c vào t c ñ baud) cho Timer 1:
MOV TH1, #...(3)…
• Cho Timer 1 ch y:
SETB TR1
• Ki m tra xem ñã thu toàn b d li u hay chưa?
JNB RI, $
ho c
WAIT: JNB RI, WAIT
• Xoá c ng t thu RI (chu n b cho l n thu d li u ti p theo):
CLR RI
• C t d li u v a thu ñư c vào nơi an toàn (tránh b m t d li u):
MOV ...(4)…, SBUF
• Quay tr l i bư c 5 ñ nh n m t d li u ti p theo.
Lưu ý:
(1): Xem thêm “L p trình 8051 truy n (phát) d li u n i ti p”.
(2): Xem thêm “L p trình 8051 truy n (phát) d li u n i ti p”.
(3): Xem thêm “L p trình 8051 truy n (phát) d li u n i ti p”.
(4): ð a ch c a m t ô nh , thanh ghi mà d li u thu ñư c t port n i ti p s lưu gi vào trong
ñó.
Nên nh r ng, n u có yêu c u thì bit g i kèm theo (ví d như bit Parity) c n ph i ñư c x lý
trư c khi ti n hành vi c c t d li u thu ñư c (Mode 1: n m t i v trí c a bit D7, Mode 3: n m t i v trí
c a bit RB8).
IX. CÁC VÍ D MINH H A:
1. Ví d 1: (Ch n t c ñ baud)
Chip 8051 s d ng th ch anh 11,0592MHz. Hãy xác ñ nh giá tr c n n p cho thanh ghi TH1 ñ có
ñư c các t c ñ baud: 9600, 2400, 1200 (n u SMOD=0) và 19200 (n u SMOD=1).
Gi i
Xét trư ng h p SMOD=0:
G i M là giá tr c n n p cho thanh ghi TH1 ñ có t c ñ baud như yêu c u, ta có:
f
M=− Osc
384 × Baud rate
Baud rate = 9600
6
11,0592 × 10
⇒ M=− = −3 ⇒ (TH1) = -3 hay (TH1) = FDH.
384 × 9600
Giáo trình Vi x lý. 169 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.
Baud rate = 2400
6
11,0592 ×10
⇒ M=− = −12 ⇒ (TH1) = -12 hay (TH1) = F4H.
384 × 2400
Baud rate = 1200
6
11,0592 × 10
⇒ M=− = −24 ⇒ (TH1) = -24 hay (TH1) = F8H.
384 × 1200
Xét trư ng h p SMOD=1:
G i M là giá tr c n n p cho thanh ghi TH1 ñ có t c ñ baud như yêu c u, ta có:
f
M=− Osc
192× Baud rate
Baud rate = 19200
6
11,0592 ×10
⇒ M=− = −3 ⇒ (TH1) = -3 hay (TH1) = FDH.
192×19200
2. Ví d 2: (Kh i ñ ng port n i ti p)
Vi t m t chu i l nh ñ kh i ñ ng port n i ti p sao cho port này ho t ñ ng như m t UART 8 bit v i
t c ñ baud là 2400, s d ng Timer1 ñ cung c p xung clock t c ñ baud. Chip 8051 s d ng th ch
anh 12MHz.
Gi i
ð kh i ñ ng port n i ti p có c u hình như trên ta c n tác ñ ng ñ n các thanh ghi: SCON, TMOD,
TCON và TH1.
SM0 = 0, SM1 = 1, SM2 = 0 → ch ñ UART 8 bit.
REN = 1 → cho phép port n i ti p thu d li u.
TI = 1 → cho phép port s n sàng phát d li u (b ñ m phát r ng).
RI = 0 → cho phép port s n sàng thu d li u (b ñ m thu r ng).
GATE = 0, C/T = 0, M1 = 1, M0 = 0 → Timer 1 ch ñ ñ nh th i 8 bit t n p l i.
Giáo trình Vi x lý. 170 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.
TR1 = 1→ cho phép Timer 1 ho t ñ ng.
G i M là giá tr c n n p cho thanh ghi TH1 ñ có t c ñ baud như yêu c u, ta có:
f
M=− Osc ( SMOD = 0)
384× Baud rate
6
12.10
⇒ M=− = −13,02 ≅ -13 (làm tròn s ).
384 × 2400
Chuy n giá tr này vào thanh ghi TH1:
MOV TH1, #(-13) ho c MOV TH1, #F3H
Chu i l nh kh i ñ ng port n i ti p ñư c vi t như sau:
MOV SCON, #52H
MOV TMOD, #20H
MOV TH1, #-13
SETB TR1
3. Ví d 3: (Chương trình con phát (xu t) d li u)
Gi s port n i ti p ñã ñư c kh i ñ ng (như ví d 1). Hãy vi t m t chương trình con ñ phát d
li u (d ng 7 bit) ch a trong thanh ghi A ra port n i ti p v i bit ki m tra l là bit th 8. Chú ý r ng, vi c
tr v t chương trình con này không ñư c làm thay ñ i n i dung thanh ghi A.
Gi i
Ba l nh ñ u tiên ñ t bit ki m tra l vào bit 7 c a thanh ghi A (ACC.7). Do bit P trong thanh ghi
PSW ñư c thi t l p ñ ki m tra ch n cho giá tr trong thanh ghi A, cho nên bit này ph i ñư c l y bù ñ
tr thành bit ki m tra l trư c khi ñ t vào ACC.7. L nh JNB t o ra m t vòng l p ch ñ ki m tra c
ng t phát TI cho ñ n khi c này ñư c set b ng 1. Khi TI=1 (do vi c phát ký t trư c ñó v a k t thúc),
bit này s ñư c xóa và sau ñó ký t trong thanh ghi A ñư c ghi vào b ñ m c a port n i ti p SBUF và
Giáo trình Vi x lý. 171 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.
vi c phát ký t ñư c b t ñ u l n tràn k c a b ñ m t o xung clock cho port n i ti p. Sau cùng bit
ACC.7 s ñư c xóa ñ giá tr tr v gi ng như khi mã 7 bit ñư c chuy n ñ n chương trình con.
4. Ví d 4: (Chương trình con thu (nh n) d li u)
Gi s port n i ti p ñã ñư c kh i ñ ng (như ví d 1). Hãy vi t m t chương trình con ñ thu d
li u t port n i ti p và n p giá tr thu ñư c vào thanh ghi A (d li u thu ñư c có d ng 7 bit d li u + 1
bit ki m tra l , tương t d li u t ví d 2). S d ng bit th 8 thu ñư c làm bit ki m tra l và set c nh
C n u có l i ch n l .
Gi i
Chương trình con này b t ñ u b ng vi c ch c ng t thu RI ñư c set b ng 1 ñ ch ra r ng ký t ñã
s n sàng trong b ñ m thu SBUF (ñ ñư c ñ c). Khi RI=1, l nh JNB chuy n ñi u khi n ñ n l nh ti p
theo sau l nh này. C RI ñư c xóa và mã trong SBUF ñư c ch a vào thanh ghi A. Do bit P trong thanh
ghi PSW ñư c thi t l p ñ ki m tra ch n cho giá tr trong thanh ghi A. Cho nên bit này s ñư c set
b ng 1 n u n i dung thanh ghi A (t c d li u v a thu ñư c) có ch a bit ki m tra l bit th 7 c a
thanh ghi này và ngư c l i thì bit này s ñư c xoá b ng 0 thông qua l nh CPL. Vi c di chuy n bit P vào
trong c nh CY s làm cho CY=0 n u không có l i ho c CY=1 n u có m t l i ch n l . Sau cùng bit
ACC.7 s ñư c xóa ñ ñ m b o r ng ch có mã 7 bit ñư c tr v cho chương trình ñã g i.
5. Ví d 5: (Truy n d li u)
Vi t chương trình cho 8051 (fOsc=11,0592MHz) ñ truy n liên t c m t ký t “A” thông qua port n i
ti p v i t c ñ 4800 baud (Mode 1).
Gi i
• Tính toán: D a vào nh ng công th c ñã h c, ta có:
Port n i ti p (Mode 1) ⇒ (SCON) = 52H
Timer 1 (Mode 2) ⇒ (TMOD) = 20H
Baud rate = 4800 và fOsc=11,0592MHz ⇒ (TH1) = -6 v i (SMOD) = 0
Giáo trình Vi x lý. 172 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ương trình: D a vào nh ng tính toán trên, ta có:
MOV SCON, #52H ;UART 8 bit, t c ñ baud thay ñ i.
MOV TMOD, #20H ;Ch ñ 8 bit t n p l i.
MOV TH1, #(-6) ;Baud rate = 4800.
SETB TR1 ;Kh i ñ ng Timer 1.
LOOP:
JNB TI, $ ;Ki m tra phát d li u trư c hoàn t t?
CLR TI ;Xoá c TI, chu n b cho l n phát k ti p.
MOV SBUF, #”A” ;Phát ký t “A”.
SJMP LOOP ;L p l i quá trình phát.
END ;K t thúc chương trình.
6. Ví d 6: (Truy n d li u)
Vi t chương trình cho 8051 (fOsc=11,0592MHz) ñ truy n liên t c chu i ký t “TTCNDT” thông
qua port n i ti p v i t c ñ 19200 baud (Mode 1).
Gi i
• Tính toán:
Port n i ti p (Mode 1) ⇒ (SCON) = 52H
Timer 1 (Mode 2) ⇒ (TMOD) = 20H
Baud rate = 19200 và fOsc=11,0592MHz ⇒ (TH1) = -3 v i (SMOD) = 1
• Chương trình: D a vào nh ng tính toán trên, ta có:
MOV SCON, #52H ;UART 8 bit, t c ñ baud thay ñ i.
MOV TMOD, #20H ;Ch ñ 8 bit t n p l i.
MOV TH1, #(-3) ;Baud rate = 19200.
MOV A, PCON ;L y giá tr t thanh ghi PCON.
SETB ACC.7 ;SMOD = 1.
MOV PCON, A ;Chuy n giá tr m i vào PCON.
SETB TR1 ;Kh i ñ ng Timer 1.
LOOP:
MOV DPTR, #MYDATA ;N p con tr vùng d li u.
NEXT:
CLR A ;Xoá ACC, A = 0
MOVC A, @A+DPTR ;L y d li u t i ô nh ROM do
;(A+DPTR) tr ñ n ñưa vào A.
JZ EXIT ;Thoát n u là ký t Null.
JNB TI, $ ;Ki m tra phát d li u trư c hoàn t t?
CLR TI ;Xoá c TI, chu n b phát ti p.
MOV SBUF, A ;Phát d li u ra port n i ti p.
INC DPTR ;Tăng con tr d li u.
SJMP NEXT ;L p l i quá trình phát ký t k ti p.
EXIT:
SJMP LOOP ;L p l i t ñ u.
MYDATA:
DB “TTCNDT”,0 ;D li u c n truy n ñi, có ký t Null.
END ;K t thúc chương trình.
Giáo trình Vi x lý. 173 Biên so n: Ph m Quang Trí
nguon tai.lieu . vn