Xem mẫu
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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í
- 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