You are on page 1of 82

Keil C - Bi 1 Gii thiu h Vi iu khin 8051

1.2 B vi iu khin 8051 B vi iu khin 8051 l thnh vin u tin ca h 8051. Hng Intel k hiu n nh l MCS51. Bng 1 trnh by cc c tnh ca 8051. 1.3 Cc thnh vin khc ca h 8051 C hai b vi iu khin thnh vin khc ca h 8051 l 8052 v 8031. a- B vi iu khin 8052 B vi iu khin 8052 l mt thnh vin khc ca h 8051, 8052 c tt c cc c tnh chun ca 8051 ngoi ra n c thm 128 byte RAM v mt b nh thi na. Hay ni cch khc l 8052 c 256 byte RAM v 3 b nh thi. N cng c 8K byte ROM. Trn chp thay v 4K byte nh 8051. c tnh ROM trn chp RAM B nh thi Chn vo ra Cng ni tip Ngun ngt

8052 4K byte 8K byte 128 byte 256 byte 2 3 32 32 1 1 6 8 Bng 2: so snh cc c tnh ca cc thnh vin h 8051.

8051

8031 OK 128 byte 2 32 1 6

Nh nhn thy t bng 2 th 8051 l tp con ca 8052. Do vy tt c mi chng trnh vit cho 8051 u chy trn 8052 nhng iu ngc li l khng ng. b- B vi iu khin 8031 Mt thnh vin khc na ca 8051 l chp 8031. Chp ny thng c coi nh l 8051 khng c ROM trn chp v n c OK byte ROM trn chp. s dng chp ny ta phi b xung ROM ngoi cho n. ROM ngoi phi cha chng trnh m 8031 s np v thc hin. So vi 8051 m chng trnh c cha trong ROM trn chp b gii hn bi 4K byte, cn ROM ngoi cha chng trinh c gn vo 8031 th c th ln n 64K byte. Khi b xung cng, nh vy ch cn li 2 cng thao tc. gii quyt vn ny ta c th b xung cng vo - ra cho 8031. Phi php 8031 vi b nh v cng vo - ra chng hn vi chp 8255 c trnh by chng 14. Ngoi ra cn c cc phin bn khc nhau v tc ca 8031 t cc hng sn xut khc nhau. 1.4 Cc b vi iu khin 8051 t cc hng khc nhau Mc d 8051 l thnh vin phi bin nht ca h 8051 nhng chng ta s thy n trong kho linh kin. l do 8051 c di nhiu dng kiu b nh khc nhau nh UV - PROM, Flash v NV -

RAM m chng u c s ng k linh kin khc nhau. Vic bn lun v cc kiu dng b nh ROM khc nhau s c trnh by chng 14. Phin bn UV-PROM ca 8051 l 8751. Phin bn Flash ROM c bn bi nhiu hng khc nhau chng hn ca Atmel corp vi tn gi l AT89C51 cn phin bn NV-RAM ca 8051 do Dalas Semi Conductor cung cp th c gi l DS5000. Ngoi ra cn c phin bn OTP (kh trnh mt ln) ca 8051 c sn xut bi rt nhiu hng. a- B vi iu khin 8751 Chp 8751 ch c 4K byte b nh UV-EPROM trn chp. s dng chp ny pht trin yu cu truy cp n mt b t PROM cng nh b xo UV- EPROM xo ni dung ca b nh UV-EPROM bn trong 8751 trc khi ta c th lp trnh li n. Do mt thc t l ROM trn chp i vi 8751 l UV-EPROM nn cn phi mt 20 pht xo 8751 trc khi n c th c lp trnh tr li. iu ny dn n nhiu nh sn xut gii thiu cc phin bn Flash Rom v UVRAM ca 8051. Ngoi ra cn c nhiu phin bn vi cc tc khc nhau ca 8751 t nhiu hng khc nhau. b- B vi iu khin AT8951 t Atmel Corporation Chp 8051 ph bin ny c ROM trn chp dng b nh Flash. iu ny l l tng i vi nhng pht trin nhanh v b nh Flash c th c xo trong vi giy trong tng quan so vi 20 pht hoc hn m 8751 yu cu. V l do ny m AT89C51 pht trin mt h thng da trn b vi iu khin yu cu mt b t ROM m c h tr b nh Flash. Tuy nhin li khng yu cu b xo ROM. Lu rng trong b nh Flash ta phi xo ton b ni dung ca ROM nhm lp trnh li cho n. Vic xo b nh Flash c thc hin bi chnh b t PROM v y chnh l l do ti sao li khng cn n b xo. loi tr nhu cu i vi mt b t PROM hng Atmel ang nghin cu mt phin bn ca AT 89C51 c th c lp trnh qua cng truyn thng COM ca my tnh IBM PC . S linh kin AT89C51 AT89LV51 AT89C1051 AT89C2051 AT89C52 AT89LV52 ROM RAM Chn I/O Timer Ngt Vcc ng v 4K 128 32 2 6 5V 40 4K 128 32 2 6 3V 40 1K 64 15 1 3 3V 20 2K 128 15 2 6 3V 20 8K 128 32 3 8 5V 40 8K 128 32 3 8 3V 40 Bng 3: Cc phin bn ca 8051 t Atmel (Flash ROM).

Ch C trong k hiu AT89C51 l CMOS. Cng c nhng phin bn ng v v tc khc nhau ca nhng sn phm trn y. Xem bng 1.6. V d rng ch C ng trc s 51 trong AT 89C51 -12PC l k hiu cho CMOS 12 k hiu cho 12 MHZ v P l kiu ng v DIP v ch C cui cng l k hiu cho thng mi (ngc vi ch M l qun s ). Thng thng AT89C51 - 12PC rt l tng cho cc d n ca hc sinh, sinh vin. M linh kin Tc S chn ng v Mc ch

AT89C51-12PC

42MHZ

40

DTP

Thng mi

Bng 4: Cc phin bn 8051 vi tc khc nhau ca Atmel. c- B vi iu khin DS5000 t hng Dallas Semiconductor Mt phin bn ph bin khc na ca 8051 l DS5000 ca hng Dallas Semiconductor. B nh ROM trn chp ca DS5000 di dng NV-RAM. Kh nng c/ ghi ca n cho php chng trnh c np vo ROM trn chp trong khi n vn trong h thng (khng cn phi ly ra). iu ny cn c th c thc hin thng qua cng ni tip ca my tnh IBM PC. Vic np chng trnh trong h thng (in-system) ca DS5000 thng qua cng ni tip ca PC lm cho n tr thnh mt h thng pht trin ti ch l tng. Mt u vit ca NV-RAM l kh nng thay i ni dung ca ROM theo tng byte ti mt thi im. iu ny tng phn vi b nh Flash v EPROM m b nh ca chng phi c xo sch trc khi lp trnh li cho chng. M linh kin DS5000-8 DS5000-32 DS5000T-8 DS5000T-8 ROM RAM Chn I/O Timer Ngt Vcc ng v 8K 128 32 2 6 5V 40 32K 128 32 2 6 5V 40 8K 128 32 2 6 5V 40 32K 128 32 2 6 5V 40 Bng 5: Cc phin bn 8051 t hng Dallas Semiconductor.

