Chương 6: Hoạt động ngắt (Interrupt)

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

0
216
lượt xem
98
download

Chương 6: Hoạt động ngắt (Interrupt)

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

Ngắt (interrupt) là sự xảy ra của một điều kiện – một sự kiện – làm cho chương trình hiện hành bị tạm ngưng trong khi điều kiện được phục vụ bởi một chương trình khác. 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ền khiển bởi ngắt cho ta ảo...

Chủ đề:
Lưu

Nội dung Text: Chương 6: Hoạt động ngắt (Interrupt)

  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 INT1\ c 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í

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản