You are on page 1of 58

CHNG 1. B m/ b nh thi trong 8051 1.1. Mc tiu Kt thc bi hc ny, bn s nm c: B m, b nh thi l g?

? Cc thanh ghi lin quan Cch thc hot ng ca b m/b nh thi Cc bc lp trnh b m/b nh thi 1.2. Gii thiu B m/B nh thi: y l cc ngoi vi c thit k thc hin mt nhim v n gin: m cc xung nhp. Mi khi c thm mt xung nhp ti u vo m th gi tr ca b m s c tng ln 01 n v (trong ch m tin/m ln) hay gim i 01 n v (trong ch m li/m xung). Xung nhp a vo m c th l mt trong hai loi: Xung nhp bn trong IC: l xung nhp c to ra nh kt hp mch dao ng bn trong IC v cc linh kin ph bn ngoi ni vi IC. Trong trng hp s dng xung nhp loi ny, ngi ta gi l cc b nh thi (timers). Do xung nhp bn loi ny thng u n nn ta c th dng m thi gian mt cch kh chnh xc. Xung nhp bn ngoi IC: l cc tn hiu logic thay i lin tc gia 02 mc 0-1 v khng nht thit phi l u n. Trong trng hp ny ngi ta gi l cc b m (counters). ng dng ph bin ca cc b m l m cc s kin bn ngoi nh m cc sn phm chy trn bng chuyn, m xe ra/vo kho bi Mt khi nim quan trng cn phi ni n l s kin trn (overflow). N c hiu l s kin b m m vt qu gi tr ti a m n c th biu din v quay tr v gi tr 0. Vi b m 8 bit, gi tr ti a l 255 (tng ng vi FF trong h Hexa) v l 65535 (FFFFH) vi b m 16 bit. 8051 c 02 b m/b nh thi. Chng c th c dng nh cc b nh thi to mt b tr thi gian hoc nh cc b m m cc s kin xy ra bn ngoi b VK. Trong bi ny chng ta s tm hiu v cch lp trnh cho chng v s dng chng nh th no. Phn 1 l Lp trnh b nh thi, v phn 2 l Lp trnh cho b m.

1.3. Cc b nh thi ca 8051 8051 c hai b nh thi l Timer 0 v Timer 1, phn ny chng ta bn v cc thanh ghi ca chng v sau trnh by cch lp trnh chng nh th no to ra cc tr thi gian. 1.3.1. Cc thanh ghi c s ca b nh thi C hai b nh thi Timer 0 v Timer 1 u c di 16 bit c truy cp nh hai thanh ghi tch bit byte thp v byte cao. Chng ta s bn ring v tng thanh ghi. 1.3.2. Cc thanh ghi ca b Timer 0 Thanh ghi 16 bit ca b Timer 0 c truy cp nh byte thp v byte cao: Thanh ghi byte thp c gi l TL0 (Timer0 Low byte). Thanh ghi byte cao c gi l TH0 (Timer0 High byte). Cc thanh ghi ny c th c truy cp, hoc c c nh mi thanh ghi khc chng hn nh A, B, R0, R1, R2 v.v...

Hnh 1: Cc thanh ghi ca b Timer 0 1.3.3. Cc thanh ghi ca b Timer 1 Ging nh timer 0, b nh thi gian Timer 1 cng di 16 bit v thanh ghi 16 bit ca n cng c chia ra thnh hai byte l TL1 v TH1. Cc thanh ghi ny c truy cp v c ging nh cc thanh ghi ca b Timer 0 trn.

Hnh 2: Cc thanh ghi ca b Timer 1.

1.3.4. Thanh ghi TMOD C hai b nh thi Timer 0 v Timer 1 u dng chung mt thanh ghi c gi l TMOD: thit lp cc ch lm vic khc nhau ca b nh thi. Thanh ghi TMOD l thanh ghi 8 bit gm c: 4 bit thp thit lp cho b Timer 0. 4 bit cao thit lp cho Timer 1. Trong : 2 bit thp ca chng dng thit lp ch ca b nh thi. 2 bit cao dng xc nh php ton.

Hnh 3: Thanh ghi TMOD. a. Cc bit M1, M0 L cc bit ch ca cc b Timer 0 v Timer 1. Chng chn ch ca cc b nh thi: 0, 1, 2 v 3 nh bng di. Chng ta ch tp chung vo cc ch thng c s dng rng ri nht l ch 1 v ch 2. Chng ta s sm khm ph ra cc c tnh ca cc ch ny sau khi khm phn cn li ca thanh ghi TMOD. Cc ch c thit lp theo trng thi ca M1 v M0 nh sau: M1 0 0 1 M0 0 1 0 Ch 0 1 2 Ch hot ng B nh thi 13 bit:8 bit l b nh thi/b m, 5 bit t trc. B nh thi 16 bit: khng c t trc. B nh thi 8 bit: t np li.

Ch b nh thi chia tch.

Bng 1: Cc ch hot ng ca b m/b nh thi b. Bit C/T (Counter/Timer) Bit ny trong thanh ghi TMOD c dng quyt nh xem b nh thi c dng nh mt my to tr hay b m s kin. Nu bit C/T = 0 th n c dng nh mt b nh thi to tr thi gian. V d 1: TMOD = 0000 0001 (01H) : ch 1 ca b nh thi Timer 0 c chn. TMOD = 0010 0000 (20H) : ch 2 ca b nh thi Timer 1 c chn. TMOD = 0001 0010 (12H) : ch 1 ca b nh thi Timer 1 v ch 2 ca Timer 0 c chn. Ngun ng h cho ch tr thi gian l tn s thch anh ca 8051. iu c ngha l ln ca tn s thch anh i km vi 8051 quyt nh tc nhp ca cc b nh thi trn 8051. Tn s ca b nh thi lun bng 1/12 tn s ca thch anh gn vi 8051.

Hnh 4: Tn s ca b m/b nh thi V d 2: Tn s thch anh 20MHz 12MHz 11,0592MHz Tn s b nh thi 20MHz/12=1,6666MHz 12MHz/12=1MHz 11,0592MHz/12=0,9216MHz Chu k b nh thi 1/1,6666MHz=0,6us 1/1MHz=1us 1/0,9216MHz=1,085us

Bng 2: Mt s tn s thng dng

Mc d cc h thng 8051 c th s dng tn s thch anh t 10 n 40MHz, song ta ch tp trung vo tn s thch anh 11,0592MHz. L do ng sau mt s l nh vy l tc baud i vi truyn thng ni tip ca 8051. Tn s XTAL = 11,0592MHz cho php h thng 8051 truyn thng vi PC m khng c li. c. Bit cng GATE Mt bit khc ca thanh ghi TMOD l bit cng GATE. trn hnh 3 ta thy c hai b nh thi Timer0 v Timer1 u c bit GATE. Vy bit GATE dng lm g? Mi b nh thi thc hin im khi ng v dng. Mt s b nh thi thc hin iu ny bng phn mm, mt s khc bng phn cng v mt s khc va bng phn cng va bng phn mm. Cc b nh thi trn 8051 c c hai: Vic khi ng v dng b nh thi c khi ng bng phn mm bi ccbit khi ng b nh thi TR l TR0 v TR1. iu ny c c nh cc lnh Set bit TR0 ln 1 (khi ng b nh thi) hoc Clear bit TR0 (dng b nh thi) i vi Timer 0, v tng t TR1 i vi Timer 1. Cc lnh ny c tc dng khi bit GATE = 0 trong thanh ghi TMOD. Vic khi ng v ngng b nh thi bng phn cng t ngun ngoi bng cch t bit GATE = 1 trong thanh ghi TMOD. Tuy nhin, trnh s ln ln ngay t by gi ta t GATE = 0 c ngha l khng cn khi ng v dng cc b nh thi bng phn cng t bn ngoi. V d 3: TMOD = 0000 0010: B nh thi l Timer0, ch 2, C/T = 0 dng ngun XTAL, GATE = 0 dng phn mm khi ng v dng b nh thi. Nh vy, by gi chng ta c hiu bit c bn v vai tr ca thanh ghi TMOD, chng ta s xt tng ch ca b nh thi v cch chng c lp trnh nh th no to ra mt tr thi gian. 1.4. Lp trnh cho ch 1 Di y l nhng bc hot ng ca timer ch 1: y l b nh thi 16 bit, do vy n cho php cc gi tr 0000 n FFFFHc np vo cc thanh ghi TL v TH ca b nh thi.

Sau khi TL v TH c np mt gi tr khi to 16 bit th b nh thi phi c khi ng. iu ny c thc hin bi vic SET bit TR0 i viTimer 0 v SET bit TR1 i vi Timer 1. Sau khi b nh thi c khi ng, n bt u m ln. N m ln cho n khi t c gii hn FFFFH ca n. Sau , khi n quay t FFFFH v 0000th n bt ln bit c TF c gi l c b nh thi. C b nh thi ny c th c hin th. Khi c b nh thi ny c thit lp, dng b nh thi: ta thc hin xa cc bit TR0 i vi Timer 0 hoc TR1 i vi Timer 1. y cng cn phi nhc li l i vi mi b nh thi u c c TF ring ca mnh: TF0 i vi Timer 0 v TF1 i vi Timer 1. Sau khi b nh thi t c gii hn ca n l gi tr FFFFH, mun lp li qu trnh th cc thanh ghi TH v TL phi c np li vi gi tr ban u v cTF phi c xa v 0.

Hnh 5: Timer/counter ch 1 1.4.1. Cc bc lp trnh ch 1 to ra mt tr thi gian dng ch 1 ca b nh thi th cn phi thc hin cc bc di y: Np gi tr TMOD cho thanh ghi bo nh thi no (Timer0 hay Timer1) c s dng v ch no c chn. Np cc thanh ghi TL v TH vi cc gi tr m ban u. Khi ng b nh thi. Duy tr kim tra c b nh thi TF bng mt vng lp xem n c bt ln 1 khng. Thot vng lp khi TF c ln cao. Dng b nh thi. Xo c TF cho vng k tip. Quay tr li bc 2 np li TL v TH. Cng thc tnh ton tr s dng ch 1 (16 bit) ca b nh thi i vi tn s thch anh XTAL = f (MHz): a) Tnh theo s Hex (FFFF - YYXX + 1)*12/f (s) trong YYXX l cc gi tr khi to ca TH, TL tng ng. Lu rng cc gi tr YYXX l theo s Hex. b) Tnh theo s thp phn Chuyn i cc gi tr YYXX ca TH, TL v s thp phn nhn mt s thp phn NNNNN sau ly (65536 NNNNN)*12/f (s).

1. 2. 3. 4. 5. 6. 7.

Bng 3: Cng thc tnh tr thi gian theo tn s XTAL (f) V d 4: Trong chng trnh di y ta to ra mt sng vung vi y xung 50% (cng t l gia phn cao v phn thp) trn chn P1.5. B nh thi Timer0 c dng to tr thi gian: #include<at89x51.h> void delay(void); main() { P1_5=1; while(1) { delay(); P1_5=~P1_5; } } void delay(void) { TMOD=0x01; TL0=0xF2; TH0=0xFF; TR0=1; while(!TF0){} TR0=0; TF0=0; } //khai bo th vin cho VK 89x51 //khi bo nguyn mu hm con to tr //khi to chn P1_5 mc cao //vng lp v hn //chng trnh con to tr //o tn hiu chn P1_5 //nh ngha hm delay //chn timer0, ch 1, 16Bit //np gi tr cho TL0 //np gi tr cho TH0 //khi ng timer0 //vng lp kim tra c TF0 //ngng timer0 //xa c TF0

1. 2. 3. 4.

5. 6.

Trong chng trnh chnh (hm main) thc hin gi hm con delay() to tr, v o lin tc tn hiu u ra chn P1_5. Trong chng trnh con delay() trn y ch cc bc sau: TMOD c np. Gi tr FFF2H c np v TH0 - TL0 B nh thi Timer0 c khi ng bi lnh Set bit TR0. B Timer0 m ln 01 sau mi chu k ca timer. Khi b nh thi m tng qua cc trng thi FFF3, FFF4 ... cho n khi t gi tr FFFFH l n quay v 0000H v bt c b nh thi TF0 = 1. Ti thi im ny vng lp kim tra c TF0 mi c thot ra. B Timer0 c dng bi lnh clear bit TR0. C TF0 cng c xa, sn sng cho chu trnh tip theo. Lu rng lp li qu trnh trn ta phi np li cc thanh ghi TH v TL v khi ng li b nh thi (n gin l ta gi li hm delay()).

Hnh 6: Mt chu trnh m ca timer0 Tnh ton tr to ra bi b nh thi chng trnh trn vi tn s XTAL=11,0592MHz: B nh thi lm vic vi tn s ng h bng 1/12 tn s XTAL, do vy ta c 11,0592MHz/12=0,9216MHz l tn s ca b nh thi. Kt qu l mi nhp xung ng h c chu k T=1/0,9216MHz=1,085us. Hay ni cch khc, b Timer0 tng 01 n v sau 1,085s to ra b tr bng s_m1,085s. S m bng FFFFH - FFF2H = ODH (13 theo s thp phn). Tuy nhin, ta phi cng 1 vo 13 v cn thm mt nhp ng h n quay t FFFFH v 0000H v bt c TF. Do vy, ta c 14 1,085s = 15,19s cho na chu k v c chu k l T = 2 15,19s = 30, 38s l thi gian tr c to ra bi b nh thi. Tuy nhin, trong tnh ton tr trn ta khng tnh n tng ph cc lnh ci t timer0, cc lnh kim tra trong vng lp, gi hm con Chnh cc cu lnh ny lm cho tr di hn, dn n tn s ca xung vung u ra P1_5 khng cn ng nh tnh ton trn. y l nhc im ca C trong lp trnh VK. Ty vo tng chng trnh bin dch, mi lnh ca C s c bin dch ra s lnh ASM khc nhau, tnh ton chnh xc ta phi tnh c tng ph tng dng lnh ASM. 1.4.2. Tm cc gi tr cn c np vo b nh thi Gi s rng chng ta bit lng thi gian tr m ta cn th cu hi t ra l lm th no tm ra c cc gi tr cn thit cho cc thanh thi TH v TL. tnh ton cc gi tr cn c np vo cc thanh ghi TH v TL chng ta hy nhn vo v d sau vi vic s dng tn s dao ng XTAL = 11. 0592MHz i vi h thng 8051. Cc bc tm cc gi tr ca cc thanh ghi TH v TL: Chia thi gian tr cn thit cho 1.085s Thc hin 65536 - n vi n l gi tr thp phn nhn c t bc 1. Chuyn i kt qu bc 2 sang s Hex: ta c YYXX l gi tr Hexa ban u cn phi np vo cc thanh ghi b nh thi. t TL = XX v TH = YY. V d 5: Gi s tn s XTAL = 11.0592MHz. Hy tm cc gi tr cn c np vo cc thanh ghi vo cc thanh ghi TH v TL nu ta mun thi gian tr l 5ms. Li gii:

1. 2. 3. 4.

V tn s XTAL = 11.0592MHz nn b m tng sau mi chu k 1.085s. iu c ngha l phi mt rt nhiu khong thi gian 1,085s c c mt xung 5ms. c c ta chia 5ms cho 1.085s v nhn c s n = 4608 nhp. nhn c gi tr cn c np vo TL v TH th ta tin hnh ly 65536 tr i 4608 bng 60928. Ta i s ny ra s hex thnh EE00H. Do vy, gi tr np vo TH l EE V TL l 00. void delay(void) { TMOD=0x01; TL0=0x00; TH0=0xEE; TR0=1; while(!TF0){} TR0=0; TF0=0; } //nh ngha hm delay //chn timer0 ch 1 16Bit //np gi tr cho TL0 //np gi tr cho TH0 //khi ng timer0 //vng lp kim tra c TF0 //ngng timer0 //xa c TF0