Ch T ng sau 5000 l c ng h thi gian thc. Lu rng ng h thi gian thc RTC l khc vi b nh thi Timer. RTC to v gi thi gian l pht gi, ngy, thng - nm k c khi tt ngun. Cn c nhiu phin bn DS5000 vi nhng tc v kiu ng gi khc nhau.( Xem bng 1.8). V d DS5000-8-8 c 8K NV-RAM v tc 8MHZ. Thng thng DS5000-8-12 hoc DS5000T-8-12 l l tng i vi cc d n ca sinh vin. M linh kin NV- RAM Tc DS5000-8-8 8K 8MHz DS5000-8-12 8K 12MHz DS5000-32-8 32K 8MHz DS5000T-32-12 32K 8MHz (with RTC) DS5000-32-12 32K 12MHz DS5000-8-12 8K 12MHz (with RTC) Bng 6:Cc phin bn ca DS5000 vi cc tc khc nhau d- Phin bn OTP ca 8051 Cc phin bn OTP ca 8051 l cc chp 8051 c th lp trnh c mt ln v c cung cp t nhiu hng sn xut khc nhau. Cc phin bn Flash v NV-RAM thng c dng pht trin sn phm mu. Khi mt sn pohm c thit k v c hon thin tuyt i th phin bn OTP ca 8051 c dng sn hng lot v n r hn rt nhiu theo gi thnh mt n v sn phm.

e- H 8051 t Hng Philips Mt nh sn xut chnh ca h 8051 khc na l Philips Corporation. Tht vy, hng ny c mt di la chn rng ln cho cc b vi iu khin h 8051. Nhiu sn phm ca hng c km theo cc c tnh nh cc b chuyn i ADC, DAC, cng I/0 m rng v c cc phin bn OTP v Flash. II - Gii thiu Kin trc Vi iu khin 8051 2.1 T chc b nh Cc vi iu khin thuc h 8051 u t chc thnh 2 khng gian chng trnh v d liu, hnh 1 v hnh 2 s m t iu ny. Kin trc vi x l 8 bit ca 8051 ny cho php truy nhp v tnh ton nhanh hn i vi khng gian d liu nh vic phn chia 2 khng gian b nh chng trnh v d liu nh trn. Tuy nhin b nh ngoi c truy nhp bi h thng 16 bit a ch vn c th thc hin nh thanh ghi con tr. B nh chng trnh (ROM, EPROM) l b nh ch c, c th m rng ti a 64Kbyte. Vi h vi iu khin 89xx, b nh chng trnh c tch hp sn trong chip c kch thc nh nht l 4kByte. Vi cc vi iu khin khng tch hp sn b nh chng trnh trn chip, buc phi thit k b nh chng trnh bn ngoi. V d s dng EPROM: 2764 (64Kbyte), khi chn PSEN phi mc tch cc (5V).

Hnh 1: Cu trc vi iu khin 89C51

B nh d liu (RAM) tn ti c lp so vi b nh chng trnh. H vi iu khin 8051 c b nh d liu tch hp trn chip nh nht l 128byte v c th m rng vi b nh d liu ngoi ln ti 64kByte. Vi nhng vi iu khin khng tch hp ROM trn chip th vn c RAM trn chip l 128byte. Khi s dng RAM ngoi, CPU c v ghi d liu nh tn hiu trn cc chn RD v WR. Khi s dng c b nh chng trnh v b nh d liu bn ngoi th buc phi kt hp chn RD v PSEN bi cng logic AND phn bit tn hiu truy xut d liu trn ROM hay RAM ngoi. B nh chng trnh:

Hnh 2: Cu trc b nh chng trnh

Hnh 3: a ch cc ngt trn b nh chng trnh Hnh 2 m t cu trc b nh chng trnh. Sau khi khi ng, CPU bt u thc hin chng trnh v tr 0000H. Hnh 3 m t a ch ngt mc nh trn b nh chng trnh. Mi khi xy ra ngt, con tr ca CPU s nhy n ng a ch ngt tng ng v thc thi chng trnh ti . V d ngt ngoi 0 s c a ch l 0003H, khi xy ra ngt ngoi 0 th con tr chng trnh s nhy n ng a ch 0003H thc thi chng trnh ti . Nu trong chng trnh ng dng khng x dng n ngt ngoi 0 th a ch 0003H vn c th dng cho mc ch khc (s dng cho b nh chng trnh).

B nh d liu:

Hnh 4: Cu trc b nh d liu Hnh 4 m t cu trc b nh d liu trong v b nh d liu ngoi ca h vi iu khin 8051. CPU s dng n cc chn RD v WR khi truy cp n b nh d liu ngoi. Hnh 5 m t cu trc b nh d liu trong chip, c chia thnh 3 khi l 128 byte thp, 128 byte cao v 128 byte c bit.

Hnh 5: Cu trc b nh trong Hnh 6 m t cu trc 128 byte thp ca b nh d liu ca h vi iu khin 8051. 32 byte u tin (00H-1FH) c s dng cho 4 b 8 thanh ghi R0-R7. Hai bit ca thanh ghi c bit PSW s la chn 1 trong 4 b thanh ghi m vi iu khin s dng trong khi thc thi chng trnh.

Hnh 6: Cu trc 128 byte thp ca b nh d liu trong 8051 cha 210 v tr bit c nh a ch trong 128 bit cha trong cc byte a ch t 20H n 2FH (16 byte x 8 bit = 128 bit) v phn cn li cha trong cc thanh ghi c bit. Ngoi ra 8051 cn c cc port xut/nhp c th nh a ch tng bit, iu ny lm n gin vic giao tip bng phn mm vi cc thit b xut/nhp n bit. Vng RAM a mc ch c 80 byte t a ch t 30H n 7FH, bn di vng ny t a ch 00H n 2FH l vng nh c th c s dng tng t. Bt k v tr nh no trong vng RAM a mc ch u c th c truy xut t do bng cch s dng cc kiu nh a ch trc tip hoc gin tip. Bt k v tr nh no trong vng RAM a mc ch u c th c truy xut t do bng cch s dng cc kiu nh a ch trc tip hoc gin tip. Cng nh cc thanh ghi t R0 n R7, ta c 21 thanh ghi chc nng c bit SFR chim phn trn ca Ram ni t a ch 80H n FFH. Cn lu l khng phi tt c 128 a ch t 80H n FFH u c nh ngha m ch c 21 a ch c nh ngha.

