Author
pham-trong-thuan
View
47
Download
1
Embed Size (px)
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.