V d 6: Gi s ta c tn s XTAL l 11,0592MHz. Hy tm cc gi tr cn c np vo cc thanh ghi TH v TL to ra mt sng vung tn s 2kHz. Xt cc bc sau: 1. T = 1/f = 1/2KHz = 500us l chu k ca sng vung. 2. Khong thi gian phn cao v phn thp l: T/2 = 250s. 3. S nhp cn trong thi gian l:250us/1,085us = 230. Gi tr cn np vo cc thanh ghi cn tm l 65536 - 230 = 65306 v dng hex l FF1AH. 4. Gi tr np vo TL l 1AH, TH l FFH. Chng trnh cn vit l: void delay(void) { TMOD=0x10; TL1=0x1A; TH1=0xFF; TR1=1; while(!TF1){} TR1=0; TF1=0; } 1.5. Ch 0 //nh ngha hm delay //chn timer1 ch 1 16Bit //np gi tr cho TL1 //np gi tr cho TH1 //khi ng timer1 //vng lp kim tra c TF1 //ngng timer1 //xa c TF1

Ch 0 hon ton ging ch 1 ch khc l b nh thi 16 bit c thay bng13 bit. B m 13 bit c th gi cc gi tr gia 0000 n 1FFFF trong TH - TL. Do vy khi b nh thi t c gi tr cc i ca n l 1FFFH th n s quay tr v 0000v c TF c bt ln. 1.6. Lp trnh cho ch 2 Di y l nhng bc hot ng ca timer ch 2: N l mt b nh thi 8 bit, do vy n ch cho php cc gi tr t 00 n FFHc np vo thanh ghi TH ca b nh thi. Sau khi 2 thanh ghi TH v TL c np gi tr ban u th b nh thi phi c khi ng. Sau khi b nh thi c khi ng, n bt u m tng ln bng cch tng thanh ghi TL. N m cho n khi i gi tr gii hn FFH ca n. Khi n quay tr v 00 t FFH, n thit lp c b nh thi TF. Nu ta s dng b nh thi Timer0 th l c TF0, cn Timer1 th l c TF1. Khi thanh ghi TL quay tr v 00 t FFH, c TF c bt ln 1 th thanh ghi TLc t ng np li vi gi tr sao chp t thanh ghi TH. lp li qu trnh chng ta n gin ch vic xo c TF v cho n chy m khng cn s can thip ca lp trnh vin np li gi tr ban u. iu ny lm cho ch 2 c gi l ch t np li so vi ch 1 (phi np li cc thanh ghi TH v TL).

Hnh 7: Timer/counter ch 2 Cn phi nhn mnh rng: ch 2 l b nh thi 8 bit. Tuy nhin, n li c kh nng t np, khi t np li th gi tr ban u ca TH c gi nguyn, cn TL c np li gi tr sao chp t TH. Ch ny c nhiu ng dng, bao gm vic thit lp tn s baud trong truyn thng ni tip. 1.6.1. Cc bc lp trnh cho ch 2

1. 2. 3. 4. 5. 6. 7.

to ra mt thi gian tr s dng ch 2 ca b nh thi cn thc hin cc bc sau: Np thanh ghi gi tr TMOD bo b nh thi gian no (Timer0 hay Timer1) c s dng v ch lm vic no ca chng c chon. Np li thanh ghi TH v TL vi gi tr m ban u. Khi ng b nh thi. Duy tr kim tra c b nh thi TF bng cch s dng mt vng lp xem n c bt cha. Thot vng lp khi TF ln cao. Dng b nh thi. Xo c TF. Quay tr li bc 3. V ch 2 l ch t np li. V d 7 minh ho nhng iu ny: V d 7: #include<at89x51.h> void delay(void); main() { TMOD=0x20; TH1=0x00; TL1=0xFE; P1_5=1; while(1) { delay(); P1_5=~P1_5; } } void delay(void) { TR1=1; while(!TF1){} TR1=0; TF1=0; } //khai bo th vin cho VK 89x51 //khi bo nguyn mu hm con to tr //chn timer1, ch 2, 8Bit, t np li //np gi tr cho TH1 //np gi tr cho TL1 //khi to chn P1_5 mc cao //vng lp v hn //gi chng trnh con to tr //o tn hiu chn P1_5 //nh ngha hm delay //khi ng timer1 //vng lp kim tra c TF1 //ngng timer1 //xa c TF1

Hm delay() trn s to mt tr bng 256 ln (FF - 00 + 1) chu k ca timer (khng tnh tng ph cc lnh) k t chu trnh th 2. V chu trnh u tin timer1 bt u m v tr 0xFE, k t chu trnh sau th thanh ghi TL1 mi sao chp c gi tr TH1.

1.7. B m phn trn y ta s dng cc b nh thi ca 8051 to ra cc tr thi gian. Cc b nh thi ny cng c th c dng nh cc b m (counter) cc s kin xy ra bn ngoi 8051. Cng dng ca b m s kin s c tnh by phn ny. Chng no cn lin quan n cng dng ca b nh thi nh b m s kin th mi vn m ta ni v lp trnh b nh thi phn trc cng c p dng cho vic lp trnh nh l mt b m ngoi tr ngun tn s. i vi b nh thi/b m khi dng n nh b nh thi th ngun tn s l tn s thch anh ca 8051. Tuy nhin, khi n c dng nh mt b m th ngun xung tng ni dung cc thanh ghi TH v TL l t bn ngoi 8051. ch b m, hy lu rng cc thanh ghi TMOD v TH, TL cng ging nh i vi b nh thi c bn phn trc, thm ch chng vn c cng tn gi. Cc ch ca cc b m cng ging nhau. 2.1 Bit C/T trong thanh ghi TMOD Xem li phn trn v bit C/T trong thanh ghi TMOD: ta thy rng n quyt nh ngun xung ng h cho b m: Nu bit C/T = 0 th b nh thi nhn cc xung ng h t b giao ng thch anh ca 8051. Nu bit C/T = 1 th b nh thi c s dng nh b m v nhn cc xung ng h t ngun bn ngoi ca 8051. Do vy, nu bit C/T = 1 th b m tng ln khi cc xung c a n chn P3.4 (T0) i vi counter0 v chn P3.5 (T1) i vi counter1. Chn 14 15 Chn cng P3.4 P3.5 Chc nng T0 T1 M t u vo ngoi ca b m 0 u vo ngoi ca b m 1

Bng 4: Cc chn cng P3 c dng cho b m 0 v 1 V d 8: Chng trnh sau s dng b m 1, m cc xung chn P3.5 v hin th s m c (trong thanh ghi TL1) ln cng P2: #include<at89x51.h> main() //khai bo th vin 89x51 //chng trnh chnh

{ TMOD=0x60; TH1=0x00; P3_5=1; TR1=1; while(1) { P2=TL1; } } Trong v d 8 chng ta s dng b counter1 nh b m s kin n m ln mi khi cc xung ng h c cp n chn P3.5. Cc xung ng h ny c th biu din s ngi i qua cng hoc s vng quay hoc bt k s kin no khc m c th chuyn i thnh cc xung. 2.2 Thanh ghi TCON Trong cc v d trn y ta thy cng dng ca cc c TR0 v TR1 bt/tt cc b m/b nh thi. Cc bit ny l mt b phn ca thanh ghi TCON. y l thanh ghi 8 bit, nh c ch ra trong hnh 2: 4 bit trn c dng lu ct cc bit TF v TR cho c Timer/counter 0 v Timer/counter 1. 4 bit thp c thit lp dnh cho iu khin cc ngt m ta s bn cc bi sau. //0x60=0110 000 : C/T=1, b m 1, ch 2 t np //xa b m ban u //set chn vo cho b m //khi ng b m 1 //vng lp v hn //hin th s m c ra cng P2