Hnh 7: 128 byte cao ca b nh d liu 2.2 Cc thanh ghi c bit 8051 c 21 thanh ghi chc nng c bit SFR chim phn trn ca Ram ni t a ch 80H n FFH. Cn lu l khng phi tt c 128 a ch t 80H n FFH u c nh ngha m ch c 21 a ch c nh ngha. Hnh 8 m t cc thanh ghi c bit trong vng nh d liu 80H n FFH v gi tr ca chng sau khi Reset.

Hnh 8: Cc thanh ghi c bit Thanh ghi chnh: Thanh ghi tnh ton chnh ca vi iu khin 8051 ACC (Accumulator). L thanh ghi c bit ca 8051 dng thc hin cc php ton ca CPU, thng k hiu l A. Thanh ghi ph:

Thanh ghi tnh ton ph ca vi iu khin 8051 l B. Thanh ghi B a ch F0H c dng chung vi thanh cha A trong cc php ton nhn, chia. Lnh MUL AB nhn 2 s 8 bit khng du cha trong A v B v cha kt qu 16 bit vo cp thanh ghi B, A (thanh cha A ct byte thp v thanh ghi B ct byte cao). Lnh chia DIV AB chia A bi B, thng s ct trong thanh cha A v d s ct trong thanh ghi B. Thanh ghi B cn c x l nh mt thanh ghi nhp. Cc bit c nh a ch ca thanh ghi B c a ch t F0H n F7H. Thanh ghi trng thi chng trnh (PSW): Thanh ghi trng thi chng trnh PSW (a ch: D0H) l thanh ghi m t ton b trng thi chng trnh ang hot ng ca h thng. Bng 7 v Bng 8 s m t thanh ghi ny. 7 CY 6 AC 5 4 3 2 F0 RS1 RS0 OV Bng 7: Thanh ghi trng thi chng trnh PSW a Ch 1 0 P

Bit PSW.7 PSW.6 PSW.5 PSW.4

K Hiu CY AC FO RS1

PSW.3

RS0

PSW.2 PSW.1 PSW.0

OV P

M t Bit C nh (Carry Flag): c Set nu c Bit nh t Bit 7 trong D7H php cng hoc c Bit mn cho Bit 7 trong php tr. C nh ph: c Set trong php cng nu c Bit nh t Bit 3 D6H sang Bit 4 hoc kt qu trong 4 Bit thp nm trong khong 0AH->0FH. D5H C O: dnh cho ngi s dng. D4H Chn dy thanh ghi (Bit 1) Chn dy thanh ghi (Bit 0) 00=Bank 0: a ch 00H->07H D3H 01=Bank 1: a ch 08H->0FH 10=Bank 2: a ch 10H->17H 11=Bank 3: a ch 18H->1FH C trn (Overflow Flag): c Set khi php ton c du c kt D2H qu > +127 hoc < -128. D1H Cha dng C kim tra chn l: c Set hoc Clear bi phn cng sau D0H mi 1 chu k lnh, ch ra rng c 1 s chn hoc s l Bit 1 trong thanh cha. Bng 8: Chi tit cc bit trong thanh ghi PSW

Thanh ghi ngn xp (Stack Pointer): Con tr stack SP (stack pointer) l 1 thanh ghi 8 bit a ch 81H. SP cha a ch ca d liu hin ang nh ca stack. Cc lnh lin quan n satck bao gm lnh ct d liu vo stack v lnh ly d liu ra khi stack. Vic ct vo stack lm tng SP trc khi ghi d liu v vic ly d liu ra khi stack s gim SP. Vng stack ca 8051 c gi trong RAM ni v c gii

hn n cc a ch truy xut c bi kiu nh a ch gin tip. Cc lnh PUSH v POP s ct d liu vo stack v ly d liu t stack, cc lnh gi chng trnh con (ACALL, LCALL) v lnh tr v (RET, RETI) cng ct v phc hi ni dung ca b m chng trnh PC (Program counter) Con tr d liu DPTR: Con tr d liu DPTR (data pointer) c dng truy xut b nh chng trnh ngoi hoc b nh d liu ngoi. DPTR l mt thanh ghi 16 bit c a ch l 82H (DPL, byte thp) v 83H (DPH, byte cao). Thanh ghi cc cng P0-P3: Cc port xut/nhp ca 8051 bao gm Port 0 ti a ch 80H, Port 1 ti a ch 90H, Port 2 ti a ch A0H v Port 3 ti a ch B0H. Tt c cc port u c nh a ch tng bit nhm cung cp cc kh nng giao tip mnh. Thanh ghi b m truyn thng ni tip (Serial Data Buffer): B m truyn thng c chia thnh hai b m, b m truyn d liu v b m nhn d liu. Khi d liu c chuyn vo thanh ghi SBUF, d liu s c chuyn vo b m truyn d liu v s c lu gi cho n khi qu trnh truyn d liu qua truyn thng ni tip kt thc. Khi thc hin vic chuyn d liu t SBUF ra ngoi, d liu s c ly t b m nhn d liu ca truyn thng ni tip. Thanh ghi ca b nh thi/b m: 8051 c 2 b m/nh thi (counter/timer) 16 bit nh cc khong thi gian hoc m cc s kin. Cc cp thanh ghi (TH0, TL0) v (TH1, TL1) l cc thanh ghi ca b m thi gian. B nh thi 0 c a ch 8AH (TL0, byte thp) v 8CH (TH0, byte cao). B nh thi 1 c a ch 8BH (TL1, byte thp) v 8DH (TH1, byte cao). Hot ng ca b nh thi c thit lp bi thanh ghi ch nh thi TMOD (Timer Mode Register) a ch 88H. Ch c TCON c nh a ch tng bit. Cc thanh ghi iu khin: Cc thanh ghi iu khin c bit nh IP, IE, TMOD, TCON, SCON v PCON l cc thanh ghi iu khin v ghi nhn trng thi ca h thng ngt, b m/nh thi, truyn thng ni tip. Chi tit ca cc thanh ghi ny s c m t sau.

Keil C - Bi 2 - Hng Dn S Dng Keil C Lp Trnh 8051


I Ci t Keil C uVision3 Ti file hng dn ci t, crack Keil C uVision3 di v lm theo hng dn. Keil C uVision3 8.05 Full. II Cc bc to Project Ta thc hin 6 bc: 1.To mi 1 project. 2.To File.C. 3.Add File.C vo Project. 4.Bin dch v to File Hex. 5.G li chng trnh (nu c). 6.Np chng trnh cho Vi iu khin. 1. 1. To mi 1 Project Chy chng trnh Keil C: Vo Project->New Project:

Chn ng dn lu v t tn cho project: Sau n Save.

Tip theo ta chn loi Chip: y ta la chn Atmel->chn AT89C51

n Yes v ta hon thnh bc 1 to 1 project mi. 2. 2. To File.C Tip theo ta cn to 1 File.C vit chng trnh cho Chip ln file . Vo File->New: Sau chn Save: Chn ng dn vo cng th mc vi Project va to bc 1. Sau t tn, vi phn ui m rng l .C: Chn Save, v ta hon thnh xong bc 2 To File.C. 3. 3. Add File.C vo Project Ta cn phi lin kt File.C vi Project va to vi nhau: Trong giao din Keil C, khng gian lm vic ca Project: Chut phi vo phn Source Group 1 -> Add files to Group Source Group 1: Chn ng dn n th mc Project -> chn file.C va to bc 2 -> Add:

