of 81 /81
CHƯƠNG 1. Bộ đếm/ bộ định thời trong 8051 1.1. Mục tiêu Kết thúc bài học này, bạn sẽ nắm được: Bộ đếm, bộ định thời là gì? Các thanh ghi liên quan Cách thức hoạt động của bộ đếm/bộ định thời Các bước lập trình bộ đếm/bộ định thời 1.2. Giới thiệu Bộ đếm/Bộ định thời: Đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản: đếm các xung nhịp. Mỗi khi có thêm một xung nhịp tại đầu vào đếm thì giá trị của bộ đếm sẽ được tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm đi 01 đơn vị (trong chế độ đếm lùi/đếm xuống). Xung nhịp đưa vào đếm có thể là một trong hai loại: Xung nhịp bên trong IC: Đó là xung nhịp được tạo ra nhờ kết hợp mạch dao động bên trong IC và các linh kiện phụ bên ngoài nối với IC. Trong trường hợp sử dụng xung nhịp loại này, người ta gọi là các bộ định thời (timers). Do xung nhịp bên loại này thường đều đặn nên ta có thể dùng để đếm thời gian một cách khá chính xác. Xung nhịp bên ngoài IC: Đó là các tín hiệu logic thay đổi liên tục giữa 02 mức 0-1 và không nhất thiết phải là đều đặn. Trong trường hợp này người ta gọi là các bộ đếm (counters). Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bên ngoài như đếm các sản phầm chạy trên băng chuyền, đếm xe ra/vào kho bãi…

lap trinh 8051

Embed Size (px)

DESCRIPTION

lap trinh 8051

Text of lap trinh 8051

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 quanCch thc hot ng ca b m/b nh thiCc 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 ccb nh thi(timers). Do xung nhp bn loi ny thng u n nn ta c th dng m thi gianmt 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 ccb m(counters). ng dng ph bin ca cc b m lm cc s kin bn ngoinh 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 ccb nh thi to mt b tr thi gian hoc nh ccb 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. Phn1l Lp trnh b nh thi, v phn2l Lp trnh cho b m.

Cc b nh thi ca 8051

8051 c hai b nh thi lTimer 0vTimer 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.

Cc thanh ghi c s ca b nh thi

C hai b nh thiTimer 0vTimer 1u c di16 bitc truy cp nh hai thanh ghi tch bitbyte thpvbyte cao. Chng ta s bn ring v tng thanh ghi.

Cc thanh ghi ca b Timer 0

Thanh ghi 16 bit ca bTimer 0c truy cp nh byte thp v byte cao:

Thanh ghi byte thp c gi lTL0(Timer0 Low byte).Thanh ghi byte cao c gi lTH0(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

Cc thanh ghi ca b Timer 1

Ging nhtimer 0, b nh thi gianTimer 1cng di 16 bit v thanh ghi 16 bit ca n cng c chia ra thnh hai byte lTL1vTH1. 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.

Thanh ghi TMOD

C hai b nh thiTimer 0vTimer 1u dng chung mt thanh ghi c gi lTMOD: thit lp ccch lm vic khc nhau ca b nh thi.

Thanh ghiTMODl thanh ghi 8 bitgm c:

4 bit thp thit lp cho bTimer 0.4 bit cao thit lp choTimer 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.

Cc bit M1, M0

L ccbit ch ca cc b Timer 0 v Timer 1. Chng chnch ca cc b nh thi:0,1,2v3nhbng di. Chng ta ch tp chung vo cc ch thng c s dng rng ri nht lch 1vch 2. Chng ta s sm khm ph ra cc c tnh ca cc ch ny sau khi khm phn cn li ca thanh ghiTMOD. Cc ch c thit lp theo trng thi caM1vM0nh sau:

M1M0Ch Ch hot ng

000B nh thi 13 bit:8 bit l b nh thi/b m, 5 bit t trc.

011B nh thi 16 bit: khng c t trc.

102B nh thi 8 bit: t np li.

113Ch b nh thi chia tch.

Bng 1:Cc ch hot ng ca b m/b nh thi

Bit C/T(Counter/Timer)

Bit ny trong thanh ghiTMODc dng quyt nh xem b nh thi c dng nh mt myto trhayb ms kin. Nu bitC/T = 0th n c dng nh mtb nh thi to trthi 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 anhgn vi 8051.

Hnh 4:Tn s ca b m/b nh thi

V d 2:

Tn s thch anhTn s b nh thiChu k b nh thi

20MHz20MHz/12=1,6666MHz1/1,6666MHz=0,6us

12MHz12MHz/12=1MHz1/1MHz=1us

11,0592MHz11,0592MHz/12=0,9216MHz1/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 anh11,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.

Bit cng GATE

Mt bit khc ca thanh ghiTMODl bit cngGATE. trnhnh 3ta thy c hai b nh thi Timer0 v Timer1 u c bitGATE. Vy bitGATEdng 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:

Vickhi ngvdngb nh thi c khi ng bng phn mm bi ccbit khi ng b nh thi TRlTR0 v TR1. iu ny c c nh cc lnh Set bitTR0ln1(khi ng b nh thi) hoc Clear bitTR0(dng b nh thi) i viTimer 0, v tng tTR1i viTimer 1.Cc lnh ny c tc dng khi bit GATE = 0trong thanh ghiTMOD.Vic khi ng v ngng b nh thi bngphn cng t ngun ngoibng cch t bitGATE = 1trong thanh ghiTMOD.

Tuy nhin, trnh s ln ln ngay t by gi ta tGATE = 0c 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 ghiTMOD, 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.

Lp trnh cho ch 1

Di y l nhng bc hot ng ca timer ch 1:

y l b nh thi16 bit, do vy n cho php cc gi tr0000nFFFFHc np vo cc thanh ghiTLvTHca b nh thi.Sau khiTLvTHc np mt gi tr khi to 16 bit th b nh thi phi ckhi ng. iu ny c thc hin bi vic SET bitTR0i viTimer 0v SET bitTR1i viTimer 1.Sau khi b nh thi c khi ng, n bt u m ln. N m ln cho n khi t c gii hnFFFFHca n. Sau , khi n quay tFFFFHv0000th n bt ln bit cTFc gi lc 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 bitTR0i viTimer 0hocTR1i viTimer 1. y cng cn phi nhc li l i vi mi b nh thi u c cTFring ca mnh:TF0i viTimer 0vTF1i viTimer 1.Sau khi b nh thi t c gii hn ca n l gi trFFFFH, mun lp li qu trnh th cc thanh ghiTHvTLphi c np li vi gi tr ban u v cTFphi c xa v 0.

Hnh 5:Timer/counter ch 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:1.Np gi trTMODcho thanh ghi bo nh thi no (Timer0 hay Timer1) c s dng v ch no c chn.2.Np cc thanh ghiTLvTHvi cc gi tr m ban u.3.Khi ngb nh thi.4.Duy tr kim tra cb nh thiTFbng mt vng lp xem n c bt ln 1 khng. Thot vng lp khiTFc ln cao.5.Dngb nh thi.6.Xo c TFcho vng k tip.7.Quay tr li bc 2 np li TL v TH.

Cng thc tnh ton tr s dngch 1(16 bit) ca b nh thi i vi tn s thch anh XTAL = f (MHz):

a) Tnh theo s Hexb) Tnh theo s thp phn

(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.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).

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 //khai bo th vin cho VK 89x51void delay(void); //khi bo nguyn mu hm con to trmain(){ P1_5=1; //khi to chn P1_5 mc cao while(1) //vng lp v hn { delay(); //chng trnh con to tr P1_5=~P1_5; //o tn hiu chn P1_5 }}void delay(void) //nh ngha hm delay{ TMOD=0x01; //chn timer0, ch 1, 16Bit TL0=0xF2; //np gi tr cho TL0 TH0=0xFF; //np gi tr cho TH0 TR0=1; //khi ng timer0 while(!TF0){} //vng lp kim tra c TF0 TR0=0; //ngng timer0 TF0=0; //xa c TF0}

Trong chng trnh chnh (hm main) thc hin gi hm condelay()to tr, v o lin tc tn hiu u ra chn P1_5. Trong chng trnh condelay()trn y ch cc bc sau:1.TMOD c np.2.Gi tr FFF2H c np v TH0 - TL03.B nh thi Timer0 c khi ng bi lnh Set bit TR0.4.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.5.B Timer0 c dng bi lnh clear bit TR0.6.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,9216MHzl 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 141,085s = 15,19s cho na chu k v c chu k l T = 215,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.

Tm cc gi tr cn c np vo b nh thi

Gi s rng chng ta bit lngthi gian trm ta cn th cu hi t ra l lm th no tm ra c ccgi trcn thit cho cc thanh thiTHvTL. 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 ghiTHvTL:1.Chia thi gian tr cn thit cho 1.085s2.Thc hin 65536 - n vi n l gi tr thp phn nhn c t bc 1.3.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.4.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) //nh ngha hm delay{ TMOD=0x01; //chn timer0 ch 1 16Bit TL0=0x00; //np gi tr cho TL0 TH0=0xEE; //np gi tr cho TH0 TR0=1; //khi ng timer0 while(!TF0){} //vng lp kim tra c TF0 TR0=0; //ngng timer0 TF0=0; //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 = 500usl 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) //nh ngha hm delay{ TMOD=0x10; //chn timer1 ch 1 16Bit TL1=0x1A; //np gi tr cho TL1 TH1=0xFF; //np gi tr cho TH1 TR1=1; //khi ng timer1 while(!TF1){} //vng lp kim tra c TF1 TR1=0; //ngng timer1 TF1=0; //xa c TF1}

Ch 0

Ch 0hon 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 gia0000n1FFFFtrongTH-TL. Do vy khi b nh thi t c gi tr cc i ca n l1FFFHth n s quay tr v0000v cTFc bt ln.

Lp trnh cho ch 2

Di y l nhng bc hot ng ca timer ch 2:

N l mt b nh thi8 bit, do vy n ch cho php cc gi tr t00nFFHc np vo thanh ghiTHca b nh thi.Sau khi 2 thanh ghiTHvTLc np gi tr ban u th b nh thi phi ckhi ng.Sau khi b nh thi c khi ng, n bt u m tng ln bng cchtng thanh ghi TL. N m cho n khi i gi tr gii hnFFHca n. Khi n quay tr v00tFFH, n thit lp c b nh thiTF. Nu ta s dng b nh thiTimer0th l cTF0, cnTimer1th l cTF1.Khi thanh ghiTLquay tr v00tFFH,cTFc bt ln 1 th thanh ghiTLc t ng np li vi gi tr sao chp t thanh ghiTH. lp li qu trnh chng ta n gin ch vicxo cTFv cho n chy m khng cn s can thip ca lp trnh vin np li gi tr ban u. iu ny lm choch 2 c gi l ch t np liso 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 thgi 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 victhit lp tn s baud trong truyn thng ni tip.

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:1.Np thanh ghi gi trTMOD bo b nh thi gian no (Timer0 hay Timer1) c s dng v ch lm vic no ca chng c chon.2.Np li thanh ghiTHvTLvi gi tr m ban u.3.Khi ngb nh thi.4.Duy tr kim tra cb nh thiTFbng cch s dng mt vng lp xem n c bt cha. Thot vng lp khiTFln cao.5.Dng b nh thi.6.Xo c TF.7.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 //khai bo th vin cho VK 89x51void delay(void); //khi bo nguyn mu hm con to trmain(){ TMOD=0x20; //chn timer1, ch 2, 8Bit, t np li TH1=0x00; //np gi tr cho TH1 TL1=0xFE; //np gi tr cho TL1 P1_5=1; //khi to chn P1_5 mc cao while(1) //vng lp v hn { delay(); //gi chng trnh con to tr P1_5=~P1_5; //o tn hiu chn P1_5 }}void delay(void) //nh ngha hm delay{ TR1=1; //khi ng timer1 while(!TF1){} //vng lp kim tra c TF1 TR1=0; //ngng timer1 TF1=0; //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 tr0xFE, k t chu trnh sau th thanh ghiTL1mi sao chp c gi tr TH1.

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 ccb 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 nhb nh thith ngun tn sl tn s thch anhca 8051. Tuy nhin, khi n c dng nh mtb mth ngun xung tng ni dung cc thanh ghi TH v TL l tbn ngoi 8051. ch b m, hy lu rng cc thanh ghiTMODvTH,TLcng 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 bitC/Ttrong thanh ghiTMOD: ta thy rng n quyt nh ngun xung ng h cho b m:

Nu bitC/T = 0th b nh thi nhn cc xung ng h t b giao ng thch anh ca 8051.Nu bitC/T = 1th b nh thi c s dng nh b m v nhn cc xung ng h t ngun bn ngoi ca 8051.

Do vy, nubitC/T = 1th b m tng ln khi cc xung c a n chn P3.4 (T0) i vicounter0v chn P3.5 (T1) i vicounter1.

ChnChn cngChc nngM t

14P3.4T0u vo ngoi cab m 0

15P3.5T1u vo ngoi cab 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 //khai bo th vin 89x51main() //chng trnh chnh{ TMOD=0x60; //0x60=0110 000 : C/T=1, b m 1, ch 2 t np TH1=0x00; //xa b m ban u

P3_5=1; //set chn vo cho b m TR1=1; //khi ng b m 1

while(1) //vng lp v hn { P2=TL1; //hin th s m c ra cng P2 }}

Trongv d 8chng ta s dng bcounter1nh b m s kin n m ln mi khi cc xung ng h c cp n chnP3.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 cTR0vTR1 bt/tt cc b m/b nh thi. Cc bit ny l mt b phn ca thanh ghiTCON. y l thanh ghi8 bit, nh c ch ra tronghnh 2:

4 bit trn c dng lu ct cc bitTFvTRcho c Timer/counter 0 v Timer/counter1.4 bit thp c thit lp dnh cho iu khin ccngtm 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 bitGATE = 1trong thanh ghiTMOD. Tt c nhng g chng ta va ni trong bi ny u gi thitGATE = 0. Khi GATE = 0 th b m/b nh thi c khi ng bng cc lnh Set bitTR0hocTR1. Vy iu g xy ra khi bit GATE = 1?NuGATE = 1th vic khi ng v dng b m/b nh thi c thc hin t bn ngoi qua chnP3.2(INT0) vP3.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.

Ngt trong 8051

Mc tiu

Kt thc bi hc ny, bn c th:

