of 28 /28
Ngắt trong 8051 Mục tiêu Kết thúc bài học này, bạn có thể: Phân biệt cơ chế ngắt với hỏi vòng Nắm rõ các loại ngắt trong 8051 Ngắt timer/counter Ngắt ngoài Ngắt truyền thông nối tiếp Lập trình các ngắt Trình phục vụ ngắt là gì? Cho phép ngắt và cấm ngắt Thiết lập mức ưu tiên của các ngắt Giới thiệu Ngắt (Interrupt) - như tên của nó, là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ ngắt (ISR: Interrupt Service Routine). Trong bài này ta tìm hiểu khái niệm ngắt và lập trình các ngắt trong bộ vi điều khiển 8051. 1. Các ngắt của 8051 1.1 Phân biệt cơ chế ngắt với hỏi vòng Lấy ví dụ: Bộ vi điều khiển đóng vai trò như một vị bác sĩ, các thiết bị kiểm soát bởi vi điều khiển được coi như các bệnh nhân cần được bác sĩ phục vụ. Bình thường, vị bác sĩ sẽ hỏi thăm lần lượt từng bệnh nhân, đến lượt bệnh nhân nào được hỏi thăm nếu có bệnh thì sẽ được bác sĩ phục vụ, xong lại đến lượt bệnh nhân khác, và

Ngắt trong 8051

Embed Size (px)

Text of Ngắt trong 8051