V ta hon tt giai on to Project, chun b vit code no 4. Bin dch v to file Hex Ta th vit 1 on code to hiu ng nhy Led n gin port0 sau y vo file.c trong project: #include<at89x52.h> unsigned char nhayled[20]={0x05,0x0e,0x1d,0x3e,0x7d,0xfe,0x01,0x82,0xc1,0xe2,0xf1,0xfa,0xfd,0x02,0xfd,0 x02,0xfd,0x02,0xfd,0x02}; //cac hieu ung void delay(unsigned int i) { while(i--) { unsigned char j=121; while(j--){} } } main() { unsigned char k; while(1) { for(k=0;k<20;k++) { P0=nhayled[k]; delay(250); } } } Ty chnh Options: -Sa tn s thch anh:

-To file Hex:

Bin dch chng trnh: n vo biu tng Build. Nu thnh cng s c thng bo: Creating hex file from , 0 Error. V ta s c 1 file Hex c to ra cng th mc vi project.

5. G li chng trnh Nu chng trnh cn c li, tin hnh g li chng trnh (Debug) ta thc hin tng bc:

y chng trnh ch tc ng ln Port0 nn ta s m khung quan st Port0 ln. Tip theo: chy tng dng lnh, ta n F10 hoc F11: -F10 s khng chy vo hm con.

-F11 s chy c hm con. Quan st u ra Port0: Sau khi sa li v hon thin, vic cn li ta ch cn np file Hex vo cho Vi iu khin.

Keil C - Bi 3 - Ngn Ng Lp Trnh C C Bn Cho 8051


1. Gii thiu ngn ng C Trong k thut lp trnh vi iu khin ni chung, ngn ng lp trnh c s dng thng chia lm 2 loi: Ngn ng bc thp v Ngn ng bc cao. Ngn ng bc cao l cc ngn ng gn vi ngn ng con ngi hn, do vic lp trnh bng cc ngn ng ny tr nn d dng v n gin hn. C th k n mt s ngn ng lp trnh bc cao nh C, Basic, Pascal trong d C l ngn ng thng dng hn c trong k thut vi iu khin. V bn cht, s dng cc ngn ng ny thay cho ngn ng bc thp l gim ti cho lp trnh vin trong vic nghin cu cc tp lnh v xy dng cc cu trc gii thut. Chng trnh vit bng ngn ng bc cao cng s c mt phn mm trn my tnh gi l trnh bin dch (Compiler) chuyn sang dng hp ng trc khi chuyn sang m my. Khi s dng ngn ng C ngi lp trnh khng cn hiu su sc v cu trc ca b vi iu khin. C ngha l vi mt ngi cha quen vi mt vi iu khin cho trc s xy dng c chng trnh mt cch nhanh chng hn, do khng phi mt thi gian tm hiu kin trc ca vi iu khin . V vic s dng li cc chng trnh xy dng trc cng d dng hn, c th s dng ton b hoc sa cha mt phn. 2. Ngn ng C 2.1 Kiu d liu 2.1.1 Kiu d liu trong C Kiu Char Unsigned char Int Unsigned int Long Unsigned long Float * Khai bo bin: S Byte 1 1 2 2 4 4 4 Khong gi tr -128 +127 0 255 -32768 - +32767 0 - 65535 -2147483648 - +2147483647 0 4294967295

- C php: Kiu_d_liu Vng_nh Tn_bin _at_ ia_ch; V d: Unsigned char data x; - Khi khai bo bin c th gn lun cho bin gi tr ban u. unsigned char x; x = 0; Ta ch cn: unsigned char x = 0; - C th khai bo nhiu bin cng mt kiu mt lc. V d: Unsigned int x,y,z,t; - Ch nh vng nh: t kho Vng_nh cho php ngi dng c th ch ra vng nh s dng lu tr cc bin s dng trong chng trnh. Cc vng nh c th s dng l: CODE, DATA, DATAB, IDATA, PDATA, XDTA. Khi khng khai bo vng nh trnh dch Keil C s mc nh l vng nh DATA. Vng nh ngha B nh m ngun chng trnh CODE B nh d liu gm 128 Byte thp ca RAM trong vi iu khin DATA BDATA B nh d liu c th nh a ch bit, nm trong vng nh DATA B nh d liu gm 128 Byte cao ca RAM trong vi iu khin ch c mt s IDATA dng vi iu khin sau ny PDATA B nh d liu ngoi gm 256 Byte, c truy cp bi a ch t trn P0 B nh d liu ngoi c dung lng c th ln n 64 KB, c truy cp bi a XDATA ch t trn P0 v P2 * nh ngha li kiu - C php: Typedef Kiu_d_liu Tn_bin; - Tn_bin sau ny s c s dng nh mt kiu d liu mi v c th dng khai bo cc bin khc. V d: Typedef int m5[5]; Dng tn m5 khai bo hai bin tn a v b c kiu d liu l mng 1 chiu 5 phn t: m5 a,b; 2.1.2 Kiu d liu trong Keil C Kiu Bit Sbit Sfr Sfr16 S bit 1 1 8 16 V d: Thay v:

- bit : dng khai bo cc bin c gi tr 0 hoc mt hay cc bin logic trn vng RAM ca vi iu khin. Khi khai bo bin kiu bit trnh dc Keil C s mc nh vng nh s dng l BDATA. - sbit, sfr, sfr16: dng nh ngha cc cho cc thanh ghi chc nng hoc cc cng trn vi iu khin dng truy nhp cc on d liu 1 bit, 8 bit, 16 bit. 2.1.3 Mng Mng l mt tp hp nhiu phn t cng mt kiu gi tr v chung mt tn. Cc phn t ca mng phn bit vi nhau bi ch s hay s th t ca phn t trong dy phn t. Mi phn t c vai tr nh mt bin v lu tr c mt gi tr c lp vi cc phn t khc ca mng. Mng c th l mng mt chiu hoc mng nhiu chiu. Khai bo: - C php: Tn_kiu Vng_nh Tn_mng[s_phn_t_mng]; Khi b trng s phn t mng ta s c mng c s phn t bt k. V d: Unsigned int data a[5],b[2] [3]; Vi khai bo trn ta s c: mng a l mng mt chiu 5 phn t. Mng b l mng hai chiu, tng s phn t l 6. Ch s ca mng bt u t s 0. Mng c bao nhiu chiu phi cung cp y by nhiu ch s. V du: Phn t mng 2 chiu: b[0] [1] l ng Khi vit: b[0] l sai 2.1.4. Con tr Khi ta khai bo mt bin, bin s c cp pht mt khong nh bao gm mt s byte nht nh dng lu tr gi tr. a ch u tin ca khong nh chnh l a ch ca bin c khai bo. Con tr l mt bin dng cha a ch m khng cha gi tr, hay gi tr ca con tr chnh l a ch khong nh m n tr ti. Vi cc vng nh c th con tr ti vng nh chim dung lng ph thuc vo ln ca vng nh . Con tr tng qut khi khng xc nh trc vng nh s c dung lng ln nht v vy tt nht nn s dng con tr c th. Loi con tr Con tr tng qut Con tr XDATA Con tr CODE Con tr DATA Con tr IDATA Con tr PDATA Kch thc 3 byte 2 byte 2 byte 1 byte 1 byte 1 byte