Hnh 8: Thanh ghi TCON iu khin b m/b nh thi 2.3 Trng hp khi bit GATE = 1 trong TMOD Trc khi kt thc bi ny ta cn bn thm v trng hp khi bit GATE = 1 trong thanh ghi TMOD. Tt c nhng g chng ta va ni trong bi ny u gi thit GATE = 0. Khi GATE = 0 th b m/b nh thi c khi ng bng cc lnh Set bit TR0 hocTR1. Vy iu g xy ra khi bit GATE = 1? Nu GATE = 1 th vic khi ng v dng b m/b nh thi c thc hin t bn ngoi qua chn P3.2 (INT0) v P3.3 (INT1) i vi Timer/counter 0 v

Timer/counter 1 tng ng. Phng php iu khin bng phn cng dng v khi ng b m/b nh thi ny c th c rt nhiu ng dng. V d: chng hn 8051 c dng trong mt sn phm pht bo ng mi giy dng b Timer0 theo nhiu vic khc. B Timer0 c bt ln bng phn mm qua lnh Set bit TR0 v nm ngoi s kim sot ca ngi dng sn phm . Tuy nhin, khi ni mt cng tc chuyn mch ti chn P2.3 ta c th dng v khi ng b nh thi, bng cch ta c th tt bo ng.

