chương 5: Hoạt động của port nối tiếp (Serial Port)

Chia sẻ: Nguyen Van Dau | Ngày: | Loại File: PDF | Số trang:23

0
136
lượt xem
50
download

chương 5: Hoạt động của port nối tiếp (Serial Port)

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Port nối tiếp có chức năng thực hiện việc chuyển đổi dữ liệu từ song song thành nối tiếp khi phát; từ nối tiếp thành song song khi thu.

Chủ đề:
Lưu

Nội dung Text: chương 5: Hoạt động của port nối tiếp (Serial Port)

  1. 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í
  2. 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í
  3. 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í
  4. 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í
  5. 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í
  6. 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í
  7. 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í
  8. 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í
  9. 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í
  10. 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í
  11. 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í
  12. 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í
  13. 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í
  14. 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í
  15. 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í
  16. 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í
  17. 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í
  18. 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í
  19. 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í
  20. 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í
Đồng bộ tài khoản