Khai bo bin con tr: - C php: Kiu_D_liu Vng_nh *Tn_bin; - V d: int *int_ptr; long data *long_ptr;

- khi khng ch r vng nh con tr s c coi l con tr tng qut. 2.1.5 Kiu d liu cu trc Kiu d liu cu trc l mt tp hp cc bin, cc mng v c cc kiu cu trc khc c biu th bi mt tn duy nht. kiu d liu cu trc dng lu tr cc gi tr, thng tin c lin quan n nhau. nh ngha v khai bo bin cu trc: - nh ngha: Typedef struct { Khai bo cc bin thnh phn; } Tn_kiu_cu_trc; - Khai bo: Tn_kiu_cu_trc Vng_nh Tn_bin; V d: Typedef struct { char day; char month; int year; } Date_type; Date_type date,date_arr[5]; 2.2 Php ton Php gn k hiu: =. - C php: Bin_1 = Bin_2; Trong Bin_2 c th l gi tr xc nh cng c th l bin. 2.2.1 Php ton s hc Php ton + * / % ngha Php cng Php tr Php nhn Php chia ly phn nguyn Php chia ly phn d V d X = a+b; X = a-b; X = a*b; X = a/b; (a=9, b=2 X=4) X = a%b; (a=9, b=2 X=1)

2.2.2 Php ton Logic Chc nng AND OR NOT Php ton && || !

2.2.3 Cc php ton so snh: Php ton > >= < <= == != 2.2.4 Php ton thao tc Bit Php ton & | ! ^ << >> ~ ngha Php v (AND) Php hoc (OR) Php o (NOT) Php hoc loi tr (XOR) Dch tri Dch phi Ly b theo bit V d Bit_1 & Bit_2 Bit_1 | Bit_2 !Bit_1 Bit_1 ^ Bit_2 a<<3 a>>4 ~a ngha So snh ln hn So snh ln hn hoc bng So snh nh hn So snh nh hn hoc bng So snh bng nhau So snh khc nhau V d a>b 4>5 s tr ra gi tr 0 a>=b 6>=2 s tr ra gi tr 1 a<b 6<7 s tr ra gi tr 1 a<=b 8<=5 s tr ra gi tr 0 a==b 6==6 s tr ra gi tr 1 a!=b 9!=9 s tr ra gi tr 0

2.2.5 Php ton kt hp Php ton += -= *= /= V d a+=5 <=> a=a+5 a-=5 <=> a=a-5 a*=5 <=> a=a*5 a/=5 <=> a=a/5

%= 2.3 Cu trc chng trnh C 2.3.1 Cu trc chng trnh

a%=5 <=> a=a%5

* Cu trc: 1. Khai bo ch th tin x l 2. Khai bo cc bin ton cc 3. Khai bo nguyn mu cc hm 4. Xy dng cc hm v chng trnh chnh * V d: // Khai bo ch th tin x l: #include<regx51.h> #include<string.h> #define Led1 P1_0 //********************************* // Khai bo bin ton cc: Unsigned char code Led_arr[3]; Unsigned char data dem; Unsigned int xdata X; //********************************* // Khai bo nguyn mu hm Void delay(unsigned int n); bit kiemtra(unsigned int a); //********************************* // Xy dng cc hm v chng trnh chnh: void delay(unsigned int n) { Khai bo bin cc b; M chng trnh tr; } Void main() // Chng trnh chnh { Khai bo bin c b; M chng trnh chnh; } Bit kiemtra(unsigned int a) { Khai bo bin cc b; M chng trnh kim tra bin a; }

Ch : Hm khng khai bo nguyn mu phi c xy dng trc hm c li gi hm . v d trn do hm bit kiemtra(unsigned int a) c khai bo nguyn mu hm trn nn c th xy dng hm bt k v tr no trong chng trnh. Tuy nhin chng ta nn khai bo nguyn mu hm trc hm main, v xy dng cc hm ph sau hm main. Nh th s to thi quen lp trnh gn gng hn, v cng to thun li hn cho vic xem li code, tm kim v sa li sau ny. 2.3.2 Ch th tin x l Cc ch th tin s l khng phi l cc lnh ca ngn ng C m l cc lnh gip cho vic son tho chng trnh ngun C trc khi bin dch. Khi dch mt chng trnh C th khng phi chnh bn chng trnh ngun m ta son tho c dch. Trc khi dch, cc lnh tin x l s chnh l bn gc, sau bn chnh l ny s c dch. C ba cch chnh l c dng l: + Php thay th #Define + Php chn tp #Include + Php la chn bin dch #Ifdef Cc ch th tin x l gip ta vit chng trnh ngn gn hn v t chc bin dch, g ri chng trnh linh hot, hiu qu hn. * Ch th #Define: Ch th #define cho php to cc macro thay th n gin. - C php: #Define Tn_thay_th dy_k_t Mt Tn_thay_th c th c nh ngha li nhiu ln, nhng trc khi nh ngha li phi gii phng nh ngha bng ch th: #Undef Tn_thay_th - V d: #define N 100

* Ch th #Include: Ch th #include bo cho trnh bin dch nhn ni dung ca tp khc v chn vo tp chng trnh ngun m ta son tho. - C php: Cch 1: #include<tn_tp> Cch 2: #includetn_tp - V d: Cch 1: #include<regx51.h> cch ny tp regx51.h s c tm trong th mc INC chn vo chng trnh ngun. Cch 2: #includeregx51.h cch ny tp regx51.h s c tm trong th mc cha chng trnh ngun nu khng c mi tm trong th mc INC.