Phn bit c ch ngt vi hi vngNm r cc loi ngt trong 8051Ngt timer/counterNgt ngoiNgt truyn thng ni tipLp trnh cc ngtTrnh phc v ngt l g?Cho php ngt v cm ngtThit 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.1Phn 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 phpthm 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 phpngt(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 ccngt(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 hiungt. Khi nhn c tn hiungtth 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 ngtISR(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 bk 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 rtnhiu 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 trnmc u tinc 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 thche(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 c5ngt 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 ch0000H. y l a ch bt li ngun.2.2 ngt dnh cho cc b nh thi: 1 choTimer0v 1 choTimer1. a ch tng ng ca cc ngt ny l000BHv001BH.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 ngoiINT0vINT1tng ng. a ch tng ng ca cc ngt ngoi ny l0003Hv0013H.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 l0023H.

1.3 Trnh phc v ngt

i vi mi ngt th phi c mttrnh 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 chISRca n. Nhm v tr b nh c dnh ring lu gi a ch ca ccISRc gi lbngvector ngt. XemHnh 1.

Hnh 1:Bng vector ngt ca 8051.

Trong lp trnhCtrnKeil ccho 8051, chng ta khai botrnh phc v ngttheo cu trc sau:

Void Name(void)interruptX //(X: ls th t ca ngt){ // chng trnh phc v 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 calnh k tipvo ngn xp.N cnglu tnh trng hin tica tt c cc ngt.N nhy n mt v tr c nh trong b nh c gi lbngvector ngt, ni lu gi a ch ca mttrnh phc v ngt.B vi iu khin nhn a chISRt bng vector ngt v nhy ti . N bt u thc hin trnh phc v ngt cho n lnh cui cng caISRv 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 ngtIE(Interrupt Enable) a ch A8H chu trch nhim v vic cho php v cm cc ngt.Hnh 2trnh by chi tit v thanh ghiIE.

Hnh 2:Thanh ghi cho php ngtIE.

cho php mt ngt ta phi thc hin cc bc sau:

NuEA = 0thkhngc ngt no c p ng cho d bit tng ng ca n trongIEc gi tr cao.Bit D7- EAca thanh ghiIEphi c bt ln cao cho php cc bit cn li ca thanh ghi hot ng c.NuEA = 1th tt c mi ngt u c php v s c p ng nu cc bit tng ng ca chng trongIEcmc cao.

hiu r im quan trng ny ta hy xtv d 1.

V d 1: Hy lp trnh cho 8051:a) cho phpngt ni tip,ngt Timer0vngt phn cng ngoi 1(EX1)b) cmngt Timer0c) sau trnh by cchcm tt c mi ngtch bng mt lnh duy nht.Li gii:

#includemain(){ //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

Trong cc bi trc ta bit cch s dng cc b nh thiTimer0vTimer1bng phng phpthm d. Trong phn ny ta s s dng ccngt 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 thiTFc bt ln cao khi b nh thi t gi tr cc i v quay v0(Roll - over). Trong cc bi trc chng ta cng ch ra cch kim tra cTFbng mt vng lp. Trong khi thm d cTFth ta phi i cho n khi cTFc bt ln. Vn vi phng php ny l b vi iu khin b tri buc trong khi ch cTFc bt v khng th lm c bt k vic g khc.S dng ccngts gii quyt c vn ny v trnh c s tri buc b vi iu khin. Nu b ngt nh thi trong thanh ghiIEc 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 vISR. 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. Xemhnh 3vv d 2.

Hnh 3:Ngt b nh thiTF0vTF1.

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:-92A4H. Ta s dng timer0 8 bit.

#include //khai bo thu vin cho VK 89x51main(){ 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 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 cTF0, 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 trongv d 2:

1.Chng ta cho php ngt bTimer0vi lnhIE=0x82;trong chng trnh chnhmain().2.Trong khi d liu cngP0c nhn vo v chuyn lin tc sang cngP1th mi khi bTimer0tr v 0, cTF0c bt ln v b vi iu khin thot ra khi hmmain()v i n a ch000BH thc hinISRgn lin vi bTimer0.3.Trong trnh phc v ngtISRcaTimer0ta thy rng khng cn n lnh xa cTF0catimer0. L do ny l v8051 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 ,-1000FC18H15/1.085=14 ,-14FFF2H

#includebit 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 cTF1, 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 ngtINT0vINT1. Nh ni trn th chng c php v b cm bng vic s dng thanh ghiIE. Nhng cu hnh cho ngt ngoi c phn phc tp hn.C hai mc kch hot cho cc ngt phn cng ngoi:Ngt theo mcvngt theo sn.

Hnh 7:Ngt ngoiINT0vINT1

Di y l m t hot ng ca mi loi.

3.1 Ngt theo mc

ch ngt theo mc th cc chnINT0vINT1bnh thng mc caov nu mt tn hiu mc thpc 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 ngtmc nhkhi 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 xemv d 4.

V d 4: Gi s chnINT1c ni n cng tc bnh thng mc cao. Mi khi n n xung thpphi bt mt nLED chn P1.3 (bnh thng Led tt), khi n c bt ln n phi sng vi giy. Chng no cng tc cgi trng thi thpn LED phi sng lin tc.Li gii:

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

Lu :Trong chng trnh trn b vi iu khin quay vng lin tc trong vng lpwhile(1)ca chng trnh chnh.Mi khi cng tc trn chnP3.3(INT1) c kch hot th b vi iu khin thot khi vng lp v nhy n bng vector ngt ti a ch 0013H. TrnhISRchoINT1bt 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 tISRm chnINT1vn cn mc thpth b vi iu khin khi to li ngt, ngt li xy ra 1 ln na.Do vy, gii quyt vn ny th chnINT1phi 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 dngngt theo sn.Khi vi mi 1 ln n phm, d th no ngt cng ch thc hin 1 ln.Trc khi tm hiungt theo snl g? Ta hy xem quangt theo mchot ng nh th no.

Trch mu ngt theo mc

Cc chnP3.2vP3.3bnh thng c dng chovo/ranu cc BitINT0vINT1trong thanh ghiIEkhng c kch hot. Sau khi cc ngt phn cng trong thanh giIEc kch hot th b vi iu khinduy tr trch mutrn chnINTxi vi tn hiu mc thp1 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 chnINTxphi m bo rng thi gian tn ti tn hiumc thpl khong4 chu trnh myv khng c b hn, nu khng lu th ngt khng c thc hin.Tuy nhin trong qu trnh kch hotngt theo mc thpnn n li phi a lnmc caotrc khiISRthc 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 lngt 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 snl ngt s xy ra khi c mtsn mxut hin trn cc chn ngt ca vi iu khin. iu ny lm cho ngt theo sn khc phc c nhc im cangt theo mcnh ta thy trn. kch hot ch ngt theo snth chng ta phi vit chng trnh ci t cho cc bit ca thanh ghiTCON:

Hnh 11:Thanh ghiTCON.

Cc Bit IT0 v IT1

Cc bitTCON.0vTCON.2c coi nh l cc bitIT0vIT1tng ng. y l cc bit xc nh kiu ngt theo sn xung hay theo mc xung ca cc ngt phn cng trn chnINT0vINT1tng ng. Khi bt li ngun c 2 bit ny u c mc0 bin chng thnh ngt theo tn hiumc thp. Lp trnh vin c th iu khin mt trong s chng ln cao chuyn ngt phn cng bn ngoi thnhngt theo sn.

Cc Bit IE0 v IE1

Cc bitTCON.1vTCON.3cn c gi lIE0vIE1tng ng. Cc bit ny c 8051 dng bm kiu ngt theo sn xung, nu cc bitIT0vIT1bng0th c ngha l cc ngt phn cng l ngt theomc thpv cc bitIE0vIE1s khng dng n. Cc BitIE0vIE1ch c 8051 dng cht sn xungt cao xung thp trn cc chnINT0vINT1. Khi c chuyn dch sn xung trn chnINT0(hayINT1) th 8051 nh du (bt ln cao) cc bitIExtrn thanh ghiTCONv nhy n bng vector ngt v bt u thc hin trnh phc v ngtISR. Trong khi 8051 thc hinISRth khng c mt sn xung no c ghi nhn trn chnINT0(hayINT1) ngn mi ngt trong ngt. Ch trong khi thc hin lnh cui ca trnh phc v ngtISRth cc bitIExmi c 8051 t ng xa, v cc chn ngt li hot ng bnh thng.Ta thy rng cc bitIE0vIE1c 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 xtv d 5. Ch rng s khc nhau duy nht giav d 5vv d 4l lnh chuyn ngtINT1v kiungt theo sn. Khisn mca tn hiu c cp n chnINT1th n LED s bt ln mt lc. n LED c thi gian sng ph thuc vo tr bn trongISRcaINT1. Trongv d 4do bn chtngt theo mcca ngt th n LED cn sng chng no tn hiu chnINT1vn cn mc thp. Nhng trongv d 5ny bt li n LED th xung chnINT1phi c a ln cao ri sau b h xung thp to ra mtsn mlm kch hot ngt.

V d 5:

#include //Khai bo th vin cho VK 89x51main() //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}

Hnh 12:m phng ngt ngoi 1 theosn 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 casn m.

Hnh 13:Thi hn xung ti thiu pht hin ra cc ngt theo sn m vi tn s XTAL = 11.0592MHz

Sn mca xung c cht bi 8051 v c gi bi thanh ghiTCON. Cc bitTCON.1 (IE0)vTCON.3 (IE1)gi cc sn c cht ca chnINT0vINT1tng ng nh ch ra trnhnh 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 chnINTxny 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 bitIE0vIE1ca thanh ghiTCON:Khi cc trnh phc v ngtISRkt thc: Cc BitIE0vIE1c 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 chnINTxb 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 bitIEx. V l do ny m cc bitIExc gi l cc c bo ngt ang c phc v, c ny s ln cao khi 1sn mc pht hin trn chnINTxvgi mc caotrong ton b qu trnh thc hinISR. N ch b xo sau lnh cui cng caISR.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 truynTI(Transfer interrupt) c bt ln khi bit cui cng ca khung d liu -bit stopc truyn i, bo rng thanh ghiSBUFsn sng truyn byte k tip. Trong trng hp cRI(Receive Interrupt) th n c bt ln khi ton b khung d liu k cbit 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 (TIhayRI) 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 cmt ngt dnh ring cho truyn thng ni tip. Ngt ny c dng choc truyn v nhn d liu. Nu bit ngt truyn thngES-IE.4trong thanh ghiIEc php, th khi 1 trong 2 cRIhocTIbt 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 trnhISRny chng ta phi kim tra cc cTIvRI xem c no gy ra ngt p ng mt cch ph hp (xemv 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 tipCOMv gi n cngP0. Gi thit tn s XTAL l 11.0592MHz v tc baud 9600.Li gii:

#include //Khai bo th vin cho 89c51main() //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 tipRI }}

Hnh 15:M phng nhn cc k t0,1,2,3,4, t my tnh, gi nPort0. Trong v d trn ta ch n vai tr ca cRI. Trong trnh phc v ngt ni tip, ta phi kim tra c cTIv cRIv 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 tISRl lnh xo cc cRIvTI.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 theoHnh 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 tronghnh 16v 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 ngtIP: 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 hayPT2l Bit u tin ngt Timer2 (dng cho 8052)-Bit D4 hayPSl Bit u tin ngt cng ni tip-Bit D3 hayPT1l Bit u tin ngt Timer1-Bit D2 hayPX1l mc u tin ngt ngoi 1-Bit D1 hayPT0l mc u tin ngt Timer 0-Bit D0 hayPX0l 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 tronghnh 16bng 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 ngtIP(Interrupt Priority). Trnhnh 17l cc bit ca thanh ghi ny. Khi bt li ngun thanh thiIPcha hon ton cc s0 to ra trnh t u tin ngt theoHnh 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 ngtkhi 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 trongHnh 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 th1 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 ngtTimer1trong thanh ghiIEc bt ln 1 th mt lnh nhTF1=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 ngtISR. B vi iu khin 8051 c 6 ngt, trong co5 ngtngi dng c th truy cp c. l: 2 ngt cho cc thit b phn cng bn ngoiINT0vINT1, 2 ngt cho cc b nh thi lTF0vTF1v 1 ngt dnh chotruyn 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.

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 bng khung d liu trong truyn thng khng ng bChun giao din RS232Ni ghp 8051 vi chun RS232Cc bc lp trnh truyn thng ni tip cho 8051Ci t khung truynCi 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 dliu 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 1so 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 lng bvkhng ng b(d b):

Trongtruyn 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 thngkhng ng bch 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 tipkhng ng b:

1.1Baud 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 ls 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.2Frame(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 cnhtc baud,khung truynl mt yu t quan trng to nn s thnh cng khi truyn v nhn.Khung truynbao gm cc quy nh v s bit trong mi ln truyn, cc bit bo nhbit Startvbit Stop, cc bit kim tra nhParity, ngoi ra s lng cc bit trong mtdatacng c quy nh bi khung truyn.Hnh 2l mt v d ca mt khung truyn ca UART (truyn thng ni tip khng ng b):khung truynny c bt u bng 01start bit, tip theo l 08bit data, sau l 01bit paritydng kim tra d liu v cui cng l 02bits stop. Cng vic ny c gi lng gi d liu. Chng ta s i vo tm hiu cc thnh phn c trong mt khung truyn:

Start bit

Startl 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)

Datahay 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

Parityl 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 2m t mt v d vi parity chn c s dng.Parity bitkhng phi l bit bt bucv v th chng ta c th loi bit ny khi khung truyn.

Stop bits

Stop bitsl 01 hoc nhiu bit bo cho thit b nhn rng mt gi d liu c gi xong. Sau khi nhn cstop bits, thit b nhn s tin hnh kim tra khung truyn m bo tnh chnh xc ca d liu.Stop bitsl cc bit bt bucxut 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 lTxDvRxD, l mt phn ca cng P3 ( l P3.0-chn 10 v P3.1-chn 11). Cc chn ny hot ng vimc logic TTL(mc logic cao 1 c gn choVccv mc logic thp c gn cho0v).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 lRS232 c thit lp bi hip hi cng nghip in tEIAvo 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 nayRS232l 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 3l s chn ca cp RS232 v chng thng c gi l u niDB - 25. Trong l hiu th u ni cm vo (u c) gi l DB- 25pv u ni ci c gi lDB - 25s.

Hnh 3:u niDB - 25ca 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 lDB - 9nh trnh by bng 1vhnh 4.

Hnh 4:u niDB - 9ca RS232.

S chnM t

123456789Data 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)Trnh tn hiu mng d liuD liu c nhnD liu c giu d liu sn sngt ca tn hiuD liu sn sngYu cu giXo giBo 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 trchlogic TTLrt lu do vy in p u vo v u ra ca nkhng tng thch vimc 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 pRS232v cc mc in pTTLs c chp nhn bi cc chn TxD v RxD ca 8051 v ngc li. CcIC MAX232nhn chung c coi nh cc b iu khin ng truyn.Mt im mnh caIC MAX232l 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 MAX232c hai b iu khin ng truyn nhn v truyn d liu nh trnh by trnhnh 5. Cc b iu khin c dng cho chnTxDc gi lT1vT2, cho chnRxDgi lR1vR2. Trong nhiu ng dng th ch c 1 cp c dng. V d: hnh di ta ch dng nT2vR2c dng lm 1 cp i viTxDvRxDca 8051, cn cp R1 v T1 th khng cn n. rng trongIC MAX232,T1c gnT1in(chn 11) vT1out(chn 14):ChnT1inl phaTTLv c ni ti chnRxDca b vi iu khin.ChnT1outl phaRS232c ni ti chnRxDca u niDBcaRS232.

B iu khinR1cng c gnR1in(chn 13) vR1out(chn 12):ChnR1in(chn s 13) l phaRS232c ni ti chnTxD u niDBcaRS232.ChnR1out(chn s 12) l phaTTLc ni ti chnRxDca b vi iu khin.

Tng t choT2vR2.Xemhnh 5:

Hnh 5:S bn trong ca MAX232 vS 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

SBUFl thanh ghi 8 bit c dng ring cho truyn thng ni tip trong 8051. i vi mt byte d liu mun truyn qua ngTxDth n phi c t trong thanh ghiSBUF. Tng t,SBUFcng gi mt byte d liu khi n c nhn t ngRxDca 8051:Khi mt byte c ghi vo thanh ghiSBUFn s c ng khung vi cc bitStart,Stopv c truyn ni tip quan chnTxD.Khi cc bit c nhn ni tip tRxDth 8051 m khung loi tr cc bitStart,Stop ly ra mt byte t d liu nhn c v t byte vo thanh ghiSBUF.

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 ghiSCON,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.SCONl thanh ghi c th nh a ch theo bit. Di y l m t cc bit khc nhau ca thanh ghiSCON:

Hnh 6:Thanh ghi iu khin cng ni tip SCON.

Cc bit SM0, SM1

y l cc bitD7vD6ca thanh ghiSCON. 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 bitPCON.7(bit SMOD) c thit lp ln 1, mc nh ca h thng lPCON.7=0.

Trong bn ch trn ta ch quan tm nch 1. Khi ch 1 c chn th d liu c ng khung thnh10 bit: gm1 bit Start, sau l8 bit d liu,v cui cng l1 bit Stop. Quan trng hn l ch ni tip 1 cho phptc baud thay iv c thit lp biTimer1ca 8051.

Bit SM2

BitSM2l bitD5ca thanh ghiSCON. Bit ny cho php kh nng a x l ca 8051. i vi cc ng dng ca chng ta, tSM2 = 0v ta khng s dng 8051 trong mi trng a x l.

Bit REN

REN(Receive Enable) l bit cho php nhn (bitD4ca thanh ghiSCON). Khi bitRENcao th n cho php 8051 nhn d liu trn chnRxDca 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 lbit cc k quan trngtrong thanh ghiSCON.

Bit TB8 v RB8

BitTB8vRB8c dng trong ch ni tip2v3. Ta tTB8=0vRB8=0v n khng c s dng trong cc ng dng ca mnh. Ni thm, trong ch 2v3th c 9 bit d liu c truyn i hoc nhn v. BitTB8s cha bit d liu th 9 khi truyn, cn bitRB8s cha bit d liu th 9 khi nhn, trong ch ni tip1th bitRB8ny nhn mt bn sao ca bitStopkhi mt d liu 8 bit c nhn, v ta cng khng cn quan tm.

Cc bit TI v RI

Cc bit ngt truynTIv ngt nhnRIl cc bitD1vD0ca thanh ghiSCON. Cc bit ny lcc k quan trngca thanh ghiSCON:Khi 8051 kt thc truyn mt k t 8 bit th n btTI bo rng n sn sng truyn mt byte khc. BitTIc bt ln trc bitStop.Khi 8051 nhn c d liu ni tip qua chnRxDv n tch cc bit Start v Stop ly ra 8 bit d liu t vo SBUF, sau khi hon tt n bt cRI bo rng n nhn xong 1 byte v cn phi ly i ko d liu b mt. CRIc bt khi ang tch bit Stop.

2.2.3 Thit lp tc baud trong 8051

Mt khi ccch cng ni tip c cu hnh, vic tip theo l chng trnh cn phi cu hnhtc baudcho cc cng ni tip. iu ny ch p dng cho ch Serial Port1v3. Cn ch 0v2, 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 cho12. iu ny c ngha l nu bn ang s dng thch anh tn s 11.059Mhz, tc truyn ca ch 0s lun lun l 921.583 baud.Trong ch 2:tc truyn lun lun l tn s dao ng chia cho64, 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 cchci t Timer1. Phng php ph bin nht l ci tTimer1 ch t ng np li 8-bit (ch 2) v thit lp mt gi tr np li (choTH1) to ra mt tc truyn.

Nh ta bit trc y, th 8051 chia tn s thch anh cho12 ly tn s chu k my. B UART truyn thng ni tip ca 8051 li chia tn s chu k my cho32mt ln na trc khi n c dng bi b nh thiTimer1 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 sutPCON(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 mmtrong 8051 vi tn s thch anh khng i. iu ny c thc hin nh thanh ghiPCON, 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 bitD7(bitSMOD). Khi 8051 c bt ngun th bitSMODca thanh ghiPCON 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

KhiSMOD = 0th 8051 chia1/12tn s thch anh cho32v s dng n cho bTimer1 thit lp tc baud. y lgi tr mc nhcaSMODkhi 8051 bt ngun.

Khi SMOD = 1

KhiSMOD = 1th 8051 chia1/12tn s thch anh cho16(thay v chia cho32nh khi SMOD = 0) v y l tn s cTimer1dng thit lp tc baud.

xc nh gi tr ci t trongTH1 to ra mt tc baudnht nh, chng ta c th s dng cc phng trnh sau y (gi s bitPCON.7=0):

TH1 = 256 - ((Crystal / (12*32)) / Baud) = 256 - ((Crystal / 384) / Baud)(1)

NuPCON.7=1th 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 s11.059Mhzv chng ta mun cu hnh cho cng ni tip t tc 19200 baud, th ta s dngphng 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 19200baudtrn mt tinh th thch anh 11.059Mhz ta phi ci tTH1mt gi tr254,5. Nhng gi tr trong cc thanh ghi li l 1 s nguyn. Nu chng ta thit lp l254, chng ta s c tc 14400 baudv nu chng ta thit lp l255, chng ta s c tc 28800 baud. Nh vy dng nh chng ta khng th ci t chnh xc tc baudc ?!!Nhng ta li c mt cch khc ci t c tc 19200 baud.Chng ta n gin ch cn t bitPCON.7=1(bitSMOD). Khi ta tng gp i tc baudv s dngphng trnh 2c 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 baudvi mt tinh th thch anh tn s11.059MHzchng ta phi:1. Cu hnhch Serial Port1hoc3.2. Cu hnhTimer 1ch 2(8-bit t ng np li).3. Ci tTH1gi tr253(FDH).4. Set bitPCON.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:1.Np thanh ghiTMODgi tr20H: bo rng s dng Timer1 ch 2 thit lp ch baud.2.Np thanh ghiTH1cc gi tr ph hp thit lp ch baud truyn d liu ni tip.3.Np thanh ghiSCONgi tr50Hbo ch ni tip 1 ng khung 8 bit d liu, 1 bit Start v 1 bit Stop.4.BtTR1=1 khi ng Timer1.5.Xo bit c truyn d liu:TI=0.6.Byte k t cn phi truyn c ghi voSBUF.7.Bit c truynTIc kim tra bng mt vng lp i n lc d liu c truyn xong (cTI=1).8. truyn k t tip theo quay tr vbc 5.

Cc bn hy quan st 2 v d sau thc hnh:

V d 2:

Hy vit chng trnh cho 8051 truyn d liu ni tip mt k t D vi tc 4800 baudlin tc ln my tnh.

Li gii:

Chng trnh s dngngn ng Clp trnh trnKeil C uVision3, m phng trnProteus, hin th ln my tnh qua giao dinHyper Terminal Hercules.(ProteusvHerculess dng 2cng COM oc to ra v kt ni vi nhau bi chng trnhConfigure Virtual Serial Port Driver)

#include //khai bo th vin cho 89c51void send(unsigned char a); //khai bo nguyn mu hm gi 1 k tmain() //Chng trnh chnh{ TMOD=0x20; //Chn Timer1, ch 2 TH1=0xFA; //Ci t tc 4800 baud SCON=0x50; //0101 0000: Chn ch 1, Cho php nhn TR1=1; //Khi ng Timer1

while(1) //Vng lp v hn { send('D'); //Gi hm gi 1 k t ln my tnh }}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 TI ln 1 TI=0; //Xa c truyn TI sau khi truyn xong}

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

Hnh 11:Kt qu truyn ln my tnhV D 2qua 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 //Khai bo th vin cho 89c51#include //Khai bo th vin s dng hm strlen()void send(unsigned char a); //khai bo nguyn mu hm gi 1 k tvoid sendchuoi(char *a); //khai bo nguyn mu hm gi 1 chuimain() //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) //Vng lp v hn { sendchuoi("DienTuMayTinh.Com"); //Gi hm gi 1 chui send(10); //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 TI ln 1 TI=0; //Xa c truyn TI sau khi truyn xong}void sendchuoi(char *a) //nh ngha hm gi 1 chui k t{ int i,n; //Khai bo bin cc b s nguyn: i,n n=strlen(a); //Tnh di ca chui *a, lu vo bin n for(i=0;i4294967295float b=511.9999; //Bin float.void send(unsigned char a); //Khai bo nguyn mu hm gi 1 k tvoid sendsonguyen(unsigned long n); //hm gi 1 s nguynvoid sendsothuc(float n); //hm gi 1 s thcmain() //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) //Vng lp v hn { sendsonguyen(a); //Gi bin s nguyn send(10); //Gi du xung dng sendsothuc(b); //Gi bin s thc send(10); //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 dinHercules my tnh