1. Ngt trong 8051 Mc tiu Kt thc bi hc ny, bn c th: Phn bit c ch ngt vi hi vng Nm r cc loi ngt trong 8051 Ngt timer/counter Ngt ngoi Ngt truyn thng ni tip Lp trnh cc ngt Trnh phc v ngt l g? Cho php ngt v cm ngt Thit lp mc u tin ca cc ngt Gii thiu Ngt (Interrupt) - nh tn ca n, l mt s s kin khn cp bn trong hoc bn ngoi b vi iu khin xy ra, buc vi iu khin tm dng thc hin chng trnh hin ti, phc v ngay lp tc nhim v m ngt yu cu nhim v ny gi l trnh phc v ngt (ISR: Interrupt Service Routine). Trong bi ny ta tm hiu khi nim ngt v lp trnh cc ngt trong b vi iu khin 8051. 1. Cc ngt ca 8051 1.1 Phn bit c ch ngt vi hi vng Ly v d: B vi iu khin ng vai tr nh mt v bc s, cc thit b kim sot bi vi iu khin c coi nh cc bnh nhn cn c bc s phc v. Bnh thng, v bc s s hi thm ln lt tng bnh nhn, n lt bnh nhn no c hi thm nu c bnh th s c bc s phc v, xong li n lt bnh nhn khc, v tip tc n ht. iu ny tng ng vi phng php thm d - hi vng (Polling) trong vi iu khin. C nh th, nu chng ta c 10 bnh nhn, th bnh nhn th 10 d mun hay khng cng phi xp hng ch i 09 bnh nhn trc . Gi s trng hp bnh nhn th 10 cn cp cu th sao? Anh ta s gp nguy cp trc khi n lt hi thm ca bc s mt! Nhng, nu anh ta s dng phng php ngt th mi chuyn s n ngay. Lc v bc s s ngng mi cng vic hin ti ca mnh, v tin hnh phc v trng hp khn cp ny ngay lp tc, xong vic bc s li tr v tip tc cng vic ang d. iu ny tng ng vi phng php ngt (Interrupts) trong vi iu khin. 2. Tr li vi b vi iu khin ca chng ta: 1 b vi iu khin c th phc v cho nhiu thit b, c 2 cch thc hin iu ny l s dng cc ngt (Interrupts) v thm d (polling): Trong phng php s dng ngt: mi khi c mt thit b bt k cn c phc v th n bo cho b vi iu khin bng cch gi mt tn hiu ngt. Khi nhn c tn hiu ngt th b vi iu khin ngng tt c nhng g n ang thc hin chuyn sang phc v thit b gi ngt. Chng trnh ngt c gi l trnh phc v ngt ISR (Interrupt Service Routine) hay cn gi l trnh qun l ngt (Interrupt handler). Sau khi phc v ngt xong, b vi x l li quay tr li im b ngt trc v tip tc thc hin cng vic. Trong phng php thm d: b vi iu khin kim tra lin tc tnh trng ca tt c cc thit b, nu thit b no c yu cu th n dng li phc v thit b . Sau n tip tc kim tra tnh trng ca thit b k tip cho n ht. Phng php thm d rt n gin, nhng n li rt lng ph thi gian kim tra cc thit b k c khi thit b khng cn phc v. Trong trng hp c qu nhiu thit b th phng n thm d t ra khng hiu qu, gy ra chm tr cho cc thit b cn phc v. im mnh ca phng php ngt l: B vi iu khin c th phc v c rt nhiu thit b (tt nhin l khng ti cng mt thi im). Mi thit b c th nhn c s ch ca b vi iu khin da trn mc u tin c gn cho n. i vi phng php thm d th khng th gn mc u tin cho cc thit b v n kim tra tt c mi thit b theo kiu hi vng. Quan trng hn, trong phng php ngt th b vi iu khin cn c th che (lm l) mt yu cu phc v ca thit b. iu ny li mt ln na khng th thc hin c trong phng php thm d. L do quan trng nht m phng php ngt c u chung l v n khng lng ph thi gian cho cc thit b khng cn phc v. Cn phng php thm d lm lng ph thi gian ca b vi iu khin bng cch hi d tng thit b k c khi chng khng cn phc v. V d trong cc b nh thi c bn n cc bi trc ta dng mt vng lp kim tra v i cho n khi b nh thi quay tr v 0. Trong v d , nu s dng ngt th ta khng cn bn tm n vic kim tra c b nh thi, do vy khng lng ph thi gian ch i, trong khi ta c th lm vic khc c ch hn. 1.2 Su ngt trong 8051 Thc t ch c 5 ngt dnh cho ngi dng trong 8051 nhng cc nh sn xut ni rng c 6 ngt v h tnh c lnh RESET. Su ngt ca 8051 c phn b nh sau: 3. 1. RESET: Khi chn RESET c kch hot t 8051, b m chng trnh nhy v a ch 0000H. y l a ch bt li ngun. 2. 2 ngt dnh cho cc b nh thi: 1 cho Timer0 v 1 cho Timer1. a ch tng ng ca cc ngt ny l 000BH v 001BH. 3. 2 ngt dnh cho cc ngt phn cng bn ngoi: chn 12 (P3.2) v 13 (P3.3) ca cng P3 l cc ngt phn cng bn ngoi INT0 v INT1 tng ng. a ch tng ng ca cc ngt ngoi ny l 0003H v 0013H. 4. Truyn thng ni tip: c 1 ngt chung cho c nhn v truyn d liu ni tip. a ch ca ngt ny trong bng vector ngt l 0023H. 1.3 Trnh phc v ngt i vi mi ngt th phi c mt trnh phc v ngt (ISR) hay trnh qun l ngt a ra nhim v cho b vi iu khin khi c gi ngt. Khi mt ngt c gi th b vi iu khin s chy trnh phc v ngt. i vi mi ngt th c mt v tr c nh trong b nh gi a ch ISR ca n. Nhm v tr b nh c dnh ring lu gi a ch ca cc ISR c gi l bng vector ngt. Xem Hnh 1. Hnh 1: Bng vector ngt ca 8051. Trong lp trnh C trn Keil c cho 8051, chng ta khai bo trnh phc v ngt theo cu trc sau: Void Name (void) interrupt X //( X: l s th t ca ngt ) { // chng trnh phc v ngt } Khi a ch ngt s c t ng tnh bng: Interrupt Address = (X * 8) + 3 4. 1.4 Quy trnh khi thc hin mt ngt Khi kch hot mt ngt b vi iu khin thc hin cc bc sau: N hon thnh nt lnh ang thc hin v lu a ch ca lnh k tip vo ngn xp. N cng lu tnh trng hin ti ca tt c cc ngt. N nhy n mt v tr c nh trong b nh c gi l bng vector ngt, ni lu gi a ch ca mt trnh phc v ngt. B vi iu khin nhn a ch ISR t bng vector ngt v nhy ti . N bt u thc hin trnh phc v ngt cho n lnh cui cng ca ISR v tr v chng trnh chnh t ngt. Khi b vi iu khin quay tr v ni n b ngt. Trc ht n nhn a ch ca b m chng trnh PC t ngn xp bng cch ko 02 byte trn nh ca ngn xp vo PC. Sau bt u thc hin tip cc lnh t a ch . 1.5 Cc bc cho php v cm ngt Khi bt li ngun th tt c mi ngt u b cm (b che), c ngha l khng c ngt no c b vi iu khin p ng tr khi chng c kch hot. Cc ngt phi c kch hot bng phn mm b vi iu khin p ng chng. C mt thanh ghi c gi l thanh ghi cho php ngt IE (Interrupt Enable) a ch A8H chu trch nhim v vic cho php v cm cc ngt. Hnh 2 trnh by chi tit v thanh ghi IE. Hnh 2: Thanh ghi cho php ngt IE. cho php mt ngt ta phi thc hin cc bc sau: 5. Nu EA = 0 th khng c ngt no c p ng cho d bit tng ng ca n trong IE c gi tr cao. Bit D7 - EA ca thanh ghi IE phi c bt ln cao cho php cc bit cn li ca thanh ghi hot ng c. Nu EA = 1 th tt c mi ngt u c php v s c p ng nu cc bit tng ng ca chng trong IE c mc cao. hiu r im quan trng ny ta hy xt v d 1. V d 1: Hy lp trnh cho 8051: a) cho php ngt ni tip, ngt Timer0 v ngt phn cng ngoi 1 (EX1) b) cm ngt Timer0 c) sau trnh by cch cm tt c mi ngt ch bng mt lnh duy nht. Li gii: #include main() { //a) IE=0x96; //1001 0110: lnh ny tng ng vi 4 lnh pha di EA=1; //Cho php s dng ngt ES=1; //Cho php ngt cng ni tip ET0=1; //Cho php ngt timer0 EX1=1; //Cho php ngt ngoi 1 //b) ET0=0; //Cm ngt timer0 //c) EA=0; //Cm tt c cc ngt while(1) { //Chng trnh chnh // } } 2. Lp trnh cc ngt b nh thi 6. Trong cc bi trc ta bit cch s dng cc b nh thi Timer0 v Timer1 bng phng php thm d. Trong phn ny ta s s dng cc ngt lp trnh cho cc b nh thi ca 8051. 2.1 C quay v 0 ca b nh thi v ngt Chng ta bit rng c b nh thi TF c bt ln cao khi b nh thi t gi tr cc i v quay v 0 (Roll - over). Trong cc bi trc chng ta cng ch ra cch kim tra c TF bng mt vng lp. Trong khi thm d c TF th ta phi i cho n khi c TF c bt ln. Vn vi phng php ny l b vi iu khin b tri buc trong khi ch c TF c bt v khng th lm c bt k vic g khc. S dng cc ngt s gii quyt c vn ny v trnh c s tri buc b vi iu khin. Nu b ngt nh thi trong thanh ghi IE c php th mi khi n quay tr v 0 b vi iu khin s b ngt, bt chp n ang thc hin vic g v nhy ti bng vector ngt phc v ISR. Bng cch ny th b vi iu khin c th lm nhng cng vic khc cho n khi n c thng bo rng b nh thi quay v 0. Xem hnh 3 v v d 2. Hnh 3: Ngt b nh thi TF0 v TF1. V d 2: Hy vit chng trnh nhn lin tc d liu 8 Bit cng P0 v gi n n cng P1 trong khi n cng lc to ra mt sng vung chu k 200s trn chn P2.1. Hy s dng b Timer0 to ra sng vung, tn s ca 8051 l XTAL = 11.0592MHz. Li gii: Chu k 200s, vy na chu k l 100s. Ta c: 100s/1,085s=92. Suy ra gi tr cn np cho timer0 l: -92 A4H. Ta s dng timer0 8 bit. #include //khai bo thu vin cho VK 89x51 main() { TMOD=0x02; //chn timer0, ch 2, 8Bit t np li TL0=0xA4; //np gi tr cho TL0 TH0=0xA4; //np gi tr cho TH0 TR0=1; //khi ng timer0 7. IE=0x82; //cho php ngt timer0 while(1) //vng lp v hn { P1=~P0; //Cp nht gi tr cho cng P1 t P0. } } void songvuong(void) interrupt 1 //Khai bo trnh phc v ngt cho timer0 { TR0=0; //Ngng timer0 P2_1=~P2_1; //o trng thi chn P2_1. TR0=1; //Khi ng timer0 //Khng cn xa c TF0, 8051 t ng xa. } Hnh 4: M phng trn proteus: cp nht lin tc cng P1 t P0, trong khi to xung chn P2.1 8. Hnh 5: Sng vung hin th trn Oscilloscope Hy nhng im di y ca chng trnh trong v d 2: 1. Chng ta cho php ngt b Timer0 vi lnh IE=0x82; trong chng trnh chnh main(). 2. Trong khi d liu cng P0 c nhn vo v chuyn lin tc sang cng P1 th mi khi b Timer0 tr v 0, c TF0 c bt ln v b vi iu khin thot ra khi hm main() v i n a ch 000BH thc hin ISR gn lin vi b Timer0. 3. Trong trnh phc v ngt ISR ca Timer0 ta thy rng khng cn n lnh xa c TF0 ca timer0. L do ny l v 8051 t xo c TF0 ngay khi thot khi ISR. V d 3: Hy vit li chng trnh v d 2 to sng vung vi mc cao ko di 1085s v mc thp di 15s vi gi thit tn s XTAL = 11.0592MHz. Hy s dng b nh thi Timer1. Li gii: V 1085s/1.085s=1000 nn ta cn s dng ch 1 ca b nh thi Timer1. Cc gi tr cn np cho timer1 l: 1085/1.085=1000 , -1000FC18H 15/1.085=14 , -14FFF2H #include bit a=0; main() { TMOD=0x10; //chn timer1, ch 1, 16Bit TL1=0x18; //np gi tr cho TL1 TH1=0xFC; //np gi tr cho TH1 TR1=1; //khoi dong timer1 IE=0x88; //cho php ngat timer1 while(1) //vng lp v hn { P1=~P0; //Cp nht cng P1 } } void songvuong(void) interrupt 3 //Khai bo trnh phc v ngt timer1 { TR1=0; //Dng timer1 if(a==0) //Nu Xung vung ang mc thp { P2_1=1; //Bt xung vung ln cao a=1; //t li bit kim tra TL1=0x18; //Np li TL1: ng vi mc tr phn cao 9. TH1=0xFC; //Np li TH1 } Else //Nu Xung vung ang mc cao { P2_1=0; //Lt xung xung thp a=0; //t li bit kim tra TL1=0xF2; //Np li TL1: ng vi mc tr phn thp TH1=0xFF; //Np li TH1 } TR1=1; //Khi ng li timer1 //Khng cn xa c TF1, 8051 t ng xa } Hnh 6: Sng vung hin th trn Oscilloscope Lu : Cc xung c to ra cc v d trn khng tht s chnh xc, v cha tnh n hao ph ca cc lnh ci t. 3 Lp trnh cc ngt phn cng bn ngoi B vi iu khin 8051 c 2 ngt phn cng bn ngoi chn 12 (P3.2) v chn 13 (P3.3) gi l ngt INT0 v INT1. Nh ni trn th chng c php v b cm bng vic s dng thanh ghi IE. Nhng cu hnh cho ngt ngoi c phn phc tp hn.C hai mc kch hot cho cc ngt phn cng ngoi: Ngt theo mc v ngt theo sn. 10. Hnh 7: Ngt ngoi INT0 v INT1 Di y l m t hot ng ca mi loi. 3.1 Ngt theo mc ch ngt theo mc th cc chn INT0 v INT1 bnh thng mc cao v nu mt tn hiu mc thp c cp ti th chng ghi nhn ngt. Sau b vi iu khin dng tt c mi cng vic n ang thc hin v nhy n bng vector ngt phc v ngt. y l ch ngt mc nh khi cp ngun cho 8051. Tn hiu mc thp ti chn INTx phi c ly i trc khi thc hin lnh cui cng ca trnh phc v ngt, nu khng mt ngt khc s li c to ra, v vi iu khin s thc hin ngt lin tc. r hn chng ta hy xem v d 4. V d 4: Gi s chn INT1 c ni n cng tc bnh thng mc cao. Mi khi n n xung thp phi bt mt n LED chn P1.3 (bnh thng Led tt), khi n c bt ln n phi sng vi giy. Chng no cng tc c gi trng thi thp n LED phi sng lin tc. Li gii: #include //Khai bo th vin cho VK 89x51 main() //Chng trnh chnh { IE=0x84; //cho php ngt ngoi 1 11. while(1) //vng lp v hn { //khng lm g } } void nutan(void) interrupt 2 //Khai bo trnh phc v ngt ngoi 1 { //(mc nh l ngt theo mc) int a=50000; //Bin m tr P1_3=0; //Cho Led sng while(a--){} //Tr cho Led sng vi giy P1_3=1; //Tt Led //Khng cn xa c ngt } Hnh 8: n cng tc xung s lm cho n LED sng mt thi gian. Hnh 9: Nhng nu cng tc c gi trng thi n th n LED sng lin tc. 12. Lu : Trong chng trnh trn b vi iu khin quay vng lin tc trong vng lp while(1) ca chng trnh chnh. Mi khi cng tc trn chn P3.3 (INT1) c kch hot th b vi iu khin thot khi vng lp v nhy n bng vector ngt ti a ch 0013H. Trnh ISR cho INT1 bt n LED ln gi n mt lc v tt n trc khi tr v. Nu trong lc n thc hin lnh cui cng quay tr v t ISR m chn INT1 vn cn mc thp th b vi iu khin khi to li ngt, ngt li xy ra 1 ln na. Do vy, gii quyt vn ny th chn INT1 phi c a ln cao trc thi im lnh cui cng ca ngt c thc hin. C mt cch khc gii quyt trit vn trn: l s dng ngt theo sn. Khi vi mi 1 ln n phm, d th no ngt cng ch thc hin 1 ln. Trc khi tm hiu ngt theo sn l g? Ta hy xem qua ngt theo mc hot ng nh th no. Trch mu ngt theo mc Cc chn P3.2 v P3.3 bnh thng c dng cho vo/ra nu cc Bit INT0 v INT1 trong thanh ghi IE khng c kch hot. Sau khi cc ngt phn cng trong thanh gi IE c kch hot th b vi iu khin duy tr trch mu trn chn INTx i vi tn hiu mc thp 1 ln trong 1 chu trnh my. Theo bng d liu t nh sn xut ca b vi iu khin th chn ngt phi c gi mc thp cho n khi bt u thc hin trnh phc v ngt ISR. Nu chn INTx c a tr li mc cao trc khi bt u thc hin ISR th s chng c ngt no xy ra. Do vy, bo m vic kch hot ngt phn cng ti cc chn INTx phi m bo rng thi gian tn ti tn hiu mc thp l khong 4 chu trnh my v khng c b hn, nu khng lu th ngt khng c thc hin. Tuy nhin trong qu trnh kch hot ngt theo mc thp nn n li phi a ln mc cao trc khi ISR thc hin lnh cui cng v li theo bng d liu t nh sn xut th nu chn INTx vn mc thp sau lnh cui cng ca trnh phc v ngt th mt ngt khc li s c kch hot. iu ny do mt thc t l ngt theo mc khng c cht. Hnh 10: Thi gian ti thiu ca xung ngt theo mc thp (XTAL = 11.0592MHz) 13. 3.2 Ngt theo sn Ngt theo sn l ngt s xy ra khi c mt sn m xut hin trn cc chn ngt ca vi iu khin. iu ny lm cho ngt theo sn khc phc c nhc im ca ngt theo mc nh ta thy trn. kch hot ch ngt theo sn th chng ta phi vit chng trnh ci t cho cc bit ca thanh ghi TCON: Hnh 11: Thanh ghi TCON. Cc Bit IT0 v IT1 Cc bit TCON.0 v TCON.2 c coi nh l cc bit IT0 v IT1 tng ng. y l cc bit xc nh kiu ngt theo sn xung hay theo mc xung ca cc ngt phn cng trn chn INT0 v INT1 tng ng. Khi bt li ngun c 2 bit ny u c mc 0 bin chng thnh ngt theo tn hiu mc thp. Lp trnh vin c th iu khin mt trong s chng ln cao chuyn ngt phn cng bn ngoi thnh ngt theo sn. Cc Bit IE0 v IE1 Cc bit TCON.1 v TCON.3 cn c gi l IE0 v IE1 tng ng. Cc bit ny c 8051 dng bm kiu ngt theo sn xung, nu cc bit IT0 v IT1 bng 0 th c ngha l cc ngt phn cng l ngt theo mc thp v cc bit IE0 v IE1 s khng dng n. Cc Bit IE0 v IE1 ch c 8051 dng cht sn xung t cao xung thp trn cc chn INT0 v INT1. Khi c chuyn dch sn xung trn chn INT0 (hay INT1) th 8051 nh du (bt ln cao) cc bit IEx trn thanh ghi TCON v nhy n bng vector ngt v bt u thc hin trnh phc v ngt ISR. Trong khi 8051 thc hin ISR th khng c mt sn xung no c ghi nhn trn chn INT0 (hay INT1) ngn mi ngt trong ngt. Ch trong khi thc hin lnh cui ca trnh phc v ngt ISR th cc bit IEx mi c 8051 t ng xa, v cc chn ngt li hot ng bnh thng. Ta thy rng cc bit IE0 v IE1 c 8051 s dng bn trong bo c mt ngt ang c x l hay khng. Hay ni cch khc l lp trnh vin khng phi quan tm n cc bit ny. Cc Bit TR0 v TR1 14. y l nhng bit D4 v D6 (hay TCON.4 v TCON.6) ca thanh ghi TCON. Cc bit ny c gii thiu cc bi trc, chng c dng khi ng v dng cc b nh thi Timer0 v Timer1 tng ng. Cc Bit TF0 v TF1 Cc bit ny l D5 (TCON.5) v D7 (TCON.7) ca thanh ghi TCON m c gii thiu cc bi trc. Chng c s dng bi cc b Timer0 v Timer1 tng ng bo rng cc b nh thi b trn hay quay v khng. hiu r s khc bit ca ngt theo sn m, ta xt v d 5. Ch rng s khc nhau duy nht gia v d 5 v v d 4 l lnh chuyn ngt INT1 v kiu ngt theo sn. Khi sn m ca tn hiu c cp n chn INT1 th n LED s bt ln mt lc. n LED c thi gian sng ph thuc vo tr bn trong ISR ca INT1. Trong v d 4 do bn cht ngt theo mc ca ngt th n LED cn sng chng no tn hiu chn INT1 vn cn mc thp. Nhng trong v d 5 ny bt li n LED th xung chn INT1 phi c a ln cao ri sau b h xung thp to ra mt sn m lm kch hot ngt. V d 5: #include //Khai bo th vin cho VK 89x51 main() //Chng trnh chnh { IE=0x84; //cho php ngt ngoi 1 IT1=1; //Thit lp ngt ngoi 1 theo sn m while(1) //vng lp v hn { //khng lm g } } void nutan(void) interrupt 2 //Khai bo trnh phc v ngt ngoi 1 { //(mc nh l ngt theo mc) int a=50000; //Bin m tr P1_3=0; //Cho Led sng while(a--){} //Tr cho Led sng vi giy P1_3=1; //Tt Led //Khng cn xa c ngt } 15. Hnh 12:m phng ngt ngoi 1 theo sn m:D cng tc c gi, cng ch c 1 ngt xy ra. Trnh mu ngt theo sn Trc khi kt thc phn ny ta cn tr li cu hi: vy th ngt theo sn c trch mu thng xuyn nh th no? Trong cc ngt theo sn, ngun xung phi gi mc cao ti thiu l 1 chu k my, v xung thp cng phi ko di 1 chu k my na m bo b vi iu khin nhn thy c s chuyn dch t cao xung thp ca sn m. Hnh 13: Thi hn xung ti thiu pht hin ra cc ngt theo sn m vi tn s XTAL = 11.0592MHz Sn m ca xung c cht bi 8051 v c gi bi thanh ghi TCON. Cc bit TCON.1 (IE0) v TCON.3 (IE1) gi cc sn c cht ca chn INT0 v INT1 tng ng nh ch ra trn hnh 11. Chng hot ng nh cc c ngt ang c phc v (Interrupt-in-server). Khi mt c ngt ang c phc v bt ln th n bo rng ngt hin nay ang c x l v trn chn INTx ny s khng c ngt no c p ng chng no ngt ny cha c phc v xong. y ging nh tn hiu bo bn my in thoi. Ngoi ra cn phi nhn mnh 2 im di y khi quan tm n cc bit IE0 v IE1 ca thanh ghi TCON: Khi cc trnh phc v ngt ISR kt thc: Cc Bit IE0 v IE1 c t ng xo bo rng ngt c hon tt v 8051 sn sng p ng ngt khc trn chn . ngt khc 16. c nhn v th tn hiu trn chn phi tr li mc cao v sau nhy xung thp c pht hin nh mt ngt theo sn m. Trong thi gian trnh phc v ngt ang c thc hin th chn INTx b lm ng, 8051 khng quan tm n n c bao nhiu ln chuyn dch t cao xung thp. Trong thc t iu ny c c l do cc bit IEx. V l do ny m cc bit IEx c gi l cc c bo ngt ang c phc v, c ny s ln cao khi 1 sn m c pht hin trn chn INTx v gi mc cao trong ton b qu trnh thc hin ISR. N ch b xo sau lnh cui cng ca ISR. Do vy, ta cng s khng bao gi cn n cc lnh xo c ny trong trnh phc v ngt i vi cc ngt cng INT0 v INT1. 4 Lp trnh ngt truyn thng ni tip Trong cc bi trc chng ta nghin cu v truyn thng ni tip ca 8051. Tt c cc v d trong y u s dng phng php thm d (polling). chng ny chng ta s khm ph phng php truyn thng ni tip da trn ngt. 4.1 Cc c RI v TI v cc ngt Nh ni bi trc th c ngt truyn TI (Transfer interrupt) c bt ln khi bit cui cng ca khung d liu - bit stop c truyn i, bo rng thanh ghi SBUF sn sng truyn byte k tip. Trong trng hp c RI (Receive Interrupt) th n c bt ln khi ton b khung d liu k c bit stop c nhn. Chng no cn ni v truyn thng ni tip th tt c mi khi nim trn y u p dng ging nh nhau cho d s dng phng php thm d hay s dng phng php ngt. S khc nhau duy nht gia hai phng php ny l cch phc v qu trnh truyn thng ni tip nh th no: Trong phng php thm d th chng ta phi i cho c (TI hay RI) bt ln v trong lc ch i th ta khng th lm g c c. Cn trong phng php ngt th ta c bo khi 8051 nhn c mt byte hoc n sn sng truyn byte k tip v ta c th lm cc cng vic khc trong khi ch truyn thng ni tip c thc hin. Trong 8051 ch c mt ngt dnh ring cho truyn thng ni tip. Ngt ny c dng cho c truyn v nhn d liu. Nu bit ngt truyn thng ES - IE.4 trong thanh ghi IE c php, th khi 1 trong 2 c RI hoc TI bt ln, 8051 s nhn c ngt v nhy n a ch trnh phc v ngt dnh cho truyn thng ni tip 0023H trong bng vector ngt thc hin n. Trong trnh ISR ny chng ta phi kim tra cc c TI v RI xem c no gy ra ngt p ng mt cch ph hp (xem v d 6). 17. Hnh 14: Ngt truyn thng c th do hai c TI v RI gi. 4.2 S dng cng COM ni tip trong 8051 Trong cc ng dng, ngt ni tip ch yu c s dng nhn d liu v khng bao gi c s dng truyn d liu ni tip. iu ny ging nh vic bo chung ta bit v nhn in thoi v ta khng th bit trc c lc no c in thoi, cn nu mun gi in thoi th ta khng cn chung bo trc. V d 6: Hy vit chng trnh ngt 8051 nhn d liu t cng ni tip COM v gi n cng P0. Gi thit tn s XTAL l 11.0592MHz v tc baud 9600. Li gii: #include //Khai bo th vin cho 89c51 main() //Chng trnh chnh { TMOD=0x20; //Chn Timer1, ch 2 TH1=0xFD; //Ci t tc baud 9600 SCON=0x50; //0101 0000: Chn ch 1, Cho php nhn TR1=1; //Khi ng Timer1 IE=0x90; //cho php ngt truyn thng ni tip while(1) //Vng lp v hn { } } void nhandulieu(void) interrupt 4 //Khai bo ISR truyn thng ni tip { if(RI==1) //Kim tra c phi l ngt nhn d liu khng { P0=SBUF; //Gi d liu n cng P0 RI=0; //Xa c nhn d liu ni tip RI } } 18. Hnh 15: M phng nhn cc k t 0,1,2,3,4, t my tnh, gi n Port0. Trong v d trn ta ch n vai tr ca c RI. Trong trnh phc v ngt ni tip, ta phi kim tra c c TI v c RI v c hai u c th gi ngt truyn thng ni tip, hay ni cch khc l ch c mt ngt cho c truyn v nhn. 4.3 Xo c RI v TI trc khi thot khi ngt truyn thng ni tip rng lnh cui cng trc khi tr v t ISR l lnh xo cc c RI v TI. iu ny tng phn vi ngt ngoi v ngt b nh thi l u c 8051 xo cc c. 5. Cc mc u tin ngt trong 8051 5.1 Cc mc u tin trong qu trnh bt li ngun Khi 8051 c cp ngun th cc mc u tin ngt c gn theo Hnh 16. T hnh ny ta thy v d nu cc ngt phn cng ngoi 0 v 1 c kch hot cng mt lc th ngt ngoi 0 s c p ng trc. Ch sau khi ngt INT0 c phc v xong th INT1 mi c phc v v INT1 c mc u tin thp hn. Trong thc t s mc u tin ngt trong bng ch l mt quy trnh thm d, trong 8051 thm d cc ngt theo trnh t cho trong hnh 16 v p ng chng mt cch ph hp. 19. Hnh 16: Mc u tin cc ngt trong khi cp li ngun. Hnh 17: Thanh ghi mc u tin ngt IP: Bit u tin = 1 l mc u tin cao, Bit u tin = 0 l mc u tin thp. - Bit D7 v D6 -- cha dng. - Bit D5 hay PT2 l Bit u tin ngt Timer2 (dng cho 8052) - Bit D4 hay PS l Bit u tin ngt cng ni tip - Bit D3 hay PT1 l Bit u tin ngt Timer1 - Bit D2 hay PX1 l mc u tin ngt ngoi 1 - Bit D1 hay PT0 l mc u tin ngt Timer 0 - Bit D0 hay PX0 l mc u tin ngt ngoi 0 5.2 Thit lp mc u tin ngt vi thanh ghi IP Chng ta c th thay i trnh t trong hnh 16 bng cch gn mc u tin cao hn cho bt k ngt no. iu ny c thc hin bng cch lp trnh mt thanh ghi gi l thanh ghi mc u tin ngt IP (Interrupt Priority). Trn hnh 17 l cc bit ca thanh ghi ny. Khi bt li ngun thanh thi IP cha hon ton cc s 0 to ra trnh t u tin ngt theo Hnh 16. mt ngt no c mc u tin cao hn ta thc hin a bit tng ng ln cao. Mt im khc na cn c lm sng t l mc u tin ngt khi 2 hoc nhiu bit ngt trong thanh ghi IP c t ln cao: Trong trng hp ny th trong khi cc ngt ny c mc u tin cao hn cc ngt khc, chng s c phc v theo trnh t cho trong Hnh 16. 5.3 Ngt trong ngt iu g xy ra nu 8051 ang thc hin mt trnh phc v ngt thuc mt ngt no th li c mt ngt khc c kch hot? Trong nhng trng hp nh vy th 1 ngt c mc u tin cao hn c th ngt 1 ngt c mc u tin thp hn. y gi l 20. ngt trong ngt. Trong 8051 mt ngt u tin thp c th b ngt bi mt ngt c mc u tin cao hn ch khng b ngt bi mt ngt c mc u tin thp hn. Mc d tt c mi ngt u c cht v gi bn trong nhng khng c ngt mc thp no c CPU quan tm ngay tc khc, nu 8051 cha kt thc phc v cc ngt mc cao. 5.4 Thu chp ngt bng phn mm (Triggering) C nhiu lc ta cn kim tra mt trnh phc v ngt bng con ng m phng. iu ny c th c thc hin bng cc lnh n gin thit lp cc ngt ln cao v bng cch buc 8051 nhy n bng vector ngt. V d, nu bit cho php ngt Timer1 trong thanh ghi IE c bt ln 1 th mt lnh nh TF1=1; s ngt 8051 ngng thc hin cng vic ang lm bt k v buc n nhy n bng vector ngt timer1. Hay ni cch khc, ta khng cn i cho Timer1 quay tr v 0 mi to ra ngt. Chng ta c th gy ra mt ngt bng cc lnh a cc bit ca ngt tng ng ln cao. Nh vy qua bi ny chng ta bit ngt l mt s kin bn trong hoc bn ngoi gy ra ngt b vi iu khin bo cho n bit rng thit b cn c phc v. Mi mt ngt c mt chng trnh i km vi n c gi l trnh phc v ngt ISR. B vi iu khin 8051 c 6 ngt, trong c 5 ngt ngi dng c th truy cp c. l: 2 ngt cho cc thit b phn cng bn ngoi INT0 v INT1, 2 ngt cho cc b nh thi l TF0 v TF1 v 1 ngt dnh cho truyn thng ni tip. 8051 c th c lp trnh cho php hoc cm mt ngt bt k cng nh thit lp mc u tin cho n theo yu cu ca thut ton ng dng.