Khi mun chn tp ngoi th vin hoc ngoi th mc cha chng trnh ngun thtn_tp s bao gm c ng dn th mc cha tp. * Ch th #Ifdef: Ch th #ifdef ny thng dng bin dch cc tp th vin. - C php: Cch 1: #Ifdef ten_macro //on chng trnh #endif Cch 2: #ifdef ten_macro //on chng trnh 1 #else //on chng trnh 2 #endif cch 1: nu tn_macro c nh ngha th on chng trnh s c dch, ngc li th on chng trnh s b b qua. * Ch th #Ifndef: Ch th #ifndef ny thng dng bin dch cc tp th vin. - C php: Cch 1: #ifndef ten_macro //on chng trnh #endif Cch 2: #ifndef ten_macro //on chng trnh 1 #else //on chng trnh 2 #endif cch 1: nu tn_macro cha c nh ngha th on chng trnh s c dch, ngc li th on chng trnh s b b qua. 2.3.3 Ch thch trong chng trnh Vic vit ch thch trong trnh nhm mc ch gii thch ngha ca cu lnh, on chng trnh hoc hm hot ng nh th no v lm g. Vit ch thch s gip cho ngi c c th hiu c chng trnh d dng v nhanh chng hn, sa li n gin hn hoc gip cho ta xem li chng trnh c m ta lm tr ln nhanh hn. Ch thch trong chng trnh s khng nh hng n chng trnh m ta son tho v trnh dch s b qua tt c li ch thch khi bin dch chng trnh sang m my. Li gii thch c t sau du // nu ch thch ch vit trn mt dng hoc trong cp du \* v *\. 3. Cc lnh c bn trong C

