Xem mẫu

  1. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. CHƯƠNG 6 HO T ð NG NG T (INTERRUPT) I. M ð U: 1 CPU CH TH C THI ðƯ C 1 L NH T I M T TH I ðI M. Ng t (Interrupt) là vi c x y ra m t ñi u ki n (m t s ki n) làm cho chương trình ñang th c thi (chương trình chính) b t m d ng ñ quay sang th c thi m t chương trình khác (chương trình x lý ng t) r i sau ñó quay tr v ñ th c thi ti p chương trình ñang b t m d ng. Các ng t ñóng vai trò quan tr ng trong vi c thi t k và hi n th c các ng d ng c a b vi ñi u khi n. Các ng t cho phép h th ng ñáp ng m t s ki n theo cách không ñ ng b và x lý s ki n trong khi m t chương trình khác ñang th c thi. M t h th ng ñư c ñi u khi n b i ng t cho ta o tư ng nhi u công vi c ñang ñư c vi x lý th c hi n ñ ng th i. CPU dĩ nhiên không th th c thi nhi u hơn m t l nh m t th i ñi m nhưng CPU có th t m ngưng vi c th c thi m t chương trình ñ th c thi m t chương trình khác r i sau ñó quay v th c thi ti p t c chương trình ñang b t m ngưng, ñi u này thì tương t như vi c CPU r i kh i chương trình g i ñ th c thi chương trình con b g i ñ r i sau ñó quay tr v chương trình g i. C n ph i phân bi t s gi ng và khác nhau gi a “ng t” và “g i chương trình con”: • Gi ng nhau: Khi x y ra ñi u ki n tương ng thì CPU s t m d ng chương trình chính ñang th c thi ñ th c thi m t chương trình khác (chương trình con / chương trình x lý ng t) r i sau ñó (sau khi x lý xong chương trình con / chương trình x lý ng t) thì CPU s quay v ñ th c thi ti p t c chương trình chính ñang b t m d ng. • Khác nhau: Ng t Chương trình con Th i ñi m x y ra s Không bi t trư c (hay x y ra không Bi t trư c (hay x y ra ñ ng b v i ki n ñ ng b v i chương trình chính). chương trình chính). Nguyên nhân d n ñ n Do các tín hi u ñi u khi n t Timer, Do l nh g i chương trình con s ki n Serial port và bên ngoài chip. (ACALL, LCALL). Chương trình x lý ng t (t c là chương trình mà CPU ph i th c hi n khi có m t ng t x y ñ n) ñư c g i là trình ph c v ng t ISR (ISR: Interrupt Service Routine) hay trình qu n lý ng t (Interrupt Handler). ISR ñư c th c thi nh m ñáp ng m t ng t và trong trư ng h p t ng quát th c hi n vi c xu t nh p ñ i v i m t thi t b . Khi m t ng t xu t hi n, vi c th c thi chương trình chính t m th i b d ng l i và CPU th c thi vi c r nhánh ñ n trình ph c v ng t ISR. CPU s th c thi ISR ñ th c hi n m t công vi c và k t thúc vi c th c hi n công vi c này khi g p l nh “quay v t trình ph c v ng t” (l nh RETI), sau ñó chương trình chính ti p t c ñư c th c thi t i nơi b t m d ng. Ta có th nói chương trình Giáo trình Vi x lý. 177 Biên so n: Ph m Quang Trí
  2. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. chính ñư c th c thi m c n n (Base level), còn ISR ñư c th c thi m c ng t (Interrupt level). Bi u di n vi c th c thi chương trình có ng t và không có ng t: M t ví d v ng t ñi n hình là nh p thông s ñi u khi n s d ng bàn phím. Ta hãy kh o sát m t ng d ng c a lò viba. Chương trình chính có th ñi u khi n thành ph n công su t c a lò ñ th c hi n vi c n u nư ng. Tuy nhiên trong khi ñang n u, h th ng ph i ñáp ng vi c nh p s li u b ng tay trên c a lò (ch ng h n như ta mu n yêu c u rút ng n b t hay kéo dài thêm th i gian n u), ñi u này có th x y ra t i b t c th i ñi m nào trong quá trình n u. Trư ng h p ta không s d ng ng t: Như ta ñã bi t, m t h th ng ch có th th c thi m t công vi c t i m t th i ñi m. Cho nên khi h th ng ñang th c thi vi c n u nư ng thì nó không th th c thi vi c ñáp ng nh p s li u khi nó x y ra và ngư c l i. Vì th trong trư ng h p này h th ng ph i th c hi n cho xong vi c n u nư ng r i m i th c hi n ti p vi c ñáp ng nh p s li u (ñi u này vô lý vì khi ñã n u nư ng xong thì c n gì ph i ñi u ch nh th i gian n a) ho c ngư c l i h th ng ph i th c hi n cho xong vi c ñáp ng nh p s li u r i m i th c hi n ti p vi c n u nư ng (ñi u này cũng vô lý vì không th bi t trư c ñư c vi c nh p s li u x y ra lúc nào, cho nên quá trình h th ng ch ñ i vi c nh p s li u s tr nên vô nghĩa). Trư ng h p ta s d ng ng t: Ta nh n th y r ng vi c n u nư ng là vi c di n ra liên t c t ñ u ñ n cu i, còn vi c ñáp ng nh p s li u ch x y ra khi ta nh n bàn phím (không xác ñ nh ñư c th i ñi m x y ra). Vì th , ta phân c p cho chương trình chính (m c n n) s ñi u khi n thành ph n công su t c a lò ñ th c hi n vi c n u nư ng, còn vi c ñáp ng nh p s li u s do ng t ñi u khi n (m c ng t). Bình thư ng thì lò th c hi n vi c n u nư ng như ñã xác ñ nh, khi ngư i s d ng nh n bàn phím thì m t tín hi u ng t ñư c t o ra và chương trình chính s b t m th i d ng l i. ISR ñư c th c thi ñ ñ c mã phím và thay ñ i các ñi u ki n n u tương ng, sau ñó k t thúc b ng cách chuy n ñi u khi n tr v chương trình chính. Chương trình chính ñư c th c thi ti p t nơi t m d ng. ði u quan tr ng trong ví d nêu trên là vi c nh p bàn phím xu t hi n không ñ ng b nghĩa là xu t hi n các kho ng th i không báo trư c ho c ñư c ñi u khi n b i ph n m m ñang ñư c th c thi trong h th ng. ðó là m t ng t. Giáo trình Vi x lý. 178 Biên so n: Ph m Quang Trí
  3. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. II. PHƯƠNG PHÁP PH C V THI T B : M t b vi ñi u khi n có th ph c v m t ho c nhi u thi t b . Có hai phương pháp ph c v thi t b là: phương pháp ng t (Interrupt) và phương pháp thăm dò (Polling). phương pháp ng t, m i khi có m t thi t b c n ñư c ph c v thì thi t b s báo cho b vi ñi u khi n b ng cách g i ñ n ñó m t tín hi u ng t. Khi nh n ñư c tín hi u này, b vi ñi u khi n s ng ng m i công vi c ñang th c hi n ñ chuy n sang ph c v cho thi t b này. phương pháp thăm dò, b vi ñi u khi n liên t c ki m tra tình tr ng c a m t thi t b và khi ñi u ki n ñư c ñáp ng thì nó s ti n hành ph c v cho thi t b này. Sau ñó, b vi ñi u khi n chuy n sang ki m tra tr ng thái c a thi t b k ti p cho ñ n khi t t c thi t b ñ u ñư c ph c v . ði m m nh c a phương pháp ng t là m t b vi ñi u khi n có th ph c v ñư c nhi u thi t b , nhưng dĩ nhiên là không cùng m t th i ñi m. M i thi t b có th ñư c b vi ñi u khi n ph c v d a theo m c ưu tiên ñư c gán. phương pháp thăm dò, thì không th gán m c ưu tiên cho thi t b ñư c vì b vi ñi u khi n ti n hành ki m tra các thi t b theo ki u h i vòng m t cách l n lư t qua t ng thi t b . Ngoài ra, phương pháp ng t cho phép b vi ñi u khi n che ho c b qua m t yêu c u ph c v c a thi t b , ñi u mà phương pháp thăm dò không th th c hi n. Tuy nhiên, lý do chính mà phương pháp ng t ñư c ưa chu ng hơn là vì phương pháp thăm dò lãng phí ñáng k th i gian c a b vi ñi u khi n do ph i h i dò t ng thi t b , ngay c khi chúng không c n ñư c ph c v . ð làm rõ hơn v n ñ này, chúng ta c n xem l i các ví d v l p trình b ñ nh th i ñã ñư c trình bày trong chương 4. Trong ñó có l nh JNB TF1, $ ñư c s d ng ñ ch ñ i cho ñ n khi b ñ nh th i tràn (TF=1). các ví d này, trong khi ch ñ i c TF=1 thì b vi ñi u khi n không th làm ñư c công vi c gì khác, ñi u này d n ñ n vi c lãng phí th i gian. Cũng v i b ñ nh th i này, n u ta dùng phương pháp ng t thì b vi ñi u khi n có th th c hi n m t s công vi c nào ñó trong khi ñang ch ñ i c TF=1. Khi c TF=1 thì b vi ñi u khi n s b ng t cho dù nó ñang làm vi c gì ñi chăng n a, ñi u này s không làm cho b vi ñi u khi n b lãng phí th i gian m t cách vô nghĩa. III. T CH C NG T C A 8051: 1. Các ngu n ng t: Lưu ý: • Khi ta reset h th ng thì t t c các ng t ñ u b c m ho t ñ ng. • Các ngu n ng t này ñư c cho phép ho c c m ho t ñ ng b ng l nh do ngư i l p trình thi t l p cho t ng ng t. • Vi c x lý các ng t ñư c th c hi n qua 2 sơ ñ : o Sơ ñ ưu tiên ng t → có th thay ñ i ñư c và do ngư i l p trình thi t l p. o Sơ ñ chu i vòng → c ñ nh, không thay ñ i ñư c. ⇒ Hai sơ ñ này giúp CPU gi i quy t các v n ñ liên quan ñ n ng t như: hai hay nhi u ng t x y ra ñ ng th i ho c m t ng t x y ra trong khi m t ng t khác ñang ñư c th c thi. Giáo trình Vi x lý. 179 Biên so n: Ph m Quang Trí
  4. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. Các c ng t c a chip 8051: Lưu ý: • M t ng t x y ra thì c ng t tương ng s ñư c set b ng 1. • Khi ISR c a ng t ñư c th c thi thì c ng t tương ng s t ñ ng b xóa v 0 b ng ph n c ng (ngo i tr c ng t RI và TI ph i ñư c xóa v 0 b ng ph n m m). • ð i v i ng t ngoài s có hai cách kích ho t ñ t o ra m t tín hi u ng t: ng t ngoài kích ho t khi có m c th p và ng t ngoài kích ho t khi có c nh âm t i chân INT0\ ho c INT1\. 2. Qui ñ nh vi c ch n lo i kích ho t cho ng t ngoài: Vi c ch n l a lo i kích ho t cho các ng t ngoài, thu c lo i kích ho t c nh hay thu c lo i kích ho t m c, thì ñư c l p trình thông qua các bit IT0 và IT1 c a thanh ghi TCON. IT0 = 0 → Ng t ngoài 0 ñư c kích kh i b i vi c phát hi n m c th p t i chân INT0\. IT0 = 1 → Ng t ngoài 0 ñư c kích kh i b i vi c phát hi n c nh âm t i chân INT0\. IT1 = 0 → Ng t ngoài 1 ñư c kích kh i b i vi c phát hi n m c th p t i chân INT1\. IT1 = 1 → Ng t ngoài 1 ñư c kích kh i b i vi c phát hi n c nh âm t i chân INT1\. Lưu ý: Khi t o tín hi u ng t t i chân INT0\ ho c INT1\ ta c n ph i chú ý ñ n th i gian duy trì tác ñ ng c a tín hi u ng t. • ð i v i lo i ng t kích ho t c nh âm (th i gian t i thi u): 8051 fOSC (MHz): taàn soá thaïch anh. INTx Tm ( s): chu kyø maùy. (1) 12 Tm = (0) f OSC x = 0, 1 Tm Tm • ð i v i lo i ng t kích ho t m c th p (th i gian t i ña): 8051 (*): Duy trì traïng thaùi (0) cho ñeán INTx khi ISR töông öùng ñöôïc thöïc (1) hieän. (*) = 4 × Tm (0) x = 0, 1 (**):Trôû veà traïng thaùi (1) tröôùc khi (*) (**) ISR töông öùng ñöôïc thöïc hieän xong hoaëc tröôùc khi coù moät ngaét khaùc ñöôïc taïo ra. Giáo trình Vi x lý. 180 Biên so n: Ph m Quang Trí
  5. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. 3. Thanh ghi cho phép ng t (IE): Thanh ghi cho phép ng t (IE: Interrupt Enable): ch a các bit dùng ñ cho phép ho c c m các ng t ho t ñ ng. C u trúc c a thanh ghi IE: Hai ñi u ki n ñ m t ng t ñư c phép ho t ñ ng là: • Bit EA = 1. • Bit ng t tương ng = 1. Ví d : ð ng t c a Timer 1 ñư c phép ho t ñ ng ta dùng l nh: SETB ET1 SETB EA ho c MOV IE, #10001000B M c dù c cách trên ñ u cho ta m t k t qu như nhau sau khi h th ng ñư c thi t l p l i tr ng thái ban ñ u (reset h th ng). Tuy nhiên trong khi chương trình ñang ho t ñ ng thì nh hư ng c a hai cách này có khác nhau vì cách th hai ghi lên thanh ghi IE. Cách th nh t, s d ng hai l nh SETB nên ch nh hư ng ñ n 2 bit c n tác ñ ng mà không gây nh hư ng ñ n 5 bit còn l i c a thanh ghi IE. Trong khi ñó, cách th hai ch s d ng l nh MOV nên s làm cho 5 bit còn l i này bit xóa m t. T t nh t ta nên kh i ñ ng thanh ghi IE b ng l nh MOV ñ u chương trình ngay sau khi h th ng ñư c thi t l p l i. Vi c cho phép ho c không cho phép các ng t trong chương trình nên s d ng các l nh SETB ho c CLR ñ tránh nh hư ng ñ n các bit khác trong thanh ghi IE. 4. Thanh ghi ưu tiên ng t (IP): Khái ni m ưu tiên ng t giúp 8051 gi i quy t v n ñ hai tín hi u ng t xu t hi n ñ ng th i và v n ñ m t tín hi u ng t xu t hi n trong khi m t ng t khác ñang ñư c th c thi. Ng t ưu tiên m c cao → Ng t ưu tiên m c th p Thanh ghi ưu tiên ng t (IP: Interrupt Priority): ch a các bit dùng ñ thi t l p m c ñ ưu tiên (m c cao hay m c th p) cho t ng ng t riêng r . Giáo trình Vi x lý. 181 Biên so n: Ph m Quang Trí
  6. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. C u trúc c a thanh ghi IP: Khi h th ng ñư c thi t l p l i tr ng thái ban ñ u thì t t c các ng t ñ u s ñư c m c ñ nh m c ưu tiên th p. Ý tư ng “các m c ưu tiên” cho phép m t trình ph c v ng t ñư c t m d ng b i m t ng t khác n u ng t m i này có m c ưu tiên cao hơn m c ưu tiên c a ng t hi n ñang ñư c ph c v . ði u này hoàn toàn h p lý ñ i v i 8051 vì ta ch có hai m c ưu tiên. N u có ng t có m c ưu tiên cao xu t hi n, trình ph c v ng t cho ng t có m c ưu tiên th p ph i t m d ng (nghĩa là b ng t). Ta không th t m d ng m t chương trình phuc v ng t có m c ưu tiên cao. Chương trình chính do ñư c th c thi m c n n và không ñư c k t h p v i m t ng t nào nên luôn luôn b ng t b i các ng t cho dù các ng t có m c ưu tiên th p hay m c ưu tiên cao. N u có hai ng t v i m c ưu tiên ng t khác nhau xu t hi n ñ ng th i, ng t có m c ưu tiên cao s ñư c ph c v trư c. 5. Th t chu i vòng ng t (Interrupt Polling Sequence): Khái ni m chu i vòng giúp 8051 gi i quy t v n ñ hai hay nhi u tín hi u ng t có m c ưu tiên gi ng nhau xu t hi n ñ ng th i. Chu i vòng này s là (ñư c s p x p theo th t t th p ñ n cao): Ng t ngoài 0 → Ng t Timer 0 → Ng t ngoài 1 → Ng t Timer 1 → Ng t port n i ti p → Ng t Timer 2 (ch có 8052) Hình dư i ñây minh h a 5 nguyên nhân ng t, cơ ch cho phép riêng r và toàn c c, chu i vòng và các m c ưu tiên. Tr ng thái c a t t c các nguyên nhân ng t ñư c th hi n thông qua các bit c tương ng trong các thanh ghi ch c năng ñ c bi t có liên quan. Dĩ nhiên n u m t ng t nào ñó không ñư c phép, nguyên nhân ng t tương ng không th t o ra m t ng t nhưng ph n m m v n có th ki m tra c ng t ñó. L y thí d b ñ nh th i và port n i ti p trong hai chương trư c s d ng các c ng t m t cách r ng rãi dù không có ng t tương ng x y ra, nghĩa là không s d ng các ng t. Ng t do port n i ti p là k t qu OR c a c ng t khi thu RI (c ng t thu) và c ng t khi phát TI (c ng t phát). Giáo trình Vi x lý. 182 Biên so n: Ph m Quang Trí
  7. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. C u trúc ng t c a 8051: IV. X LÝ NG T VÀ CÁC VECTƠ NG T: 1. Qui trình x lý ng t: Các thao tác s x y ra khi có m t ng t xu t hi n và nó ñư c CPU ch p nh n: • Hoàn t t th c thi l nh t i th i ñi m ñó và d ng chương trình chính. • Giá tr c a thanh ghi PC ñư c c t vào stack. • Tr ng thái c a ng t t i th i ñi m ñó ñư c lưu gi l i. • Các ng t ñư c gi l i m c ng t. • ð a ch c a ISR c a ng t tương ng ñư c n p vào thanh ghi PC. • ISR c a ng t tương ng ñư c th c thi. (ISR th c thi xong khi g p l nh RETI). • Giá tr trong stack (c a PC cũ) ñư c ph c h i l i vào thanh ghi PC. • Tr ng thái các ng t ñư c ph c h i l i. • Chương trình chính ti p t c ñư c th c thi t i ch b t m d ng. ISR ñư c th c thi ñ ñáp ng công vi c c a ng t. Vi c th c thi ISR k t thúc khi g p l nh RET (tr v t m t trình ph c v ng t). L nh này l y l i giá tr cũ c a b ñ m chương trình PC t stack và ph c h i tr ng thái c a ng t cũ. Vi c th c thi chương trình chính ñư c ti p t c nơi b t m ngưng. Giáo trình Vi x lý. 183 Biên so n: Ph m Quang Trí
  8. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. 2. Các vectơ ng t: Khi m t ng t ñư c ch p nh n, giá tr ñư c n p cho b ñ m chương trình PC ñư c g i là vectơ ng t. Vectơ ng t là ñ a ch b t ñ u c a chương trình ph c v ng t (ISR) c a ng t tương ng. Vectơ reset h th ng cũng ñư c xem như là m t ng t: chương trình chính b ng t và b ñ m chương trình PC ñư c n p giá tr m i. Khi m t trình ph c v ng t ñư c tr ñ n, c gây ra ng t s t ñ ng b xóa v 0 b i ph n c ng. Các ngo i l bao g m các c RI và TI ñ i v i các ng t do port n i ti p, các nguyên nhân ng t thu c lo i này do có hai kh năng t o ra ng t nên trong th c t CPU không xóa c ng t. B ng qui ñ nh ñ a ch b t ñ u c a các ISR (b ng vectơ ng t): V. THI T K CÁC CHƯƠNG TRÌNH S D NG NG T: 1. T ng quan: Khi thi t k các chương trình không s d ng ng t thì ta s g p ph i nh ng trư ng h p CPU hoàn toàn tiêu phí th i gian vào vi c ch ñ i các tác nhân c n thi t x y ra (Ví d : s tràn c a c TF0, TF1; vi c thu xong m t d li u và c RI=1; vi c phát xong m t ký t và c TI=1; v.v…) ñ sau ñó m i ti p t c th c hi n công vi c. ⇒ ði u này không thích h p cho các ng d ng ñi u khi n ñòi h i ph i tác ñ ng qua l i v i nhi u thi t b cùng lúc. ð gi i quy t v n ñ trên ta c n thi t k các chương trình có s d ng ñ n ng t. ⇒ Vì nó giúp cho CPU không t n th i gian ñ ch ñ i tác nhân mà ch khi nào tác nhân x y ñ n thì CPU m i th c hi n vi c x lý tác nhân ñó, kho ng th i gian tác nhân không x y ra thì CPU s làm vi c khác. Giáo trình Vi x lý. 184 Biên so n: Ph m Quang Trí
  9. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. T ch c b nh khi s d ng ng t: Khuông m u cho m t chương trình có s d ng ng t: ORG 0000H ;ði m nh p c a reset h th ng. LJMP MAIN ;L nh nh y ñ vư t qua các ISR. ……………… ;ði m nh p c a các ISR. ……………… ……………… ORG 0030H ;ði m nh p c a chương trình chính. MAIN: ……………… ;Chương trình chính b t ñ u. ……………… ……………… END 2. Thi t k các chương trình ISR kích thư c nh : ði u ki n: Khi ISR có kích thư c không quá 8 byte (k c l nh RETI). ⇒ ISR ph i ñư c vi t trong ph m vi ñi m nh p tương ng c a nó trong b nh chương trình (xem ph n t ch c b nh khi s d ng ng t). Lưu ý: • N u ch có m t nguyên nhân ng t ñư c s d ng thì ISR c a nó có th ñư c vi t tràn sang ñi m nh p c a các ISR khác (nghĩa là ISR có kích thư c l n hơn 8 byte, nhưng ph i nh hơn 46 byte). Vì khi ñó vùng nh c a các ISR khác không ñư c dùng ñ n nên ta có th t n d ng ñ s d ng cho ISR này. • N u có nhi u nguyên nhân ng t ñư c s d ng thì ta ph i c n th n ñ ñ m b o cho các ISR ñư c b t ñ u ñúng v trí mà không tràn sang ISR k (nghĩa là ISR có kích thư c không quá 8 byte). Giáo trình Vi x lý. 185 Biên so n: Ph m Quang Trí
  10. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. Khuông m u chương trình: (Ví d : dùng ng t Timer0 và ng t ngoài 1) ORG 0000H ;ði m nh p c a reset h th ng. LJMP MAIN ;L nh nh y ñ vư t qua các ISR. ORG 000BH ;ði m nh p cho ISR c a Timer 0. ……………… ;ISR c a Timer 0. ……………… RETI ;K t thúc ISR c a Timer 0. ORG 0013H ;ði m nh p cho ISR c a ng t ngoài 1. ……………… ;ISR c a ng t ngoài 1. ……………… RETI ;K t thúc ISR c a ng t ngoài 1. ORG 0030H ;ði m nh p c a chương trình chính. MAIN: ……………… ;Chương trình chính b t ñ u. ……………… ……………… END 3. Thi t k các chương trình ISR kích thư c l n: ði u ki n: Khi ISR có kích thư c vư t quá 8 byte. ⇒ ISR không th vi t vào ñi m nh p tương ng c a nó trong b nh chương trình (vì kích thư c ñi m nh p ch có 8 byte) → ta ph i chuy n ISR này ñ n m t nơi khác trong b nh chương trình ho c có th vi t l n qua ñi m nh p c a ISR k ti p (n u ISR ñó không s d ng). Khuông m u chương trình: (Ví d : dùng ng t Timer0 và ng t ngoài 1) ORG 0000H ;ði m nh p c a reset h th ng. LJMP MAIN ;L nh nh y ñ vư t qua các ISR. ORG 000BH ;ði m nh p cho ISR c a Timer 0. LJMP T0ISR ;L nh nh y ñ n ISR c a Timer 0. ORG 0013H ;ði m nh p cho ISR c a ng t ngoài 1. LJMP EX1ISR ;L nh nh y ñ n ISR c a ng t ngoài 1. ORG 0030H ;ði m nh p c a chương trình chính. MAIN: ……………… ;Chương trình chính b t ñ u. ……………… ……………… SJMP $ ;L nh cách ly chương trình. T0ISR: ……………… ;ISR c a ng t Timer 0. ……………… RETI ;K t thúc ISR c a Timer 0. EX1ISR: ……………… ;ISR c a ng t ngoài 1. ……………… RETI ;K t thúc ISR c a ng t ngoài 1. END Giáo trình Vi x lý. 186 Biên so n: Ph m Quang Trí
  11. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. • Nh n xét t ng quát: o ð ñơn gi n, các chương trình c a chúng ta ch làm vi c th i ñi m b t ñ u. Chương trình chính kh i ñ ng port n i ti p, b ñ nh th i và các thanh ghi ng t sao cho thích h p v i yêu c u ñ t ra và r i không làm gì c . Công vi c hoàn toàn ñư c th c hi n bên trong các ISR. Sau các l nh kh i ñ ng, chương trình chính ch a và th c hi n l nh sau ñây (l nh nh y t i ch – không làm gì c ): SJMP $ o Khi có m t tín hi u ng t xu t hi n, chương trình chính t m th i b d ng l i trong khi ISR ñư c th c thi. L nh RETI cu i c a các ISR s tr ñi u khi n v cho chương trình chính và chương trình chính ti p t c không làm gì c (l nh nh y t i ch ). ði u này không có gì là không t nhiên ñ i v i chúng ta. Trong nhi u ng d ng hư ng ñi u khi n, ph n l n công vi c ñư c th c hi n trong trình ph c v ng t. Các ví d minh h a dư i ñây s cho ta th y ñi u này. VI. CÁC VÍ D MINH H A: 1. Ví d minh h a x lý ng t Timer: Ví d 1: Vi t chương trình s d ng Timer 0 và các ng t ñ t o ra m t sóng vuông có t n s 10 KHz trên chân P1.0, fOsc = 12MHz. Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 000BH ;ði m nh p ISR c a Timer 0. T0ISR: ;ISR c a Timer 0. CPL P1.0 ;L y bù. RETI ;K t thúc ISR c a Timer 0. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV TMOD, #02H ;Ch n ch ñ 2 cho Timer 0. MOV TH0, #(-50) ;ð nh th i 50 s. SETB TR0 ;Cho Timer 0 ho t ñ ng. MOV IE, #82H ;Cho phép ng t Timer 0 . SJMP $ ;Không làm gì (nh y t i ch ). END ;K t thúc chương trình. Lưu ý: L nh SJMP$ có th ñư c thay th b ng m t ño n l nh ñ th c thi nh ng công vi c khác. Vi c thay th này không nh hư ng gì ñ n vi c t o sóng vuông f=10KHz t i chân P1.0. Vì c sau m i 50 s thì nh ng công vi c ñó s b t m d ng (ng t Timer 0 xu t hi n) ñ CPU th c hi n vi c t o sóng vuông r i quay v th c hi n ti p nh ng công vi c ñó. Ngay sau khi reset h th ng, b ñ m chương trình PC ñư c n p 0000H. L nh ñ u tiên ñư c th c thi là LJMP MAIN, l nh này r nhánh ñ n chương trình chính ñ a ch 0030H trong b nh chương trình. Ba l nh ñ u tiên c a chương trình chính s kh i ñ ng Timer 0 ch ñ 8 bit t ñ ng n p l i (Mode 2), sao cho Timer 0 s tràn sau m i 50 s. L nh MOV IE, #82H cho phép các ng t do Timer0 t o ra. M i m t l n tràn, Timer s t o ra m t ng t. Dĩ nhiên là l n tràn ñ u tiên s không xu t hi n sau Giáo trình Vi x lý. 187 Biên so n: Ph m Quang Trí
  12. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. 50 s do chương trình chính ñang trong vòng l p “không làm gì”. Khi ng t xu t hi n sau m i 50 s, chương trình chính b ng t và ISR cho Timer0 ñư c th c thi. ví d trên ISR này ch ñơn gi n l y bù bit c a port và quay tr v chương trình chính nơi vòng l p “không làm gì” ñư c th c thi ñ ch m t ng t m i sau m i 50 s. Lưu ý là c tràn TF0 không c n ñư c xóa b i ph n m m do khi các ng t ñư c cho phép thì c này t ñ ng ñư c xóa b i ph n c ng khi CPU tr ñ n trình ph c v ng t. Ví d 2: Vi t chương trình s d ng các ng t ñ t o ñ ng th i các d ng sóng vuông có t n s 7 KHz và 500 Hz t i các chân P1.7 và P1.6 (không quan tâm ñ n ñ l ch pha c a hai sóng này), fOsc = 12MHz. Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 000BH ;ði m nh p ISR c a Timer 0. LJMP T0ISR ;L nh nh y ñ n ISR Timer 0. ORG 001BH ;ði m nh p ISR c a Timer 1. LJMP T1ISR ;L nh nh y ñ n ISR Timer 1. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV TMOD, #12H ;Ch n ch ñ 2 cho Timer 0. ;Ch n ch ñ 1 cho Timer 1. MOV TH0, #-71 ;ð nh th i 71 s. SETB TR0 ;Cho Timer 0 ho t ñ ng. SETB TF1 ;Bu c Timer 1 ng t. MOV IE, #8AH ;Cho phép các ng t ho t ñ ng. SJMP $ ;Không làm gì (nh y t i ch ). T0ISR: ;ISR c a ng t Timer 0. CPL P1.7 ;L y bù. RETI ;K t thúc ISR c a Timer 0. T1ISR: ;ISR c a ng t Timer 1. CLR TR1 ;D ng Timer 1. MOV TH1, #HIGH(-1000) ;ð nh th i 1ms. MOV TL1, #LOW(-1000) SETB TR1 ;Cho Timer 1 ho t ñ ng. CPL P1.6 ;L y bù. RETI ;K t thúc ISR c a Timer 1. END ;K t thúc chương trình. Giáo trình Vi x lý. 188 Biên so n: Ph m Quang Trí
  13. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. Lưu ý: L nh SJMP$ có th ñư c thay th b ng m t ño n l nh ñ th c thi nh ng công vi c khác. Vi c thay th này không nh hư ng gì ñ n vi c t o sóng vuông f = 7KHz và f = 500Hz t i chân P1.7 và chân P1.6. Vì c sau m i 71 s và 1ms thì nh ng công vi c ñó s b t m d ng (ng t Timer 0 và ng t Timer 1 xu t hi n) ñ CPU th c hi n vi c t o sóng vuông r i quay v th c hi n ti p nh ng công vi c ñó. Vi c t h p các ngõ ra này r t khó t o ra ñư c trên m t h th ng không s d ng ñi u khi n ng t. Timer 0 ho t ñ ng ch ñ 2, ñư c s d ng ñ t o ra d ng sóng 7 KHz trên chân P1.7. Timer 1 ho t ñ ng ch ñ 1, ñư c s d ng ñ t o ra d ng sóng 500 Hz trên chân P1.6. S dĩ trong trư ng h p này, Timer 1 ph i ñư c thi t l p ñ ho t ñ ng ch ñ 1 là do d ng sóng 500Hz yêu c u th i gian m c cao và th i gian m c th p là 1ms, ch ñ 2 không s d ng ñư c trong trư ng h p này. Cũng c n chú ý là các thanh ghi TH1/TL1 không ñư c kh i ñ ng ñ u chương trình chính như trư ng h p c a thanh ghi TH0. Do TH1/TL1 ph i ñư c n p l i sau m i l n b ñ nh th i tràn, TF1 ñư c set b ng 1 trong chương trình chính b i ph n m m (l nh SETB TF1) ñư c s d ng ñ bu c ph i có m t ng t ban ñ u ngay trư c khi các ng t ñư c cho phép. ði u này có hi u qu cho vi c b t ñ u d ng sóng 500Hz. Ví d 3: Vi t chương trình liên t c nh n d li u 8 bit c ng P0 và sau ñó g i d li u này ñ n c ng P1. Trong th i gian này c n t o ra trên chân P2.1 m t sóng vuông có chu kỳ là 200 s. S d ng Timer 0 ñ t o sóng vuông, fOsc = 11,0592MHz. Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 000BH ;ði m nh p ISR c a Timer 0. CPL P2.1 ;ð o tr ng thái chân P2.1, t o xung. RETI ;K t thúc ISR c a Timer 0. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV TMOD, #02H ;Ch n ch ñ 2 cho Timer 0. MOV P0, #0FFH ;C u hình Port 0 là c ng vào. MOV TH0, #(-92) ;ð nh th i 100 s (n a chu kỳ). MOV IE, #82H ;Cho phép ng t Timer 0 ho t ñ ng. SETB TR0 ;Cho Timer 0 ho t ñ ng. BACK: MOV A, P0 ;Nh n d li u t P0. MOV P1, A ;Xu t d li u v a nh n ñư c ra P1. SJMP BACK END ;K t thúc chương trình. Giáo trình Vi x lý. 189 Biên so n: Ph m Quang Trí
  14. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. Ví d 4: Vi t chương trình liên t c nh n d li u 8 bit c ng P0 và sau ñó g i d li u này ñ n c ng P1. Trong th i gian này c n t o ra trên chân P2.1 m t sóng vuông v i yêu c u: th i gian sóng m c cao là 1085 s và th i gian sóng m c th p là 15 s. S d ng Timer 1 ñ t o sóng vuông, fOsc=11,0592MHz. T tH tL 1085 s 15 s 8051 11,0592MHz P2.1 T = 200 s P0.0 P1.0 DATA 8 BIT DATA 8 BIT P0.7 P1.7 Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 001BH ;ði m nh p ISR c a Timer 1. LJMP T1ISR ;L nh nh y ñ n ISR Timer 1. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV TMOD, #10H ;Ch n ch ñ 1 cho Timer 1. MOV P0, #0FFH ;C u hình Port 0 là c ng vào. MOV TL1, #18H ;ð nh th i 1085 s (cho n a chu kỳ ñ u). MOV TH1, #0FCH ; MOV IE, #88H ;Cho phép ng t Timer 1 ho t ñ ng. SETB TR1 ;Cho Timer 1 ho t ñ ng. BACK: MOV A, P0 ;Nh n d li u t P0. MOV P1, A ;Xu t d li u v a nh n ñư c ra P1. SJMP BACK ;L p l i liên t c hai thao tác trên. T1ISR: ;ISR c a ng t Timer 1. CLR TR1 ;D ng Timer 1. CLR P2.1 ;ð o tr ng thái chân P2.1, t o xung. MOV R2, #4 ;ð nh th i 8TMachine (t ng th i gian: 15 s), DJNZ R2, $ ;t o th i gian tr (cho n a chu kỳ sau). MOV TL1, #18H ;ð nh th i 1085 s (cho n a chu kỳ ñ u). MOV TH1, #0FCH ; SETB TR1 ;Cho Timer 1 ho t ñ ng. SETB P2.1 ;ð o tr ng thái chân P2.1, t o xung. RETI ;K t thúc ISR c a Timer 1. END ;K t thúc chương trình. Giáo trình Vi x lý. 190 Biên so n: Ph m Quang Trí
  15. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. 2. Ví d minh h a x lý ng t port n i ti p: Các ng t do port n i ti p xu t hi n khi c ng t phát TI ho c c ng t thu RI ñư c set b ng 1. M t ng t phát xu t hi n khi vi c phát m t ký t ñã ghi vào SBUF hoàn t t. M t ng t thu xu t hi n khi m t ký t ñư c thu nh n ñ y ñ và ñang trong SBUF ñ ch ñư c ñ c. Như v y, ng t phát x y ra khi b ñ m phát SBUF r ng, ng t thu x y ra khi b ñ m thu SBUF ñ y. Các ng t do port n i ti p có khác v i các ng t do b ñ nh th i. C gây ra ng t port n i ti p không ñư c xóa b i ph n c ng khi CPU tr t i trình ph c v ng t. Lý do là vì ñây ta có hai ngyên nhân t o ra ng t port n i ti p, c th là hai ng t t o ra b i hai c TI và RI. Nguyên nhân ng t ph i ñư c xác ñ nh trong trình ph c v ng t và c t o ra ng t ñư c xóa b i ph n m m. C n nh c l i là v i các ng t do b ñ nh th i, c t o ra ng t ñư c xóa b i ph n c ng khi CPU tr t i trình ph c v ng t. Ví d 1: Vi t chương trình s d ng các ng t ñ liên t c phát ñi mã ASCII (có giá tr t 20H ñ n 7EH) ñ n m t thi t b ñ u cu i n i v i 8051 qua port n i ti p. Bi t r ng fOsc=11,0592MHz. Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 0023H ;ði m nh p ISR port n i ti p. LJMP SPISR ;L nh nh y ñ n ISR port n i ti p. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV SCON, #42H ;Ch n ch ñ 1 cho port n i ;ti p, TI=1 ñ bu c có ng t ;và g i ký t ñ u tiên. MOV TMOD, #20H ;Ch n ch ñ 2 cho Timer 1. MOV TH1, #(-24) ;T c ñ baud = 1200. SETB TR1 ;Cho Timer 1 ho t ñ ng. MOV A, #20H ;N p mã cho ký t ñ u tiên. MOV IE, #90H ;Cho phép ng t port n i ti p. SJMP $ ;Không làm gì (nh y t i ch ). SPISR: ;ISR c a ng t port n i ti p. CJNE A, #7FH, SKIP ;Ki m tra k t thúc b ng mã. MOV A, #20H ;Tr l i ký t ñ u tiên. SKIP: MOV SBUF, A ;Truy n ký t ra port n i ti p. INC A ;L y mã c a ký t k ti p. CLR TI ;Xóa c ng t phát. RETI ;K t thúc ISR c a port n i ti p. END ;K t thúc chương trình. Lưu ý: L nh SJMP$ có th ñư c thay th b ng m t ño n l nh ñ th c thi nh ng công vi c khác. Vi c thay th này không nh hư ng gì ñ n vi c phát mã ASCII thông qua port n i ti p. Vì c sau m i l n port n i ti p truy n xong m t ký t thì nh ng công vi c ñó s b t m d ng (ng t port n i ti p xu t hi n) ñ CPU th c hi n vi c ki m tra ký t k t thúc b ng mã và l y mã c a ký t k ti p ñ ti p t c phát ñi r i quay v th c hi n ti p nh ng công vi c ñó. B ng mã ASCII bao g m 128 mã 7 bit (xem thêm trong ph n ph l c “Ph l c 4 – B ng mã ASCII”). Sau khi nh y ñ n nhãn MAIN ñ a ch 0030H, ba l nh ñ u tiên dùng kh i ñ ng Timer 1 ñ cung c p xung clock 1200 baud cho port n i ti p, l nh MOV SCON,#42H kh i ñ ng port n i ti p Giáo trình Vi x lý. 191 Biên so n: Ph m Quang Trí
  16. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. ch ñ 1 (UART 8 bit có t c ñ baud thay ñ i) và cho TI=1 ñ bu c t o ra m t ng t trư c khi các ng t ñư c cho phép ho t ñ ng. Sau ñó mã ASCII ñ u tiên (20H) ñư c n p cho thanh ghi A và các ng t do port n i ti p ñư c cho phép. Cu i cùng ph n chính c a chương trình ñi vào vòng l p “không làm gì” (t c là l nh SJMP $). Trình ph c v ng t c a port n i ti p làm t t c công vi c m t khi chương trình chính ñã thi t l p các ñi u ki n ban ñ u. Hai l nh ñ u tiên ki m tra thanh ghi A và n u mã ASCII ñ t ñ n 7FH (nghĩa là mã v a m i ñư c phát ñi là 7EH) thì thanh ghi A s ñư c thi t l p l i v i n i dung là 20H. Sau ñó mã ASCII ñư c g i ñ n b ñ m c a port n i ti p (l nh MOV SBUF,A) ñ ñư c phát ñi. Th c hi n vi c tăng giá tr trong thanh ghi A ñ có mã k ti p, c phát ñư c xóa (l nh CLR TI) và trình ph c v ng t k t thúc (l nh RETI). ði u khi n s tr v chương trình chính và l nh SJMP $ ñư c th c thi cho ñ n khi TI l i ñư c set b ng 1 cho l n phát d li u k ti p. N u ta so sánh t c ñ c a CPU v i t c ñ truy n d li u, ta nh n th y r ng l nh SJMP $ ñư c th c thi v i ph n trăm t l th i gian r t l n trong chương trình này. Ph n trăm t l này là bao nhiêu? t c ñ 1200 baud, m i m t bit ñư c truy n ñi trong m t kho ng th i gian là 0,8333ms. Như v y 8 bit d li u c ng v i 1 bit start, 1 bit stop (m t l n truy n m t d li u g m 10 bit) chi m 8,333ms. Th i gian th c thi t nh t c a trình ph c v ng t SPISR là t ng c a s chu kỳ cho m i l nh nhân v i 1,085 s (t c 1TMachine), th i gian này tính ñư c là 8 x 1,085 s = 8,68 s. Do v y, v i 8333 s dùng ñ truy n m t d li u mà ch có 8,68 s dành cho trình ph c vu ng t SPISR. L nh SJMP $ th c thi trong kho ng th i gian 8333 s - 8,68 s = 8324,32 s t c là kho ng 99,9% th i gian. Do v y ng t c n ñư c s d ng ñ có th lo i b ñư c kho ng th i gian “không làm gì” này (chi m ñ n 99,9% th i gian ho t ñ ng c a chương trình truy n d li u này. Mu n v y thì l nh SJMP $ có th ñư c thay b i các l nh khác ñ th c hi n nh ng công vi c khác theo yêu c u c a ng d ng. Các ng t v n xu t hi n và các ký t v n ñư c phát t port n i ti p sau m i 8,333ms. Ví d 2: Vi t chương trình ñi u khi n 8051 ñ c d li u t c ng P1 và ghi liên t c t i c ng P2. ð ng th i ñưa m t b n sao d li u t i port n i ti p ñ th c hi n vi c truy n d li u n i ti p. Bi t r ng t c ñ truy n là 9600 baud và fOsc = 11,0592MHz Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 0023H ;ði m nh p ISR port n i ti p. LJMP SPISR ;L nh nh y ñ n ISR port n i ti p. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV P1, #0FFH ;C u hình Port 1 là c ng vào. MOV SCON, #42H ;Ch n ch ñ 1 cho port n i ti p, c m thu. MOV TMOD, #20H ;Ch n ch ñ 2 cho Timer 1. MOV TH1, #(-3) ;T c ñ baud = 9600. MOV IE, #90H ;Cho phép ng t port n i ti p. SETB TR1 ;Cho Timer 1 ho t ñ ng. BACK: MOV A, P1 ;ð c d li u t P1. MOV P2, A ;Xu t d li u nh n ñư c ra P2. SJMP BACK ;L p l i các thao tác trên. SPISR: ;ISR c a ng t port n i ti p. CLR TI ;Xóa c ng t phát TI. MOV SBUF, A ;Xu t d li u nh n ñư c ra port n i ti p. Giáo trình Vi x lý. 192 Biên so n: Ph m Quang Trí
  17. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. RETI ;K t thúc ISR c a port n i ti p. END ;K t thúc chương trình. Ví d 3: Vi t chương trình ñi u khi n 8051 ñ c d li u t c ng P1 và ghi liên t c t i c ng P2. Trong khi ñó d li u nh n ñư c t port n i ti p thì ñư c g i ñ n c ng P0. Bi t r ng t c ñ truy n là 9600 baud và fOsc = 11,0592MHz Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 0023H ;ði m nh p ISR port n i ti p. LJMP SPISR ;L nh nh y ñ n ISR port n i ti p. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV P1, #0FFH ;C u hình Port 1 là c ng vào. MOV SCON, #52H ;Ch n ch ñ 1 cho port n i ti p. MOV TMOD, #20H ;Ch n ch ñ 2 cho Timer 1. MOV TH1, #(-3) ;T c ñ baud = 9600. MOV IE, #90H ;Cho phép ng t port n i ti p. SETB TR1 ;Cho Timer 1 ho t ñ ng. BACK: MOV A, P1 ;ð c d li u t P1. MOV P2, A ;Xu t d li u nh n ñư c ra P2. SJMP BACK ;L p l i các thao tác trên. SPISR: ;ISR c a ng t port n i ti p. CLR RI ;Xóa c ng t thu RI. MOV A, SBUF ;Nh n d li u t port n i ti p. MOV P0, A ;Xu t d li u nh n ñư c ra P0. RETI ;K t thúc ISR c a port n i ti p. END ;K t thúc chương trình. Ví d 4: Vi t chương trình có s d ng các ng t ñ th c hi n các c ng vi c sau: • Nh n d li u t port n i ti p, sau ñó thì g i d li u này ñ n c ng P0. • Nh n d li u t c ng P1, sau ñó thì g i d li u này ñ n port n i ti p và c ng P2. • S d ng Timer 0 ñ t o sóng vuông có t n s 5KHz t i P0.1. Bi t r ng t c ñ truy n là 4800 baud và fOsc = 11,0592MHz Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 000BH ;ði m nh p ISR Timer 0. CPL P0.1 ;L y bù chân P1.0, t o xung. RETI ;K t thúc ISR c a port n i ti p. ORG 0023H ;ði m nh p ISR port n i ti p. LJMP SPISR ;L nh nh y ñ n ISR port n i ti p. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV P1, #0FFH ;C u hình Port 1 là c ng vào. Giáo trình Vi x lý. 193 Biên so n: Ph m Quang Trí
  18. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. MOV SCON, #52H ;Ch n ch ñ 1 cho port n i ti p. MOV TMOD, #22H ;Ch n ch ñ 2 cho Timer 0, Timer 1. MOV TH1, #(-6) ;T c ñ baud = 4800. MOV TH0, #(-92) ;ð nh th i 100 s (n a chu kỳ), f = 5KHz. MOV IE, #92H ;Cho phép ng t port n i ti p và Timer 0. SETB TR1 ;Cho Timer 1 ho t ñ ng. SETB TR0 ;Cho Timer 0 ho t ñ ng. BACK: MOV A, P1 ;ð c d li u t P1. MOV P2, A ;Xu t d li u nh n ñư c ra P2. SJMP BACK ;L p l i các thao tác trên. SPISR: JB TI, TRANS ;Ki m tra thu xong (RI) hay phát ;xong (TI), n u thu xong (RI = 1) thì: CLR RI ;Xóa c ng t thu RI. MOV A, SBUF ;Nh n d li u t port n i ti p. MOV P0, A ;Xu t d li u nh n ñư c ra P0. RETI ;K t thúc ISR c a port n i ti p. TRANS: ;N u phát xong (TI = 1) thì: CLR TI ;Xóa c ng t phát TI. MOV SBUF, A ;Xu t d li u nh n ñư c ra port n i ti p. RETI ;K t thúc ISR c a port n i ti p. END ;K t thúc chương trình. 3. Ví d minh h a x lý ng t ngoài: Ng t ngoài x y ra khi có m c th p ho c có c nh âm tác ñ ng lên chân INT0\ ho c chân INT1c a 8051. Khi m t ng t ngoài ñư c t o ra, c t o ra ng t (IE0 và IE1) ñư c xóa b i ph n c ng khi CPU tr ñ n trình ph c v ng t n u ng t thu c lo i tác ñ ng c nh âm, còn n u ng t thu c lo i tác ñ ng m c th p thì nguyên nhân ng t ngoài s ñi u khi n m c c a c thay vì là ph n c ng trên chip. Ví d 1: Vi t chương trình s d ng các ng t ñ thi t k b ñi u khi n lò nung sao cho nhi t ñ trong lò duy trì m c 120OC ± 5OC. Gi i Gi s ta dùng m ch giao ti p như hình bên dư i. Cu n dây ñi u khi n t t/m lò ñư c n i v i P1.7 sao cho: P1.7 = 1 thì m lò và P1.7 = 0 thì t t lò B c m bi n nhi t ñ ñư c n i v i INT0\ và INT1\, cung c p các tín hi u HOT\ và COLD\ như sau: HOT\ = 0 n u T > 125OC và COLD\ = 0 n u T < 115OC Chương trình s cho lò ho t ñ ng (m lò) khi T < 115OC và cho lò ngưng ho t ñ ng (t t lò) khi T > 125OC. Giáo trình Vi x lý. 194 Biên so n: Ph m Quang Trí
  19. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 0003H ;ði m nh p ISR ng t ngoài 0. EX0ISR: CLR P1.7 ;T t lò. RETI ;K t thúc ISR c a ng t ngoài 0. ORG 0013H ;ði m nh p ISR ng t ngoài 1. EX1ISR: SETB P1.7 ;M lò. RETI ;K t thúc ISR c a ng t ngoài 1. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. MOV IE, #85H ;Cho phép ng t ngoài 0 và 1. SETB IT0 ;Ng t ngoài kích kh i c nh âm. SETB IT1 ði u khi n t t/m lò tùy SETB P1.7 ;M lò. thu c tr ng thái nhi t ñ JB P3.2, SKIP ;N u t > 125OC. hi n t i c a lò. CLR P1.7 ;T t lò. SKIP: SJMP $ ;Không làm gì (nh y t i ch ). END ;K t thúc chương trình. Lưu ý: L nh SJMP$ có th ñư c thay th b ng m t ño n l nh ñ th c thi nh ng công vi c khác. Vi c thay th này không nh hư ng gì ñ n vi c ñi u khi n ho t ñ ng t t m lò theo nhi t ñ . Vì c sau m i l n có tín hi u tác ñ ng t c m bi n thì nh ng công vi c ñó s b t m d ng (ng t ngoài 0 và 1 xu t hi n) ñ CPU th c hi n vi c ñi u khi n t t m lò theo nhi t ñ qui ñ nh r i quay v th c hi n ti p nh ng công vi c ñó. Ba l nh ñ u tiên trong chương trình chính cho phép các ng t ngoài và xác ñ nh các ng t ngoài thu c lo i tác ñ ng c nh âm. Do tr ng thái hi n t i c a các ngõ vào HOT\ và COLD\ chưa bi t ñư c nên ba l nh ti p theo s ñi u khi n lò t t/m tùy thu c vào tr ng thái nhi t ñ hi n t i c a lò. Trư c tiên, lò ñư c m (l nh SETB P1.7) và ngõ vào HOT ñư c l y m u (l nh JB P3.2, SKIP). N u ngõ vào HOT m c cao, nghĩa là T < 125OC, thì l nh k ñư c b qua và lò v n ti p t c ñư c m . Ngư c l i, n u ngõ vào HOT m c th p, nghĩa là T > 125OC, thì l nh k ti p CLR P1.7 ñư c th c thi ñ t t lò trư khi ñi vào vòng l p “không làm gì”. Giáo trình Vi x lý. 195 Biên so n: Ph m Quang Trí
  20. Chương 6: Ho t ñ ng ng t (Interrupt). Trư ng ðH Công nghi p Tp.HCM. Ví d 2: Vi t chương trình s d ng các ng t ñ thi t k m t h th ng báo ñ ng t o âm thanh 400 Hz trong vòng 1 giây (s d ng m t loa ñư c n i v i chân P1.7) m i khi b c m bi n ñ t c a (n i v i chân INT0\) t o ra m t s chuy n tr ng thái t m c cao xu ng m c th p. Caûm bieán 1s 8051 Cöûa ñoùng Caûm bieán = 0 INT0 P1.7 Cöûa môû Caûm bieán = LOA 440 Hz P1.7 7404 2,5 ms Cöûa ra vaøo Gi i ORG 0000H ;ði m nh p reset. LJMP MAIN ;Nh y qua kh i các vectơ ng t. ORG 0003H ;ði m nh p ISR ng t ngoài 0. LJMP EX0ISR ;L nh nh y ñ n ISR ng t ngoài 0 ORG 000BH ;ði m nh p ISR c a Timer 0. LJMP T0ISR ;L nh nh y ñ n ISR Timer 0. ORG 001BH ;ði m nh p ISR c a Timer 1. LJMP T1ISR ;L nh nh y ñ n ISR Timer 1. ORG 0030H ;ði m nh p chương trình chính. MAIN: ;Chương trình chính b t ñ u. SETB IT0 ;Ng t ngoài kích kh i c nh âm. MOV TMOD, #11H ;Ch n ch ñ 1 cho Timer 0, 1. MOV IE, #81H ;Cho phép ng t ngoài 0. SJMP $ ;Không làm gì (nh y t i ch ). EX0ISR: ;ISR c a ng t ngoài 0. MOV R7, #20 ;20 l n x 50000 s = 1s. SETB TF0 ;Bu c Timer 0 ng t. SETB TF1 ;Bu c Timer 1 ng t. SETB ET0 ;Cho phép ng t Timer 0. SETB ET1 ;Cho phép ng t Timer 1. RETI ;K t thúc ISR c a ng t ngoài 0. T0ISR: ;ISR c a ng t Timer 0. CLR TR0 ;D ng Timer 0. DJNZ R7, SKIP ;Ki m tra ñ 20 l n (1 giây). CLR ET0 ;K t thúc phát âm n u ñ . CLR ET1 LJMP EXIT SKIP: MOV TH0, #HIGH(-50000) ;ð nh th i 0,05 s. MOV TL0, #LOW(-50000) SETB TR0 ;Cho Timer 0 ho t ñ ng. EXIT: RETI ;K t thúc ISR c a ng t Timer 0. Giáo trình Vi x lý. 196 Biên so n: Ph m Quang Trí
nguon tai.lieu . vn