Xem mẫu

  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í