+ Cu lnh r nhnh - if: - Cu trc 1: if(dieu_kien) { // on chng trnh }

Gii thch: nu dieu_kien ng th x l cc cu lnh bn trong cn sai th nhy qua. - Cu trc 2: if(dieu_kien)

{ // on chng trnh 1 } else { // on chng trnh 2 } Gii thch: nu dieu_kien ng th x l on chng trnh 1 bn trong cn sai th x l on chng trnh 2. + Cu lnh la chn - Switch: Cu trc: //cc cu lnh break; case gia_tri_2: //cc cu lnh break; ... case gia_tri_n: //cc cu lnh break; Default: //cc cu lnh } Gii thch: Tu vo bin c gi tr bng gi tr ca Case no th thc hin cc cu lnh tng ng trong Case , sau thot khi cu trc nh cu lnh break;. Nu khng c Case no ph hp th thc hin cc cu lnh trong default. + Vng lp xc nh - For: Cu trc: for( x=n ; iu_kin ; php_ton ) switch(bin) { case gia_tri_1:

{ // cc cu lnh x l } Gii thch: x l bin, n l gi tr xc nh. Trc tin vng lp s gn gi tr ban u cho bin: x=n, ri kim tra nu iu_kin ng th thc hin cc cu lnh x l, sau thc hin Php_ton nhm tc ng n iu kin. Sau li kim tra li iu_kin, nu cn ng th thc hin tip, nu sai s thot khi vng lp. Cc thnh phn trong vng for c th khng cn khai bo,for s b qua phn , nhng vn phi c 2 du ;. + Vng lp khng xc nh - while: Cu trc: while(dieu_kien) { // cc cu lnh }

Gi thch: Trc tin chng trnh s kim tra iu_kin, nu ng th thc hin cc cu lnh, sau quay li kim tra iu_kin. Cn nu iu_kin sai th thot khi vng lp ngay. + Vng lp khng xc nh - do while: Cu trc: do { // cc cu lnh } while(dieu_kien); Gi thch: Trc tin on chng trnh thc hin cc cu lnh sau kim traiu_kin nu ng th lp li thc hin cc cu lnh tip, nu sai th thot khi vng lp.

Keil C - Bi 4 - Cc chn, cng vo/ra


1. M t cc chn ca 8051 Mc d cc thnh vin ca h 8051 (v d 8751, 89C51, DS5000) u c cc kiu ng v khc nhau, chng hn nh hai hng chn DIP (Dual In-Line Pakage) dng v dt vung QFP (Quad Flat Pakage) v dng chp khng c chn LLC (Leadless Chip Carrier) th chng u c 40 chn cho cc chc nng khc nhau nh vo/ra I/0, c RD, ghi WR, a ch, d liu v ngt. Cn phi lu rng mt s hng cung cp mt phin bn 8051 c 20 chn vi s cng vo-ra t hn cho cc ng dng yu cu thp hn. Tuy nhin, v hu ht cc nh pht trin chnh s dng chp ng v 40 chn vi hai hng chn DIP nn ta ch tp trung m t phin bn ny.

Hnh 1: S b tr chn ca 8051. Trn hnh 1 l s b tr chn ca 8051. Ta thy rng trong 40 chn th c 32 chn dnh cho cc cng P0, P1, P2 v P3 vi mi cng c 8 chn. Cc chn cn li c dnh cho ngun VCC, t GND, cc chn dao ng XTAL1 v XTAL2, chn ResetRST, chn cho php cht a ch ALE, chn truy cp a ch ngoi EA, cho php ct chng trnh PSEN. Trong 8 chn ny th 6 chn VCC , GND, XTAL1, XTAL2, RST vEA c cc h 8051 s dng. Hay ni cch khc l chng phi c ni cho h thng lm vic. Cn hai chn khc l PSEN v ALE c s dng ch yu trong cc h 8031. 1.1 Chn VCC Chn s 40 l VCC , c chc nng cp in p ngun cho chp. Ngun in p l+5V. 1.2 Chn GND Chn s 20 l GND, c ni vi t.

1.3 Chn XTAL1 v XTAL2 8051 c mt b dao ng trn chp nhng n yu cu c mt xung ng h ngoi chy n. Mt b dao ng thch anh s c ni ti cc chn u vo XTAL1 (chn 19) v XTAL2 (chn 18). B dao ng thch anh c ni ti XTAL1 v XTAL2 cng cn hai t gm gi tr khong 30pF. Mt pha ca t in c ni xung t nh c trnh by trn hnh 2a. Cn phi lu rng c nhiu tc khc nhau ca h 8051. Tc c coi nh l tn s cc i ca b dao ng c ni ti chn XTAL. Mt b vi iu khin 8051 yu cu mt tinh th thch anh c tn s khng ln hn 20MHz. Khi 8051 c ni ti mt b dao ng tinh th thch anh v cp ngun th ta c th quan st tn s trn chnXTAL2 bng my hin sng. Nu ta quyt nh s dng mt ngun tn s khc b dao ng thch anh, chng hn nh l b dao ng TTL th n s c ni ti chn XTAL1, cn chn XTAL2 th h khng ni nh hnh 2b.

Hnh 2: a) Ni XTAL ti thch anh 1.4 Chn RST

b) Ni XTAL ti ngun ng b ngoi.

RST l chn s 9 - Reset. N l mt chn u vo c mc tch cc cao (bnh thng mc thp). Khi cp xung cao ti chn ny th b vi iu khin s c Reset v kt thc mi hot ng. iu ny thng c coi nh l s ti bt ngun. Khi kch hot ti bt ngun s lm mt mi gi tr trn cc thanh ghi. Hnh 3 lit k cc thanh ghi c bit ca 8051 v gi tr ca chng sau khi Reset.

Hnh 3: Gi tr mt s thanh ghi sau RESET. Lu rng gi tr ca b m chng trnh PC l 0 khi ti lp p CPU np m lnh u tin t b nh ROM ti v tr ngn nh 0000. iu ny c ngha l ta phi t dng u tin ca m ngun ti v tr ngn nh 0 ca ROM v y l m m sau khi CPU thc tnh s tm lnh u tin. Hnh 4 trnh by cch ni chn RST vi mch Reset.

Hnh 4: Mch Reset.

Nhm lm cho u vo Reset c hiu qu th xung cp cho n phi ko di ti thiu 2 chu k my trc khi n xung thp. Trong 8051: 1 chu k my c tnh bng 12 chu k dao ng. 1.5 Chn EA EA c ngha l truy cp ngoi (External Access): l chn s 31 trn v kiu DIP. N l mt chn u vo v phi c ni hoc vi Vcc hoc GND. Hay ni cch khc l n khng c h. Cc thnh vin h 8051 nh 8751, 98C51 hoc DS5000 u c ROM trn chp lu ct chng trnh. Trong cc trng hp nh vy th chn EA c ni ti Vcc. i vi cc thnh vin ca h nh 8031 v 8032 m khng c ROM trn chp th m chng trnh c lu ct trn b nh ROM ngoi v chng c np cho 8031/32. Do vy, i vi 8031 th chn EA phi c ni t bo rng m chng trnh c ct ngoi. Cc chn m t trn u phi c ni m khng cn thnh phn no c s dng. Cn hai chn di y c s dng ch yu trong h thng vi iu khin 8031. 1.6 Chn PSEN PSEN l chn u ra cho php ct chng trnh (Program Store Enable) trong h thng. Trn vi iu khin 8031, chng trnh c ct b nh ROM ngoi th chn ny c ni ti chn OE ca ROM. 1.7 Chn ALE Chn cho php cht a ch ALE l chn u ra tch cc cao. Khi ni 8031 ti b nh ngoi th cng P0 dng trao i c a ch v d liu. Hay ni cch khc 8031 dn c a ch v d liu qua cng P0 tit kim s chn. Chn ALE c s dng phn knh a ch v d liu. 1.8 Cc chn cng vo/ra v cc chc nng ca chng Bn cng P0, P1, P2 v P3 u s dng 8 chn v to thnh cng 8 bt. Tt c cc cng khi Reset u c cu hnh nh cc u ra, sn sng c s dng nh cc cng u ra. Mun s dng cng no trong s cc cng ny lm u vo th n phi c lp trnh. 1.8.1 Cng P0 Cng P0 chim tt c 8 chn (t chn 32 n 39). N c th c dng nh cng u ra, s dng cc chn ca cng P0 va lm u ra, va lm u vo th mi chn phi c ni ti mt in tr ko bn ngoi 10kW. iu ny l do mt thc t l cngP0 l mt mng m khc vi cc cng P1, P2 v P3. Khi nim mng m c s dng trong cc chp MOS v chng mc no n ging nh collector h i vi cc chp TTL. Trong bt k h thng no s dng 8751, 89C51 hoc DS5000 ta thng ni cngP0 ti cc in tr ko (Xem hnh 5), bng cch ny ta c th s dng c cng P0cho c 2 trng hp u ra v u vo. Vi nhng in tr ko ngoi c ni, khi Reset cng P0 c cu hnh nh mt cng u ra.

Hnh 5: Cng P0 vi cc in tr ko. Cng P0 l u vo: Vi cc in tr c ni ti cng P0 nhm to n thnh cng u vo th n phi c lp trnh bng cch ghi 1 ti tt c cc bit ca P0. Vai tr kp ca cng P0: Nh trn hnh 1, cng P0 c gn l cc bit a chAD0 - AD7 cho php n c s dng va cho a ch, va cho d liu. Khi ni 8051/31 ti b nh ngoi th cng P0 cung cp c a ch v d liu, 8051 dn d liu v a ch qua cng P0 tit kim s chn. ALE c s dng tch a ch v d liu vi s tr gip ca IC cht d liu 74LS373. 1.8.2 Cng P1 Cng P1 cng chim tt c 8 chn (t chn 1 n chn 8) n c th c s dng nh u vo hoc u ra. So vi cng P0 th cng ny khng cn n in tr ko v n c cc in tr ko bn trong. Trong qu trnh Reset th cng P1 c cu hnh nh mt cng u ra. Cng P1 l u vo: Tng t P0, bin cng P1 thnh u vo th n phi c lp trnh bng cch ghi 1 n tt c cc bit ca n. 1.8.3 Cng P2 Cng P2 cng chim 8 chn (cc chn t 21 n 28). N c th c s dng nh u vo hoc u ra, ging nh cng P1, cng P2 cng khng cn in tr ko v n c cc in tr ko bn trong. Khi Reset, th cng P2 c cu hnh nh mt cng u ra. Cng P2 l u vo: to cng P2 nh u vo th n phi c lp trnh bng cch ghi cc s 1 ti tt c cc chn ca n. Vai tr kp ca P2: Trong cc h thng 8751, 89C51 v DS5000 th P2 c dng nh u ra. Tuy nhin trong h thng 80312 th cng P2 c th c dng cng viP0 to ra a ch 16 bit i vi b nh ngoi. Nh ch ra trn hnh 1 cng P2 cng c ch nh nh l cc bit a

ch A8 - A15 bo chc nng kp ca n. V mt b 8031 c kh nng truy cp 64k byte b nh ngoi, nn n cn mt ng a ch 16 bt. Trong khi P0 cung cp 8 bit thp qua A0 - A7. Cng vic ca P2 l cung cp cc bt a ch A8 -A15. Hay ni cch khc khi 8031 c ni ti b nh ngoi th P2 c dng cho 8 bt cao ca a ch 16 bit v n khng th dng cho vo/ra. T nhng trnh by trn y ta c th kt lun rng trong cc h thng vi iu khin 8751, 89C51 hoc DS5000 th ta c cc cng P0, P1, P2 v P3 cho cc thao tc vo ra v nh th l c th cho cc ng dng vi hu ht cc b vi iu khin. Ngoi ra cng P3 cn dnh cho cc chc nng c bit khc m ta s cng bn di y. 1.8.4 Cng P3 Cng P3 chim tng cng l 8 chn t chn 10 n chn 17. N c th c s dng nh u vo hoc u ra. Cng P3 khng cn cc in tr ko cng nh P1 v P2. Mc d cng P3 c cu hnh nh mt cng u ra khi Reset, nhng y khng phi l cch n c s dng ph bin nht. Cng P3 c b sung cc chc nng quan trng, c bit. Bng 2 cung cp cc chc nng khc ca cng P3. Thng tin ny p dng cho c 8051 v 8031: Bt ca cng P3 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 Chc nng Nhn d liu (RXD) Pht d liu (TXD) Ngt 0(INT0) Ngt 1(INT1) B nh thi 0 (TO) B nh thi 1 (T1) Ghi (WR) c (RD) Bng 2: Cc chc nng khc ca cng P3 chn s 10 11 12 13 14 15 16 17

Cc bit P3.0 v P3.1 cung cp tn hiu nhn v pht d liu trong truyn thng d liu ni tip. Cc bit P3.2 v P3.3 c dnh cho cc ngt ngoi. Bit P3.4 v P3.5 c dng cho cc b nh thi 0 v 1. Cui cng cc bit P3.6 v P3.7 ghi v c cc b nh ngoi khi c ni ti cc h thng 8031.

Keil C - Bi 5 - B m , b nh thi trong 8051


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 Ch hot ng B nh thi 13 bit:8 bit l b nh thi/b m, 5 bit t trc. 0 B nh thi 16 bit: khng c t trc. 1 B nh thi 8 bit: t np li. 2 Ch b nh thi chia tch. 3 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 Chu k b nh thi 1/1,6666MHz=0,6us 1/1MHz=1us 1/0,9216MHz=1,085us

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. 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: 1. Np gi tr TMOD cho thanh ghi bo nh thi no (Timer0 hay Timer1) c s dng v ch no c chn. 2. Np cc thanh ghi TL v TH vi cc gi tr m ban u. 3. Khi ng b nh thi. 4. 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. 5. Dng b nh thi. 6. Xo c TF cho vng k tip. 7. 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 b) Tnh theo s thp phn (FFFF - YYXX + 1)*12/f (ms) trong YYXX Chuyn i cc gi tr YYXX ca TH, TL v s l cc gi tr khi to ca TH, TL tng ng. thp phn nhn mt s thp phn NNNNN Lu rng cc gi tr YYXX l theo s Hex. sau ly (65536 NNNNN)*12/f (ms). 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; //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

} } void delay(void) { TMOD=0x01; TL0=0xF2; TH0=0xFF; 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

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: 1. TMOD c np. 2. Gi tr FFF2H c np v TH0 - TL0 3. 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,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,085ms to ra b tr bng s_m1,085ms. 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,085ms = 15,19ms cho na chu k v c chu k l T = 2 15,19ms = 30, 38ms 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. Cc bc tm cc gi tr ca cc thanh ghi TH v TL: 1. Chia thi gian tr cn thit cho 1.085ms 2. 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.085ms. iu c ngha l phi mt rt nhiu khong thi gian 1,085ms c c mt xung 5ms. c c ta chia 5ms cho 1.085ms 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 = 250ms. 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.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). //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

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: 1. 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. 2. Np li thanh ghi TH v TL vi gi tr m ban u. 3. Khi ng b nh thi. 4. 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. 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<at89x51.h> void delay(void); main() { TMOD=0x20; TH1=0x00; TL1=0xFE; P1_5=1; while(1) { delay(); P1_5=~P1_5; } } //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

