You are on page 1of 14

B m/ b nh thi trong 8051 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 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. 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.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.1.1 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.1.2 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.1.3 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. 1.1.3.1 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 1 M0 0 1 0 1 Ch 0 1 2 3 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

1.1.3.2 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 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 Chu k b nh thi 1/1,6666MHz=0,6us 1/1MHz=1us 1/0,9216MHz=1,085us

XTAL = 11,0592MHz cho php h thng 8051 truyn thng vi PC m khng c li. 1.1.3.3 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.2 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.2.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_m 1,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.2.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. 1. 2. 3. 4. 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: 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; } //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

1.3 Ch 0 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.4 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.4.1 Cc bc lp trnh cho ch 2 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

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

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.

2. 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() { TMOD=0x60; TH1=0x00; P3_5=1; TR1=1; while(1) { P2=TL1; } }

//khai bo th vin 89x51 //chng trnh chnh //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

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.

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.

You might also like