CHNG 2. 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. 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) vthm 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: 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 ngttheo cu trc sau: Void Name (void) interrupt X { // chng trnh phc v ngt } //( X: l s th t ca ngt )

Khi a ch ngt s c t ng tnh bng: Interrupt Address = (X * 8) + 3 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: Nu EA = 0 th khng c ngt no c p ng cho d bit tng ng ca n trong IEc 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 n g 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<at89x51.h> main() {

//a) IE=0x96; EA=1; ES=1; ET0=1; EX1=1; //b) ET0=0; //c) EA=0;

//1001 0110: lnh ny tng ng vi 4 lnh pha di //Cho php s dng ngt //Cho php ngt cng ni tip //Cho php ngt timer0 //Cho php ngt ngoi 1 //Cm ngt timer0 //Cm tt c cc ngt

while(1) { //Chng trnh chnh // } } 2. Lp trnh cc ngt b nh thi Trong cc bi trc ta bit cch s dng cc b nh thi Timer0 v Timer1bng 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 TFc 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 bTimer0 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<at89x51.h> main() { TMOD=0x02; TL0=0xA4; TH0=0xA4; TR0=1; IE=0x82; while(1) { P1=~P0; } //khai bo thu vin cho VK 89x51 //chn timer0, ch 2, 8Bit t np li //np gi tr cho TL0 //np gi tr cho TH0 //khi ng timer0 //cho php ngt timer0 //vng lp v hn //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

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 chnhmain(). 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 hmmain() 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 TF0ca 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 thiTimer1. 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<at89x51.h> 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 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.

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<at89x51.h> main() { IE=0x84; //Khai bo th vin cho VK 89x51 //Chng trnh chnh //cho php ngt ngoi 1

while(1) { } } void nutan(void) interrupt 2 { int a=50000; P1_3=0; while(a--){} P1_3=1; }

//vng lp v hn //khng lm g //Khai bo trnh phc v ngt ngoi 1 //(mc nh l ngt theo mc) //Bin m tr //Cho Led sng //Tr cho Led sng vi giy //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.

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 vINT1 trong thanh ghi IE khng c kch hot. Sau khi cc ngt phn cng trong thanh giIE 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 lnmc 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 mckhng c cht.

Hnh 10: Thi gian ti thiu ca xung ngt theo mc thp (XTAL = 11.0592MHz)

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

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 INT1vn cn mc thp. Nhng trong v d 5 ny bt li n LED th xung chn INT1phi c a ln cao ri sau b h xung thp to ra mt sn m lm kch hot ngt. V d 5: #include<at89x51.h> main() { IE=0x84; IT1=1; while(1) { } } void nutan(void) interrupt 2 { int a=50000; P1_3=0; while(a--){} P1_3=1; } //Khai bo trnh phc v ngt ngoi 1 //(mc nh l ngt theo mc) //Bin m tr //Cho Led sng //Tr cho Led sng vi giy //Tt Led //Khng cn xa c ngt //Khai bo th vin cho VK 89x51 //Chng trnh chnh //cho php ngt ngoi 1 //Thit lp ngt ngoi 1 theo sn m //vng lp v hn //khng lm g

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 bitTCON.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 IE1ca 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 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 th ng 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).

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<at89x51.h> //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 } }

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.

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 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 Timer1trong 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 vTF1 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.

CHNG 3. Truyn thng ni tip vi 8051 Mc tiu Kt thc bi hc ny, bn c th hiu: Truyn d liu ni tip ng b, khng ng b ng khung d liu trong truyn thng khng ng b Chun giao din RS232 Ni ghp 8051 vi chun RS232 Cc bc lp trnh truyn thng ni tip cho 8051 Ci t khung truyn Ci t tc baud Gii thiu Cc my tnh truyn d liu theo hai cch: Song song v ni tip. Trong truyn d liu song song thng cn rt nhiu ng dy dn ch truyn d liu n mt thit b ch cch xa vi bc. V d ca truyn d liu song song l cc my in hoc cc cng, mi thit b s dng mt ng cp vi nhiu dy dn. Mc d trong cc trng hp nh vy th nhiu d liu c truyn i trong mt khong thi gian ngn bng cch dng nhiu dy dn song song, nhng khong cch th khng th ln c. V cc ng cp di lm suy gim thm ch lm mo tn hiu. Ngoi ra, cc ng cp di c gi thnh cao. V nhng l do ny, truyn d liu i xa th phi s dng phng php truyn ni tip. 1. Cc c s ca truyn thng ni tip Trong truyn thng ni tip d liu c gi i tng bit mt, so vi truyn song song th l mt hoc nhiu byte c truyn i cng mt lc. Hnh 1 so snh gia vic truyn d liu ni tip v song song.

Hnh 1: S truyn d liu ni tip so vi s truyn song song.

Trong truyn thng ni tip, mt ng d liu duy nht c dng thay cho nhiu ng d liu ca truyn thng song song khng ch gip gim gi thnh, gip h thng n gin hn nhiu m n cn m ra kh nng hai my tnh cch xa nhau c truyn thng qua ng thoi. Truyn thng d liu ni tip s dng hai phng php l ng b v khng ng b (d b): Trong truyn ng b: th b truyn v b thu c ng b ha qua mt ng tn hiu ng h bn ngoi. Khi nim ng b ch s bo trc trong qu trnh truyn. Ly v d: thit b 1 (tb1) kt ni vi vi thit b 2 (tb2) bi 2 ng, mt ng d liu v 1 ng xung nhp. C mi ln tb1 mun truyn 1 bit d liu, tb1 iu khin ng xung nhp chuyn t mc thp ln mc cao bo cho tb2 sn sng nhn mt bit. Bng cch bo trc ny tt c cc bit d liu c th truyn/nhn d dng vi t ri ro trong qu trnh truyn. Tuy nhin, cch truyn ny i hi t nht 2 ng truyn (d liu v clock) cho 1 qu trnh truyn hoc nhn. Khc vi cch truyn ng b, truyn thng khng ng b ch cn mt ng truyn cho mt qu trnh. Khung d liu c chun ha bi cc thit b nn khng cn ng xung nhp bo trc d liu n. V d: 2 thit b ang giao tip vi nhau theo phng php ny, chng c tha thun vi nhau rng c 1ms th s c 1 bit d liu truyn n, nh th thit b nhn ch cn kim tra v c ng truyn mi mili-giy c cc bit d liu v sau kt hp chng li thnh d liu c ngha. Truyn thng ni tip khng ng b v th hiu qu hn truyn thng ng b (khng cn nhiu ng truyn). Tuy nhin, qu trnh truyn thnh cng th vic tun th cc tiu chun truyn l ht sc quan trng. Trong 8051 c mt b truyn d liu khng ng b (UART - Universal Asynchronous serial Reveiver and Transmitter). Trc tin chng ta s tm hiu cc khi nim quan trng trong phng php truyn thng ni tip khng ng b: 1.1 Baud rate (tc Baud) vic truyn v nhn khng ng b xy ra thnh cng th cc thit b tham gia phi thng nht vi nhau v khong thi gian dnh cho 1 bit truyn, hay ni cch khc tc truyn phi c ci t nh nhau trc, tc ny gi l tc Baud. Theo nh ngha, tc baud l s bit truyn trong 1 giy. V d: nu tc baud c t l 19200 th thi gian dnh cho 1 bit truyn l 1/19200 ~ 52.083us. 1.2 Frame (khung truyn) D liu i vo u thu ca ng d liu trong truyn d liu ni tip l mt dy cc s 0 v 1, v rt kh hiu c ngha ca cc d liu y nu bn pht v bn thu khng cng thng nht v mt tp cc lut, mt th tc, v cch d liu c ng gi,

bao nhiu bit to nn mt k t v khi no d liu bt u v kt thc. Bn cnh tc baud, khung truyn l mt yu t quan trng to nn s thnh cng khi truyn v nhn. Khung truyn bao gm cc quy nh v s bit trong mi ln truyn, cc bit bo nh bit Start v bit Stop, cc bit kim tra nh Parity, ngoi ra s lng cc bit trong mt data cng c quy nh bi khung truyn. Hnh 2 l mt v d ca mt khung truyn ca UART (truyn thng ni tip khng ng b): khung truyn ny c bt u bng 01 start bit, tip theo l 08 bit data, sau l 01 bit parity dng kim tra d liu v cui cng l 02 bits stop. Cng vic ny c gi l ng gi d liu. Chng ta s i vo tm hiu cc thnh phn c trong mt khung truyn: Start bit Start l bit u tin c truyn trong mt frame truyn, bit ny c chc nng bo cho thit b nhn bit rng c mt gi d liu sp c truyn ti. Start l bit bt bucphi c trong khung truyn, v n l mt bit thp (0). Data (d liu) Data hay d liu cn truyn l thng tin chnh m chng ta cn gi v nhn. Data khng nht thit phi l gi 8 bit, vi 8051 ta c th quy nh s lng bit ca data l 08 hoc 09 bit. Trong truyn thng ni tip UART, bit c trng s nh nht (LSB - Least Significant Bit, bit bn phi) ca data s c truyn trc v cui cng l bit c trng s ln nht (MSB - Most Significant Bit, bit bn tri). Parity bit Parity l bit dng kim tra d liu truyn c ng khng (mt cch tng i). C 2 loi parity l parity chn (even parity) v parity l (odd parity). Parity chn ngha l s lng s 1 trong d liu bao gm bit parity lun l s chn. Ngc li tng s lng cc s 1 trong parity l lun l s l. V d: nu d liu ca bn l 10111011 nh phn, c tt c 6 s 1 trong d liu ny, nu quy nh parity chn c dng, bit parity s mang gi tr 0 m bo tng cc s 1 l s chn (6 s 1). Nu parity l c yu cu th gi tr ca parity bit l 1. Sau khi truyn chui d liu km theo c bit parity trn, bn nhn thu c v kim tra li tng s s 1 (bao gm c bit parity), nu vi phm quy nh parity t trc th ta khng nh l d liu nhn c l sai, cn nu khng vi phm th cng khng khng nh c iu g (mang tnh tng i). Hnh 2 m t mt v d vi parity chn c s dng. Parity bit khng phi l bit bt buc v v th chng ta c th loi bit ny khi khung truyn. Stop bits

Stop bits l 01 hoc nhiu bit bo cho thit b nhn rng mt gi d liu c gi xong. Sau khi nhn c stop bits, thit b nhn s tin hnh kim tra khung truyn m bo tnh chnh xc ca d liu. Stop bits l cc bit bt buc xut hin trong khung truyn, trong 8051 c th l 01 hoc 02 bit, v chng l cc bit cao (1). Trong v d hnh 2: c 2 stop bits c dng cho khung truyn.

Hnh 2: Mt khung truyn trong truyn thng ni tip khng ng b 2. Truyn thng ni tip trong 8051 2.1 Phn cng 2.1.1 Cc chn RxD v TxD trong 8051 Trong 8051 c hai chn c dng cho truyn v nhn d liu ni tip. Hai chn ny c gi l TxD v RxD, l mt phn ca cng P3 ( l P3.0-chn 10 v P3.1-chn 11). Cc chn ny hot ng vi mc logic TTL (mc logic cao 1 c gn cho Vccv mc logic thp c gn cho 0v).

V cc my tnh c s dng rt rng ri truyn thng vi cc h thng vi iu khin, do vy ta ch yu tp trung vo truyn thng ni tip ca 8051 vi cng COM RS232 ca PC. 2.1.2 Chun giao din RS232 cho php tng thch gia cc thit b truyn thng d liu c sn xut bi cc hng khc nhau th mt chun giao din c gi l RS232 c thit lp bi hip hi cng nghip in t EIA vo nm 19960. Nm 1963 n c sa chnh v c gi l RS232A v vo cc nm 1965 v 1969 th c i thnh RS232B v RS232C. y chng ta n gin ch hiu l RS232. Ngy nay RS232 l chun giao din I/O vo - ra ni tip c s dng rng ri nht. Chun ny c s dng trong my tnh PC v hng lot cc thit b khc nhau. Cc chn ca cng RS232

Hnh 3 l s chn ca cp RS232 v chng thng c gi l u ni DB 25. Trong l hiu th u ni cm vo (u c) gi l DB - 25p v u ni ci c gi l DB - 25s.

Hnh 3: u ni DB - 25 ca RS232. V khng phi tt c mi chn ca cng RS232 u c s dng trong cp ca my tnh PC, nn IBM a ra phin bn ca chun vo/ra ni tip ch s dng c 9 chn gi l DB 9 nh trnh by bng 1 v hnh 4.

Hnh 4: u ni DB - 9 ca RS232. S chn 1 2 3 4 5 6 7 8 9 Data carrier detect (DCD) Received data (RxD) Transmitted data (TxD) Data terminal ready (DTR) Signal ground (GND) Data set ready (DSR) Request to send (RTS) Clear to send (CTS) Ring indicator (RI) M t Trnh tn hiu mng d liu D liu c nhn D liu c gi u d liu sn sng t ca tn hiu D liu sn sng Yu cu gi Xo gi Bo chung

Bng 1: Cc tn hiu ca cc chn u ni DB - 9 trn my tnh. 2.1.4 Ni ghp 8051 ti RS232 Chun RS232 c thit lp trc h logic TTL rt lu do vy in p u vo v u ra ca n khng tng thch vi mc TTL. Trong RS232 th mc logic 1 c biu din t in p - 3v n -25v trong khi mc 0 th ng vi in p + 3v n +25v lm cho in p - 3v n + 3v l khng xc nh. V l do ny kt ni mt chun RS232 bt k n mt h vi iu khin 8051 th ta phi s dng cc b bin i in p (nhMAX232) chuyn i cc mc in p RS232 v cc mc in p TTL s c

chp nhn bi cc chn TxD v RxD ca 8051 v ngc li. Cc IC MAX232 nhn chung c coi nh cc b iu khin ng truyn. Mt im mnh ca IC MAX232 l n dng in p ngun +5v cng vi in p ngun ca 8051. Hay ni cch khc ta c th nui 8051 v MAX232 vi cng mt ngun +5v, m khng phi dng hai ngun nui khc nhau. IC MAX232 c hai b iu khin ng truyn nhn v truyn d liu nh trnh by trn hnh 5. Cc b iu khin c dng cho chn TxD c gi l T1 v T2, cho chn RxD gi l R1 v R2. Trong nhiu ng dng th ch c 1 cp c dng. V d: hnh di ta ch dng n T2 v R2 c dng lm 1 cp i vi TxD v RxD ca 8051, cn cp R1 v T1 th khng cn n. rng trong IC MAX232, T1 c gn T1in (chn 11) v T1out (chn 14): Chn T1in l pha TTL v c ni ti chn RxD ca b vi iu khin. Chn T1out l pha RS232 c ni ti chn RxD ca u ni DB caRS232. B iu khin R1 cng c gn R1in (chn 13) v R1out (chn 12): Chn R1in (chn s 13) l pha RS232 c ni ti chn TxD u niDB ca RS232. Chn R1out (chn s 12) l pha TTL c ni ti chn RxD ca b vi iu khin. Tng t cho T2 v R2. Xem hnh 5:

Hnh 5: S bn trong ca MAX232 v S ni ghp 8051 -Max232 - cng COM DB-9. B MAX232 i hi 4 t ha gi tr t 1 n 22F. gi tr ph bin nht cho cc t ny l 22F. 2.2 Lp trnh phn mm Trong phn ny chng ta s nghin cu v cc thanh ghi truyn thng ni tip ca 8051 v cch lp trnh chng truyn v nhn d liu ni tip.

2.2.1 Thanh ghi SBUF SBUF l thanh ghi 8 bit c dng ring cho truyn thng ni tip trong 8051. i vi mt byte d liu mun truyn qua ng TxD th n phi c t trong thanh ghi SBUF. Tng t, SBUF cng gi mt byte d liu khi n c nhn t ng RxDca 8051: Khi mt byte c ghi vo thanh ghi SBUF n s c ng khung vi cc bit Start, Stop v c truyn ni tip quan chn TxD. Khi cc bit c nhn ni tip t RxD th 8051 m khung loi tr cc bit Start, Stop ly ra mt byte t d liu nhn c v t byte vo thanh ghi SBUF. 2.2.2 Thit lp ch truyn bng thanh ghi SCON iu u tin chng ta phi lm l g khi s dng cng ni tip tch hp ca 8051? R rng l cu hnh cho n. iu ny cho php chng ta bo vi 8051 bit: bao nhiu bit d liu chng ta mun truyn, tc truyn. Vy lm th no xc nh cc iu ? Nh thanh ghi SCON, l thanh ghi 8 bit c dng lp trnh vic ng khung d liu, xc nh cc ch lm vic ca truyn thng ni tip. SCON l thanh ghi c th nh a ch theo bit. Di y l m t cc bit khc nhau ca thanh ghi SCON:

Hnh 6: Thanh ghi iu khin cng ni tip SCON. Cc bit SM0, SM1 y l cc bit D7 v D6 ca thanh ghi SCON. Chng c dng xc nh cc ch ng khung d liu, c 4 ch :

Hnh 7: Cc ch xc nh bi 2 bit SM0 v SM1 (*) Lu : tc truyn ch ra trong bng ny c tng gp i nu bit PCON.7 (bit SMOD) c thit lp ln 1, mc nh ca h thng l PCON.7=0. Trong bn ch trn ta ch quan tm n ch 1. Khi ch 1 c chn th d liu c ng khung thnh 10 bit: gm 1 bit Start, sau l 8 bit d liu, v cui cng l 1 bit Stop. Quan trng hn l ch ni tip 1 cho php tc baud thay i v c thit lp bi Timer1 ca 8051. Bit SM2 Bit SM2 l bit D5 ca thanh ghi SCON. Bit ny cho php kh nng a x l ca 8051. i vi cc ng dng ca chng ta, t SM2 = 0 v ta khng s dng 8051 trong mi trng a x l. Bit REN REN (Receive Enable) l bit cho php nhn (bit D4 ca thanh ghi SCON). Khi bitREN cao th n cho php 8051 nhn d liu trn chn RxD ca n. V kt qu l nu ta mun 8051 va truyn va nhn d liu th bit REN phi c t ln 1. Bit ny c th c dng khng ch mi vic nhn d liu ni tip v n l bit cc k quan trng trong thanh ghi SCON. Bit TB8 v RB8 Bit TB8 v RB8 c dng trong ch ni tip 2 v 3. Ta t TB8=0 v RB8=0v n khng c s dng trong cc ng dng ca mnh. Ni thm, trong ch 2 v 3 th c 9 bit d liu c truyn i hoc nhn v. BitTB8 s cha bit d liu th 9 khi truyn, cn bit RB8 s cha bit d liu th 9 khi nhn, trong ch ni tip 1 th bit RB8 ny nhn mt bn sao ca bit Stop khi mt d liu 8 bit c nhn, v ta cng khng cn quan tm. Cc bit TI v RI

Cc bit ngt truyn TI v ngt nhn RI l cc bit D1 v D0 ca thanh ghi SCON. Cc bit ny l cc k quan trng ca thanh ghi SCON: Khi 8051 kt thc truyn mt k t 8 bit th n bt TI bo rng n sn sng truyn mt byte khc. Bit TI c bt ln trc bit Stop. Khi 8051 nhn c d liu ni tip qua chn RxD v n tch cc bit Start v Stop ly ra 8 bit d liu t vo SBUF, sau khi hon tt n bt c RI bo rng n nhn xong 1 byte v cn phi ly i ko d liu b mt. C RIc bt khi ang tch bit Stop. 2.2.3 Thit lp tc baud trong 8051 Mt khi cc ch cng ni tip c cu hnh, vic tip theo l chng trnh cn phi cu hnh tc baud cho cc cng ni tip. iu ny ch p dng cho ch Serial Port 1 v 3. Cn ch 0 v 2, tc truyn c xc nh da trn tn s dao ng ca thch anh: Trong ch 0: tc truyn lun lun l tn s dao ng chia cho 12. iu ny c ngha l nu bn ang s dng thch anh tn s 11.059Mhz, tc truyn ca ch 0 s lun lun l 921.583 baud. Trong ch 2: tc truyn lun lun l tn s dao ng chia cho 64, do , vi thch anh tn s 11.059Mhz s mang li mt tc truyn 172.797 baud. Trong ch 1 v 3: tc truyn c xc nh bng cch ci t Timer1. Phng php ph bin nht l ci t Timer1 ch t ng np li 8-bit (ch 2) v thit lp mt gi tr np li (cho TH1) to ra mt tc truyn. Nh ta bit trc y, th 8051 chia tn s thch anh cho 12 ly tn s chu k my. B UART truyn thng ni tip ca 8051 li chia tn s chu k my cho 32mt ln na trc khi n c dng bi b nh thi Timer1 to ra tc baud:

Hnh 8: Tn s ca b truyn thng ni tip UART 2.2.3.1 Nhn i tc baud trong 8051 C hai cch tng tc baud truyn d liu trong 8051: 1. S dng tn s thch anh cao hn. 2. Thay i mt bit trong thanh ghi iu khin cng sut PCON (Power Control) nh ch ra di y.

Hnh 9: Thanh ghi PCON Phng n 1 l khng kh thi trong nhiu trng hp v tn s thch anh ca h thng l c nh. Do vy, ta s tp trung thm d phng n 2: nhn i tc baud bng phn mm trong 8051 vi tn s thch anh khng i. iu ny c thc hin nh thanh ghi PCON, y l thanh ghi 8 bit. Trong 8 bit ny th c mt s bit khng c dng iu khin cng sut ca 8051. Bit dnh cho truyn thng ni tip l bit D7 (bitSMOD). Khi 8051 c bt ngun th bit SMOD ca thanh ghi PCON mc thp (0). Chng ta c th t n ln 1 bng phn mm v do vy nhn i c tc baud. Ti sao c c iu ? Ta hy lm r tip: Khi SMOD = 0 Khi SMOD = 0 th 8051 chia 1/12 tn s thch anh cho 32 v s dng n cho bTimer1 thit lp tc baud. y l gi tr mc nh ca SMOD khi 8051 bt ngun. Khi SMOD = 1 Khi SMOD = 1 th 8051 chia 1/12 tn s thch anh cho 16 (thay v chia cho 32nh khi SMOD = 0) v y l tn s c Timer1 dng thit lp tc baud. xc nh gi tr ci t trong TH1 to ra mt tc baud nht nh, chng ta c th s dng cc phng trnh sau y (gi s bit PCON.7=0): TH1 = 256 - ((Crystal / (12*32)) / Baud) = 256 - ((Crystal / 384) / Baud) (1)

Nu PCON.7=1 th tc truyn tng gp i, do phng trnh tr thnh: TH1 = 256 - ((2*Crystal / (12*32)) / Baud) = 256 - ((Crystal / 192) / Baud) (2)

V d 1: Nu chng ta c mt tinh th thch anh tn s 11.059Mhz v chng ta mun cu hnh cho cng ni tip t tc 19200 baud, th ta s dng phng trnh 1: TH1 = 256 - ((Crystal / 384) / Baud) TH1 = 256 - ((11059000/384) / 19200) TH1 = 256 - ((28799) / 19200) TH1 = 256-1,5 = 254,5

Nh bn c th thy: c c tc 19200 baud trn mt tinh th thch anh 11.059Mhz ta phi ci t TH1 mt gi tr 254,5. Nhng gi tr trong cc thanh ghi li l 1 s nguyn. Nu chng ta thit lp l 254, chng ta s c tc 14400 baud v nu chng ta thit lp l 255, chng ta s c tc 28800 baud. Nh vy dng nh chng ta khng th ci t chnh xc tc baud c ?!! Nhng ta li c mt cch khc ci t c tc 19200 baud. Chng ta n gin ch cn t bit PCON.7=1 (bit SMOD). Khi ta tng gp i tc baudv s dng phng trnh 2 c cp trn. V vy chng ta c: TH1 = 256 - ((Crystal / 192) / Baud) TH1 = 256 - ((11059000/192) / 19200) TH1 = 256 - ((57.699) / 19.200) TH1 = 256 - 3 = 253 Vy: c c tc 19200 baud vi mt tinh th thch anh tn s11.059MHz chng ta phi: 1. Cu hnh ch Serial Port 1 hoc 3. 2. Cu hnh Timer 1 ch 2 (8-bit t ng np li). 3. Ci t TH1 gi tr 253 (FDH). 4. Set bit PCON.7=1 (SMOD) tng gp i tc truyn (19200 baud). 2.2.4 Lp trnh 8051 truyn d liu ni tip lp trnh 8051 truyn cc byte k t ni tip th cn phi thc hin cc bc sau y: Np thanh ghi TMOD gi tr 20H: bo rng s dng Timer1 ch 2 thit lp ch baud. Np thanh ghi TH1 cc gi tr ph hp thit lp ch baud truyn d liu ni tip. Np thanh ghi SCON gi tr 50H bo ch ni tip 1 ng khung 8 bit d liu, 1 bit Start v 1 bit Stop. Bt TR1=1 khi ng Timer1. Xo bit c truyn d liu: TI=0. Byte k t cn phi truyn c ghi vo SBUF. Bit c truyn TI c kim tra bng mt vng lp i n lc d liu c truyn xong (c TI=1). truyn k t tip theo quay tr v bc 5. Cc bn hy quan st 2 v d sau thc hnh: V d 2:

1. 2. 3. 4. 5. 6. 7. 8.

Hy vit chng trnh cho 8051 truyn d liu ni tip mt k t D vi tc 4800 baud lin tc ln my tnh. Li gii: Chng trnh s dng ngn ng C lp trnh trn Keil C uVision3, m phng trnProteus, hin th ln my tnh qua giao din Hyper Terminal Hercules. (Proteus v Hercules s dng 2 cng COM o c to ra v kt ni vi nhau bi chng trnh Configure Virtual Serial Port Driver) #include<at89x51.h> void send(unsigned char a); main() { TMOD=0x20; TH1=0xFA; SCON=0x50; TR1=1; while(1) { send('D'); } } void send(unsigned char a) { SBUF=a; while(TI==0){} TI=0; } //khai bo th vin cho 89c51 //khai bo nguyn mu hm gi 1 k t //Chng trnh chnh //Chn Timer1, ch 2 //Ci t tc 4800 baud //0101 0000: Chn ch 1, Cho php nhn //Khi ng Timer1 //Vng lp v hn //Gi hm gi 1 k t ln my tnh //nh ngha hm gi 1 k t //Ghi 1 byte d liu vo thanh ghi SBUF //vng lp i c truyn TI ln 1 //Xa c truyn TI sau khi truyn xong

Hnh 10: S nguyn l mch m phng V D 2 trn Proteus

Hnh 11: Kt qu truyn ln my tnh V D 2 qua giao din Hercules V d 3: Hy vit chng trnh 8051 truyn dng ch DienTuMayTinh.Com lin tc vi tc 9600 baud (8 bit d liu, 1 bit Stop) ln my tnh. Li gii: #include<at89x51.h> #include<string.h> void send(unsigned char a); void sendchuoi(char *a); main() { //Khai bo th vin cho 89c51 //Khai bo th vin s dng hm strlen() //khai bo nguyn mu hm gi 1 k t //khai bo nguyn mu hm gi 1 chui //Chng trnh chnh

TMOD=0x20; TH1=0xFD; SCON=0x50; TR1=1;

//Chn Timer1, ch 2 //Ci t tc 9600 baud //0101 0000: Chn ch 1, Cho php nhn //Khi ng Timer1

while(1) //Vng lp v hn { sendchuoi("DienTuMayTinh.Com"); //Gi hm gi 1 chui send(10); //Gi du xung dng } } void send(unsigned char a) { SBUF=a; while(TI==0){} TI=0; } void sendchuoi(char *a) { int i,n; n=strlen(a); for(i=0;i<n;i++) { send(a[i]); } } //nh ngha hm gi 1 k t //Ghi 1 byte d liu vo thanh ghi SBUF //vng lp i c truyn TI ln 1 //Xa c truyn TI sau khi truyn xong //nh ngha hm gi 1 chui k t //Khai bo bin cc b s nguyn: i,n //Tnh di ca chui *a, lu vo bin n //Vng lp gi ln lt tng k t ln, //cho n khi ht chui *a (k t th n-1). //Gi hm gi 1 k t.

Hnh 12: Kt qu truyn ln my tnh V D 3 qua giao din Hercules Tm quan trng ca c TI hiu tm quan trng ca c ngt TI ta hy xt trnh t cc bc di y m 8051 phi thc hin khi truyn mt k t qua ng TxD: 1. Byte k t cn phi truyn c ghi vo SBUF. 2. Truyn bit Start 3. Truyn k t 8 bit ln lt tng bit mt. 4. Bit Stop c truyn xong, trong qu trnh truyn bit Stop th c TI c bt (TI = 1) bi 8051 bo sn sng truyn k t k tip. 5. Bng vic kim tra c TI ta bit chc rng ta khng np qu nhanh vo thanh ghi SBUF. Nu ta np mt byte vo SBUF trc ghi TI c bt th phn d liu ca byte trc cha truyn ht s b mt. Ta phi i 8051 bt c TI bo truyn xong mt byte v n sn sng truyn byte k tip.

6. Trc khi SBUF c np mt byte mi th c TI phi c xa kim tra cho ln truyn d liu tip theo. T phn trnh by trn y ta kt lun rng: bng vic kim tra bit c ngt TI ta bit c 8051 c sn sng truyn mt byte khc khng. Quan trng hn cn phi ni y l bit c TI c bt bi 8051 khi n hon tt vic truyn mt byte d liu, cn vic xo n th phi c lp trnh vin thc hin. Cng cn lu rng, nu ta ghi mt byte vo thanh ghi SBUF trc khi c TI c bt th s c nguy c mt phn d liu ang truyn. Bit c TI c th kim tra bng mt vng lp hoc c th s dng ngt, v ta s bn bi ngt sau. 2.2.5 Lp trnh 8051 nhn d liu ni tip lp trnh 8051 nhn cc byte k t ni tip th phi thc hin cc bc sau y: 1. Np gi tr 20H vo thanh ghi TMOD: bo s dng b Timer1, ch 2 (8 bit, t ng np li) thit lp tc baud. 2. Np TH1 cc gi tr ph hp thit lp tc baud. 3. Np gi tr 50H vo thanh ghi SCON bo s dng ch truyn ni tip 1: d liu c ng gi bi 8 bit d liu, 1 bit Start v 1 bit Stop. 4. Bt TR1=1 khi ng Timer1. 5. Xo c nhn RI: RI=0. 6. Bit c nhn RI c kim tra bng mt vng lp m bo ton b k t c nhn (khi RI=1). 7. Khi RI c thit lp th trong SBUF c 1 byte. Cc ni dung ca n cn c c ngay trnh mt mt. 8. nhn mt k t tip theo quay tr v bc 5. Hy quan st v d sau thc hnh: V d 4: Hy lp trnh cho 8051 nhn cc byte d liu ni tip tc 9600 baud v bt cc Led trn Port 2 tng ng: My tnh gi xung s 1: 1 Led sng, s 2: 2 Led sng, , s 8: 8 Led sng, nu cc k t khc th tt tt c cc Led. Li gii: #include<at89x51.h> char c; main() { //Khai bo th vin cho 89c51 //Chng trnh chnh

TMOD=0x20; TH1=0xFD; SCON=0x50; TR1=1;

//Chn Timer1, ch 2 //Ci t tc 9600 baud //0101 0000: Chn ch 1, Cho php nhn //Khi ng Timer1

while(1) //Vng lp v hn { while(RI==1) //Vng lp kim tra c nhn RI { //Nu RI=1 tc l nhn 1 byte. c=SBUF; //lu d liu nhn c vo bin c RI=0; //Xa c nhn RI. } switch(c) //Kim tra k t va nhn c: tng ng { //trng hp no th thc thi lnh tngng. case '1': P2=0xFE; break; case '2': P2=0xFC; break; case '3': P2=0xF8; break; case '4': P2=0xF0; break; case '5': P2=0xE0; break; case '6': P2=0xC0; break; case '7': P2=0x80; break; case '8': P2=0x00; break; default: //mc nh l tt tt c Led. P2=0xFF; break; } }

Hnh 13: Kt qu m phng V D 4 (qu trnh nhn ln lt cc k t 0,1,2,...,8 truyn xung t my tnh). Tm quan trng ca c RT Khi nhn cc bit qua chn RxD ca n th 8051 phi tri qua cc bc sau: 1. N nhn bit Start bo rng bit sau n l bit d liu u tin cn phi nhn. 2. K t 8 bit c nhn ln lt tng bit mt. Khi bit cui cng c nhn th mt byte c hnh thnh v t vo trong SBUF. 3. Khi bit Stop c nhn th 8051 bt RT = 1 bo rng ton b k t c nhn v phi ly i trc khi n b byte mi nhn v ghi ln. 4. Bng vic kim tra bit c RI khi n c bt ln chng ta bit rng mt k t c nhn v ang nm trong SBUF. Sao ni dung SBUF vo ni an ton trong mt thanh ghi hay b nh khc trc khi n b mt. 5. Sau khi SBUF c ghi vo ni an ton th c RI c xo v 0 chun b kim tra chu trnh tip theo. T m t trn y ta rt ra kt lun rng bng vic kim tra c RI ta bit 8051 nhn c mt byte k t cha. Sai khi c RI=1, nu ta khng sao c ni dung ca thanh ghi SBUF vo ni an ton th c nguy c ta b mt k t va nhn c. Quan trng hn l phi nh rng c RI c 8051 bt ln nhng lp trnh vin phi xo n sau khi nhn c d liu. Cng nn nh rng, nu ta sao ni dung SBUF vo ni an ton trc khi RI c bt th ta mo him sao d liu cha y . Bit c RI c th c kim tra bi mt vng lp hoc bng ngt m ta s bn bi sau.

2.2.6 Nhn d liu ni tip da trn cc ngt Ta phi thy rng tht lng ph thi gian cc b vi iu khin phi lun kim tra cc c TI v RI. Do vy, tng hiu sut ca 8051 ta c th lp trnh cc cng truyn thng ni tip ca n bng cc ngt. Ni dung ny s c cp n bi tip theo.

Nh vy qua bi hc ny chng ta bit truyn thng ni tip trong 8051 s dng phng php khng ng b, bng cch ng khung d liu gia cc bit Start, bit Stop. Thanh ghi SBUF c s dng vn chuyn d liu, cn mun thit lp cc ch truyn ta s dng thanh ghi SCON, ci t tc baud ta s dng Timer1, cc cTI v RI l rt quan trng v n bo cho ta bit lc no truyn hoc nhn xong d liu. truyn thng ni tip vi my tnh qua cng COM th chng ta phi chuyn i cc mc in p cho ph hp bng cch s dng IC Max232. cc v d trn, chng ta cng bit cch gi 1 k t hoc mt chui k t ln my tnh. Vy cn mun gi ln gi tr ca bin, chng ta s thc hin nh th no? Hon ton tng t nh gi cc chui, v d sau y s thc hin cng vic ny, bao gm gi cc bin s nguyn, v s thc. Gi gi tr ca bin #include <at89x51.h> //Khai bo th vin 89x51 #include <string.h> //Khai bo th vin x l chui unsigned long a=4294967295; //Bin unsigned long, min gi tr: 0->4294967295 float b=511.9999; //Bin float. void send(unsigned char a); //Khai bo nguyn mu hm gi 1 k t void sendsonguyen(unsigned long n); //hm gi 1 s nguyn void sendsothuc(float n); //hm gi 1 s thc main() //Chng trnh chnh { TMOD=0x20; //Chn Timer1, ch 2 TH1=0xFD; //Ci t tc 9600 baud SCON=0x50; //0101 0000: Chn ch 1, Cho php nhn TR1=1; //Khi ng Timer1 while(1) { sendsonguyen(a); send(10); //Vng lp v hn //Gi bin s nguyn //Gi du xung dng

sendsothuc(b); send(10); }

//Gi bin s thc //Gi du xung dng

} void send(unsigned char a) //nh ngha hm gi 1 k t { SBUF=a; //Ghi 1 byte d liu vo thanh ghi SBUF while(TI==0){} //vng lp i c truyn d liu TI bt ln 1 TI=0; //Xa c TI sau khi truyn d liu xong } void sendsonguyen(unsigned long n) // nh ngha hm gi 1 s nguyn { if(n!=0) //Trng hp s nguyn #0 { unsigned char a[11]; //mng cha cc k t s sau khi tch s int i; //bin ch s cho vng for for(i=0;n>0;i++) //Vng lp tch cc ch s thnh k t { a[i]=(n%10)+48; //tch ly ch s hng n v,m ha ASCII n=n/10; //loi b ch s hng n v } a[i]=NULL; //k t cui cng ca chui phi l NULL for(i=strlen(a);i>=0;i--) //Vng lp gi ln lt tng k t ln, { //cho n khi ht chui a[]. send(a[i]); //Gi hm gi 1 k t. } } else send('0');

//Trng hp s nguyn =0: ch cn gi s

0 } void sendsothuc(float n) // nh ngha hm gi 1 s thc { unsigned long a=n/1; //Tch ly phn nguyn ca s thc unsigned long b=(n-a)*10000; //Tch ly phn thp phn ca s thc sendsonguyen(a); //Gi hm gi phn nguyn if(b!=0) //Trng hp tn ti phn thp phn. { send('.'); //Gi k t . sendsonguyen(b); //Gi hm gi phn thp phn } //Nu khng c phn thp phn th khng lm g

Hnh 14: Kt qu nhn c trn giao din Hercules my tnh

You might also like