void delay(void) { TR1=1; while(!TF1){} TR1=0; TF1=0; }

//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. 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 Chc nng M t P3.4 T0 u vo ngoi ca b m 0 P3.5 T1 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; } } 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. //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

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.

Keil C - Bi 6 - Truyn thng ni tip vi 8051


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 buc phi 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 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

Data carrier detect (DCD) Received data (RxD) Transmitted data (TxD) Data terminal ready (DTR) Signal ground (GND) Data set ready (DSR)

7 8 9

Request to send (RTS) Yu cu gi Clear to send (CTS) Xo gi Ring indicator (RI) 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 22mF. gi tr ph bin nht cho cc t ny l 22mF. 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 iv 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 tmJ. 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) 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) (1)

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 ?!! L Nhng ta li c mt cch khc ci t c tc 19200 baud.J 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: 1. Np thanh ghi TMOD gi tr 20H: bo rng s dng Timer1 ch 2 thit lp ch baud.

2. Np thanh ghi TH1 cc gi tr ph hp thit lp ch baud truyn d liu ni tip. 3. 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. 4. Bt TR1=1 khi ng Timer1. 5. Xo bit c truyn d liu: TI=0. 6. Byte k t cn phi truyn c ghi vo SBUF. 7. Bit c truyn TI c kim tra bng mt vng lp i n lc d liu c truyn xong (c TI=1). 8. truyn k t tip theo quay tr v bc 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 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() { TMOD=0x20; TH1=0xFD; //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 //Chn Timer1, ch 2 //Ci t tc 9600 baud

SCON=0x50; TR1=1;

//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() { TMOD=0x20; TH1=0xFD; SCON=0x50; TR1=1; //Khai bo th vin cho 89c51 //Chng trnh chnh //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: P2=0xFF; break; } } }

//mc nh l tt tt c Led.

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); sendsothuc(b); send(10); } //Vng lp v hn //Gi bin s nguyn //Gi du xung dng //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

Keil C - Bi 7 - Ngt trong 8051


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! L 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 trnmc 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 ng ca chng trong IE c mc cao. hiu r im quan trng ny ta hy xt v d 1. V d 1: Hy lp trnh cho 8051: a) cho php ngt ni tip, ngt Timer0 v ngt phn cng ngoi 1 (EX1) b) cm ngt Timer0 c) sau trnh by cch cm tt c mi ngt ch bng mt lnh duy nht. Li gii: #include<at89x51.h> main() { //a) IE=0x96; //1001 0110: lnh ny tng ng vi 4 lnh pha di EA=1; ES=1; ET0=1; EX1=1; //b) ET0=0; //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 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 //Cho php s dng ngt //Cho php ngt cng ni tip //Cho php ngt timer0 //Cho php ngt ngoi 1 //Cm ngt timer0

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 200ms trn chn P2.1. Hy s dng b Timer0 to ra sng vung, tn s ca 8051 l XTAL = 11.0592MHz. Li gii: Chu k 200ms, vy na chu k l 100ms. Ta c: 100ms/1,085ms=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; TR0=1; }

//o trng thi chn P2_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 1085ms v mc thp di 15ms vi gi thit tn s XTAL = 11.0592MHz. Hy s dng b nh thi Timer1.

Li gii: V 1085ms/1.085ms=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; while(1) { //Khai bo th vin cho VK 89x51 //Chng trnh chnh //cho php ngt ngoi 1 //vng lp v hn //khng lm g } } 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

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) //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 } } 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

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 casn 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-inserver). 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 thng ni tip c thc hin. Trong 8051 ch c mt ngt dnh ring cho truyn thng ni tip. Ngt ny c dng cho c truyn v nhn d liu. Nu bit ngt truyn thng ES - IE.4 trong thanh ghi IE c php, th khi 1 trong 2 c RI hoc TI bt ln, 8051 s nhn c ngt v nhy n a ch trnh phc v ngt dnh cho truyn thng ni tip 0023H trong bng vector ngt thc hin n. Trong trnh ISR ny chng ta phi kim tra cc c TI v RI xem c no gy ra ngt p

ng mt cch ph hp (xem v d 6).

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 kh ng 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 TF0v TF1 v 1 ngt dnh cho truyn thng ni tip. 8051 c th c lp trnh cho php hoc cm mt ngt bt k cng nh thit lp mc u tin cho n theo yu cu ca thut ton ng dng.

You might also like