huong dan hoc 89c51

Upload: trumhaichum

Post on 30-Oct-2015

423 views

Category:

Documents


0 download

DESCRIPTION

This is document about 89C51

TRANSCRIPT

  • cng bi ging 8051 Starter Kit

    1

    Chng I: Gii thiu h Vi iu khin 8051

    Vi iu khin 8051 l mt trong nhng vi iu khin 8 bit thng dng nht hin nay. Bt u xut hin vo nm 1980, tri qua gn 30 nm, hin c ti hng trm bin th (derrivatives) c sn xut bi hn 20 hng khc nhau, trong phi k n cc i gia trong lng bn dn (Semiconductor) nh ATMEL, Texas Instrument, Philips, Analog Devices Ti Vit Nam, cc bin th ca hng ATMEL l AT89C51, AT89C52, AT89S51, AT89S52 c thi gian xut hin trn th trng kh lu v c th ni l c s dng rng ri nht trong cc loi vi iu khin 8 bit. Chng ny s tp trung m t tng i chi tit cu trc bn trong ca cc bin th ni trn (tm gi chung l AT89) ca hng ATMEL.

    Cu trc ca AT89 dng s khi tng qut

    CPU

    B nh chng

    trnh

    B nh d liu

    Vo/ra song song

    Vo/ra ni tip

    Ngt B nh thi / b m

    P1

    P2

    P3

    P4

    Timer0

    Timer1

  • cng bi ging 8051 Starter Kit

    2

    Cu trc bus Bus a ch ca h vi iu khin 8051 gm 16 ng tn hiu (thng gi l bus a ch 16 bit). Vi s lng bit a ch nh trn, khng gian nh ca chip c m rng ti a l 216 = 65536 a ch, tng ng 64K.

    Bus d liu ca h vi iu khin 8051 gm 8 ng tn hiu (thng gi l bus d liu 8 bit), l l do ti sao ni 8051 l h vi iu khin 8 bit. Vi rng ca bus d liu nh vy, cc chip h 8051 c th x l cc ton hng 8 bit trong mt chu k lnh.

    CPU (Central Processing Unit) CPU l n v x l trung tm, l b no ca ton b h thng vi in t c tch hp trn chip vi iu khin. CPU c cu to chnh gm mt n v x l s hc v lgic ALU (Arithmethic Logic Unit) - ni thc hin tt c cc php ton s hc v php lgic cho qu trnh x l.

    B nh chng trnh (Program Memory) Khng gian b nh chng trnh ca AT89 l 64K byte, tuy nhin hu ht cc vi iu khin AT89 trn th trng ch tch hp sn trn chip mt lng b nh chng trnh nht nh v chim di a ch t 0000h tr i trong khng gian b nh chng trnh. AT89C51/AT89S51 c 4K byte b nh chng trnh loi Flash tch hp sn bn trong chip. y l b nh cho php ghi/xa nhiu ln bng in, chnh v th cho php ngi s dng thay i chng trnh nhiu ln. S ln ghi/xa c thng ln ti hng vn ln. AT89C52/AT89S52 c 8K byte b nh chng trnh cng loi. B nh chng trnh ca cc chip h 8051 c th thuc mt trong cc loi: ROM, EPROM, Flash, hoc khng c b nh chng trnh bn trong chip. Tn ca tng chip th hin chnh loi b nh chng trnh m n mang bn trong, c th l vi v d sau:

    STT Tn chip ROM EPROM Flash 1 8051 4 Kbyte x x 2 8052 8 Kbyte x x 3 8031 x x x 4 8032 x x x 5 87C51 x 4 Kbyte x 6 87C52 x 8 Kbyte x 7 AT89C51 / AT89S51 x x 4 Kbyte 8 AT89C52 / AT89S52 x x 8 Kbyte

  • cng bi ging 8051 Starter Kit

    3

    B nh chng trnh dng cha m ca chng trnh np vo chip. Mi lnh c m ha bi 1 hay vi byte, dung lng ca b nh chng trnh phn nh s lng lnh m b nh c th cha c. a ch u tin ca b nh chng trnh (0x0000) chnh l a ch Reset ca 8051. Ngay sau khi reset (do tt bt ngun, do mc in p ti chn RESET b ko ln 5V...), CPU s nhy n thc hin lnh t ti a ch ny trc tin, lun lun l nh vy. Phn cn trng trong khng gian chng trnh khng dng lm g c. Nu mun m rng b nh chng trnh, ta phi dng b nh chng trnh bn ngoi c dung lng nh mun. Tuy nhin khi dng b nh chng trnh ngoi, b nh chng trnh onchip khng dng c na, b nh chng trnh ngoi s chim di a ch ngay t a ch 0x0000.

    Hnh nh minh ha b nh chng trnh

    B nh d liu (Data Memory) Vi iu khin h 8051 c khng gian b nh d liu l 64K a ch, cng l

    dung lng b nh d liu ln nht m mi chip thuc h ny c th c c (nu phi ghp mt cch chnh tc, s dng cc ng tn hiu ca bus a ch v d liu). B nh d liu ca cc chip h 8051 c th thuc mt hay hai loi: SRAM hoc EEPROM. B nh d liu SRAM c tch hp bn trong mi chip thuc h vi iu khin ny, c dung lng khc nhau ty loi chip, nhng thng ch khong vi trm byte. y chnh l ni cha cc bin trung gian trong qu trnh hot ng ca chip. khi mt in, do bn cht ca SRAM m gi tr ca cc bin ny cng b mt theo. Khi c in tr li, ni dung ca cc nh cha cc bin ny cng l bt k, khng th xc nh trc. Bn cnh b nh loi SRAM, mt s chip thuc h

    a ch reset

    Vector ngt th 1

    ...

    Vector ngt th n

    Thn chng trnh (chng trnh chnh,

    chng trnh con, chng

    trnh x l ngt, bng cc hng

    s ...)

    0x0000

    0x0003

    0x0FFF

    0x0030

  • cng bi ging 8051 Starter Kit

    4

    8051 cn c thm b nh d liu loi EEPROM vi dung lng ti a vi Kbyte, ty tng loi chip c th. Di y l mt vi v d v b nh chng trnh ca mt s loi chip thng dng thuc h 8051.

    STT Tn chip B nh SRAM B nh EEPROM 1 AT89C51 128 byte 0 2 AT89C52 256 byte 0 3 AT89C2051 128 byte 0 4 AT89S51 128 byte 0 5 AT89S52 256 byte 0 6 AT89S8252 256 byte 2048 byte

    Tng qut v b nh ca 8051, ta c th thy mi chip 8051 gm c nhng b nh sau:

    i vi cc chip c b nh SRAM 128 byte th a ch ca cc byte SRAM ny c nh s t 00h n 7Fh. i vi cc chip c b nh SRAM 256 byte th a ch ca cc byte SRAM c nh s t 00h n FFh. c hai loi chip, SRAM c a ch t 00h n 7Fh c gi l vng RAM thp, phn c a ch t 80h n FFh (nu c) c gi l vng RAM cao.

    Bn cnh cc b nh, bn trong mi chip 8051 cn c mt tp hp cc thanh ghi chc nng c bit (SFR Special Function Register). Cc thanh ghi ny lin quan n hot ng ca cc ngoi vi onchip (cc cng vo ra, timer, ngt ...). a ch ca chng trng vi di a ch ca vng SRAM cao, tc l cng c a ch t 80h n FFh.

    Phn khng gian a ch cho b nh chng trnh cn trng, bng 64 Kbyte tr i lng b nh onchip

    Phn khng gian a ch cho b nh d liu (hon ton trng rng 64K byte, dnh cho b nh d liu ghp thm bn ngoi nu c)

    B nh SRAM B nh chng

    trnh onchip

    64 Kbyte

    Dung lng ty loi chip

  • cng bi ging 8051 Starter Kit

    5

    Vy khi truy cp vo mt a ch thuc di t 00h n 7Fh th s truy cp n nh thuc vng RAM thp. Tuy nhin khi truy cp n mt a ch x thuc di t 80h n FFh th xy ra vn cn gii quyt: s truy cp n thanh ghi SFR a ch x hay truy cp n nh a ch x ca vng RAM cao? Nh sn xut quy nh rng, trong trng hp ny, nu kiu truy cp s dng ch a ch trc tip th s truy cp vo vng SFR, ngc li nu kiu truy cp s dng ch a ch gin tip th s truy cp vo vng RAM cao.

    B nh d liu RAM onchip thng dng cha cc bin tm thi trong qu trnh vi iu khin hot ng, cng l ni dnh cho ngn xp hot ng. Khng gian d liu 64Kbyte c trng hon ton v ch dng c khi ghp ni vi b nh d liu bn ngoi. Khi ghp ni thm b nh d liu bn ngoi, dung lng ca cc b nh ny s chim dn cc v tr trong khng gian, tuy nhin khng h nh hng n 128byte RAM onchip.

    Ngn xp trong 8051 lin quan n mt thanh ghi tn l con tr ngn xp SP (Stack Pointer). Thanh ghi ny lun tr vo nh ca ngn xp, tc l n cha a ch ca v tr ngay st v tr c th lu a ch/d liu tip theo vo. Khi ct 1 byte a ch/d liu vo ngn xp, SP t ng tng ln 1 n v sau mi ct a ch/d liu vo nh c a ch bng vi gi tr ca SP sau khi tng. Khi ly 1 byte a ch/d liu ra khi ngn xp, gi tr s c ly ra sau SP mi t ng tr i 1 n v. Gi tr sau khi reset ca SP l 0x07, do quy nh ngn xp s ct d liu t a ch 0x08 tr i. Tuy nhin do c tnh hot ng bnh trng theo chiu tng a ch m ngn xp thng c b tr ln vng trn cng ca b nh RAM onchip trnh tranh chp vi cc bin lu trong RAM.

    Vng RAM thp c a ch t 00h

    n 7Fh

    Vng RAM cao, c a ch t 80h

    n FFh Vng SFR, cng c a ch t 80h

    n FFh

  • cng bi ging 8051 Starter Kit

    6

    Hnh nh minh ha b nh d liu

    Vng RAM thng (khng nh a ch bit

    c)

    0x00

    0x7F

    4 bng thanh ghi mi bng c 8 thanh ghi R0..7

    0x1F 0x20

    Vng RAM 16 byte c th nh a ch bit t

    0x00 n 0x7F

    0x2F 0x30

    y l vng cc thanh ghi chc

    nng c bit SFR (Special Function Register) c c

    8051 v 8052. Truy nhp

    (ghi/c) vng ny l truy nhp vo

    cc a ch t 0x80 n 0xFF nhng phi theo ch a ch trc tip

    8052 c thm vng RAM cao (a ch cng t

    0x80 n 0xFF) nhng

    truy nhp phi theo ch a

    ch gin tip

    phn bit vi vng

    SFR

  • cng bi ging 8051 Starter Kit

    7

    Bn cc thanh ghi chc nng c bit SFR

  • cng bi ging 8051 Starter Kit

    8

    Cng vo ra song song (I/O Port) 8051 c 4 cng vo ra song song, c tn ln lt l P0, P1, P2 v P3. Tt c

    cc cng ny u l cng vo ra hai chiu 8bit. Cc bit ca mi cng l mt chn trn chip, nh vy mi cng s c 8 chn trn chip.

    Hng d liu (dng cng lm cng ra hay cng vo) l c lp gia cc cng v gia cc chn (cc bit) trong cng mt cng. V d, ta c th nh ngha cng P0 l cng ra, P1 l cng vo hoc ngc li mt cch ty , vi c 2 cng P2 v P3 cn li cng vy. Trong cng mt cng P0, ta cng c th nh ngha chn P0.0 l cng vo, P0.1 li l cng ra ty .

    Lin quan n mi cng vo/ra song song ca 8051 ch c mt thanh ghi SFR ( thanh ghi chc nng c bit) c tn trng vi tn ca cng. Ta c cc thanh ghi P0 dng cho cng P0, thanh ghi P1 dng cho cng P1 y l cc thanh ghi nh a ch n tng bit (bit addressable), do ta c th dng cc lnh tc ng bit i vi cc bit ca cc thanh ghi ny. Mi thanh ghi ny gm 8 bit tng ng vi cc chn (bit) ca cng . Khi mt chn (bit) cng no c dng lm cng vo th trc bit tng ng trong thanh ghi SFR phi c t mc 1. Nu mt chn (bit) cng no c dng lm cng ra th gi tr ca bit tng ng trong thanh ghi SFR s l gi tr lgic mun a ra chn cng . Nu mun a ra mc lgic cao (in p gn 5V), bit tng ng trong thanh ghi phi c t bng 1, hin nhin nu mun a ra mc lgic thp (in p gn 0V) th bit tng ng trong thanh ghi phi c t bng 0. Nh ni trn, cc bit trong thanh ghi cng c th c t bng 1/0 m khng lm nh hng n cc bit cn li trong cng bng cch dng cc lnh setb (t ln 1) hay clr (t v 0).

    Sau khi t mt chn cng lm cng vo, ta c th dng cc lnh kim tra bit c vo v kim tra cc mc lgic ca mch ngoi ang p vo l mc 0 hay mc 1. Cc lnh ny l jb (nhy nu bit bng 1), jnb (nhy nu bit bng 0).

    Mi cng c cu trc gm mt latch (chnh l cc bit ca thanh ghi cng), mch li u ra (output driver) v mch m u vo (input buffer).

    Ngoi chc nng vo/ra thng thng, mt s cng cn c tch hp thm chc nng ca mt s ngoi vi khc. Xem bng lit k sau:

    Cc chn cng P1.0 v P1.1 c tch hp vi cc tn hiu ca timer2 trong trng hp chip l 8052.

    Khi dng vi cc chc nng ca cc ngoi vi, chn cng tng ng phi c t ln 1. Nu khng cc tn hiu s lun b ghim mc 0.

  • cng bi ging 8051 Starter Kit

    9

    S ca mch ca mt chn cng:

    Cng P0 khng c in tr treo cao (pullup resistor) bn trong, mch li to mc cao ch c khi s dng cng ny vi tnh nng l bus dn knh a ch/d liu. Nh vy vi chc nng ra thng thng, P0 l cng ra open drain, vi chc nng vo, P0 l cng vo cao tr (high impedance). Nu mun s dng cng P0 lm cng vo/ra thng thng, ta phi thm in tr pullup bn ngoi. Gi tr in tr pullup bn ngoi thng t 4K7 n 10K.

    Cc cng P1, P2 v P3 u c in tr pullup bn trong, do c th dng vi chc nng cng vo/ra thng thng m khng cn c thm in tr pullup bn ngoi. Thc cht, in tr pullup bn trong l cc FET, khng phi in tr tuyn tnh thng thng, tuy vy nhng kh nng phun dng ra ca mch li khi u ra mc cao (hoc khi l u vo) rt nh, ch khong 100 micro Ampe. Trong datasheet ca AT89S5x (mt trong nhng bin th ca h 8051 do Atmel sn xut) c thng k s liu nh sau:

  • cng bi ging 8051 Starter Kit

    10

    Theo , nu ta thit k cc cng phi cung cp cho ti u ra mc cao mt lng dng in IOH = 60 micro Ampe th mc in p u ra VOH s b ko st xung, ch c th m bo t 2.4V tr ln bi nh sn xut, khng th cao st vi 5V nh l thuyt.

    Trong khi , kh nng nut dng ca mch li khi u ra mc thp li cao hn rt nhiu, c th t t vi n hng chc mili Ampe.

    Nh vy, khi thit k vi cc phn t bn ngoi, ta nn n c tnh vo/ra ca cc chn cng. V d khi dng ghp ni vi LED n hoc LED 7 thanh, ta nn thit k chn cng nut dng t LED lm LED sng (cng ni vi Cathode ca LED), khng nn thit k chn cng phun dng cho LED lm LED sng (cng ni vi Anode ca LED).

    Cng vo ra ni tip (Serial Port) Cng ni tip trong 8051 ch yu c dng trong cc ng dng c yu cu

    truyn thng vi my tnh, hoc vi mt vi iu khin khc. Lin quan n cng ni tip ch yu c 2 thanh ghi: SCON v SBUF. Ngoi ra, mt thanh ghi khc l thanh ghi PCON (khng nh a ch bit) c bit 7 tn l SMOD quy nh tc truyn ca cng ni tip c gp i ln (SMOD = 1) hay khng (SMOD = 0).

    D liu c truyn nhn ni tip thng qua hai chn cng P3.0(RxD) v P3.1(TxD).

    Thanh ghi SBUF l thanh ghi 8bit cha d liu truyn hoc nhn. V thc cht c hai thanh ghi d liu khc nhau, mt dnh cha d liu truyn i, mt cha d li nhn c. C hai thanh ghi ny u c chung mt tn l SBUF, tuy nhin CPU hon ton phn bit c mt cch d dng. Khi ta mun truyn d liu i, ta phi ghi vo thanh ghi SBUF (v d vit lnh mov SBUF,a), cn khi mun c kim tra d liu nhn v ta phi c thanh ghi SBUF (v d vit lnh mov a,SBUF). CPU s cn c vo vic thanh ghi SBUF nm v tr ton hng ch (ton hng bn tri) hay ton hng ngun (ton hng bn phi) quyt nh s truy nhp (c/ghi) thanh ghi SBUF no. Ngi lp trnh khng cn phi quan tm x l vn ny. Thanh ghi quy nh ch hot ng v iu khin cng ni tip l thanh ghi SCON (nh a ch bit).

    SM0 SM1 SM2 REN TB8 RB8 TI RI

    Bit SM0, SM1, SM2 quy nh ch hot ng ca cng ni tip. Thng thng truyn thng gia 2 vi iu khin hoc gia 1 vi iu khin v 1 my tnh, gi tr ca bit SM2 c t bng 0. Khi truyn thng theo kiu mng a vi x l (multiprocessor communication), SM2 c t bng 1. Hai bit SM0 v SM1 thc s l cc bit quy nh ch hot ng ca cng ni tip, chng to ra 4 t hp (00,01,10 v 11) ng vi 4 ch hot ng m t trong bng sau.

  • cng bi ging 8051 Starter Kit

    11

    SM0 SM1 Ch Khung d liu Baud rate 0 0 0 - ng b 8 bit SBUF Fosc/12 0 1 1 - D b 8 bit SBUF Thay i c 1 0 2 - D b 8bit SBUF + RB8/TB8 Fosc/32 hoc Fosc/64 1 1 3 - D b 8bit SBUF + RB8/TB8 Thay i c

    Ch 0: l ch truyn ng b duy nht. Chn RxD s l tn hiu truyn/nhn d liu, chn TxD l tn hiu xung nhp. Bit LSB (bit 0) ca d liu c truyn i trc tin. Tc truyn c nh v bng 1/12 gi tr thch anh. Ch 1: l ch truyn d b 8 bit. D liu 8 bit c ng khung bi mt bit Start (= 0) u v mt bit Stop (=1) cui trc khi c truyn i. Tc truyn thay i c theo ngi lp trnh. Ch 2: l ch truyn d b 9 bit. D liu 9 bit c ghp thnh bi 8bit trong thanh ghi SBUF v bit RB8 (trng hp nhn v) hoc TB8 (trng hp truyn i) trong thanh ghi SCON. Ngoi ra cc bit Start v Stop vn c gn bnh u v cui khung truyn. Trong ch ny, tc truyn ch c th chn c 1 trong 2 mc: 1/32 hoc 1/64 gi tr ca thch anh (ty thuc vo gi tr ca bit SMOD trong thanh ghi PCON ni trn). Ch 3: cng l ch truyn d b 9 bit, khc vi ch 2 ch tc truyn c th thay i c theo ngi lp trnh nh trong ch 1.

    Bit REN trong thanh ghi SCON l bit cho php nhn d liu. D liu ch c nhn qua cng ni tip khi bit ny = 1.

    Bit TB8 l bit d liu th 9 trong trng hp truyn i 9 bit (8 bit kia trong thanh ghi SBUF).

    Bit RB8 l bit d liu th 9 trong trng hp nhn v 9 bit (8 bit kia trong thanh ghi SBUF).

    Bit TI l c ngt truyn, bo hiu vic truyn 1 khung d liu hon tt.

    Bit RI l c ngt nhn, bo hiu vic nhn 1 khung d liu hon tt.

    to ra tc truyn (Baud rate) ca cng ni tip trong 8051, phi dng n timer1 ch Auto Reload 8bit. Gi tr np li cha trong thanh ghi TH1 c tnh ton theo cng thc sau (ph thuc vo Baud rate mong mun v gi tr ca thch anh).

    Tm li s dng cng ni tip ca 8051, hy thc hin cc bc sau: - Chn ch cho cng ni tip (ng b/d b, 8bit/9bit...), t chn c

    gi tr cho cc bit trong thanh ghi SCON. Lu xa cc bit TI v RI.

  • cng bi ging 8051 Starter Kit

    12

    - Chn tc truyn mong mun, t tnh ra gi tr ca thanh ghi TH1. Cho timer1 chy ch Auto Reload 8bit (khng dng ngt trn timer1).

    - t mc u tin ngt v cho php ngt cng ni tip nu mun. - Bt u qu trnh truyn d liu bng mt lnh ghi d liu mun truyn vo

    thanh ghi SBUF. Qu trnh truyn kt thc th c TI s t ng t ln 1. - Khi mt khung d liu c nhn y , c RI s t ng t ln 1 v

    ngi lp trnh lc ny c th dng lnh c thanh ghi SBUF ly d liu nhn c ra x l.

    Ngt (Interrupt) 8051 ch c mt s lng kh t cc ngun ngt (interrupt source) hoc c

    th gi l cc nguyn nhn ngt. Mi ngt c mt vector ngt ring, l mt a ch c nh nm trong b nh chng trnh, khi ngt xy ra, CPU s t ng nhy n thc hin lnh nm ti a ch ny. Bng tm tt cc ngt trong 8051 nh sau:

    Vi 8052, ngoi cc ngt trn cn c thm ngt ca timer2 (do vi iu khin ny c thm timer2 trong s cc ngoi vi onchip).

    Mi ngt c dnh cho mt vector ngt ko di 8byte. V mt l thuyt, nu chng trnh ngn, m to ra cha trong 8 byte, ngi lp trnh hon ton c th t phn chng trnh x l ngt ngay ti vector ngt. Tuy nhin trong hu ht cc trng hp, chng trnh x l ngt c dung lng m to ra ln hn 8byte nn ti vector ngt, ta ch t lnh nhy ti chng trnh x l ngt nm vng nh khc. Nu khng lm vy, m chng trnh x l ngt ny s ln sang, vo vector ngt k cn.

    STT Tn ngt M t C ngt

    Thanh ghi cha c

    Vector ngt

    1 INT0 Ngt ngoi 0 khi c tn hiu tch cc theo kiu chn chn P3.2

    IE0 TCON 0x0003

    2 Timer0 Ngt trn timer0 khi gi tr timer0 trn t gi tr max v gi tr min

    TF0 TCON 0x000B

    3 INT1 Ngt ngoi 1 khi c tn hiu tch cc theo kiu chn chn P3.3

    IE1 TCON 0x0013

    4 Timer1 Ngt trn timer1 khi gi tr timer1 trn t gi tr max v gi tr min

    TF1 TCON 0x001B

    5 Serial Port Ngt cng ni tip khi vi iu khin nhn hoc truyn xong mt byte bng cng ni tip

    TI, RI SCON 0x0023

  • cng bi ging 8051 Starter Kit

    13

    Lin quan n ngt ch yu c hai thanh ghi l thanh ghi IE v thanh ghi IP.

    cho php mt ngt, bit tng ng vi ngt v bit EA phi c t bng 1. Thanh ghi IE l thanh ghi nh a ch bit, do c th dng cc lnh tc ng bit tc ng ring r ln tng bit m khng lm nh hng n gi tr cc bit khc. C ngt hot ng c lp vi vic cho php ngt, iu c ngha l c ngt s t ng t ln bng 1 khi c s kin gy ngt xy ra, bt k s kin c c cho php ngt hay khng. Do vy, trc khi cho php mt ngt, ta nn xa c ca ngt m bo sau khi cho php, cc s kin gy ngt trong qu kh khng th gy ngt na. V d trc khi cho php ngt timer0 m timer 0 chy v trn (d l trn mt hay nhiu ln) th c TF0 s bng 1, nu sau ta cho php ngt timer0 th s gy ra ngt ngay do c trn ang bng 1 (s kin trn gy ngt trong trng hp ny l trn trong qu kh, khng phi s kin ta quan tm n). V vy hy xa c TF0 trc khi cho php ngt trn timer0.

    Ngoi tr c ca ca ngt ni tip (v c ca ngt timer2 trong 8052), cc c ngt khc u t ng c xa khi CPU thc hin chng trnh phc v ngt. L do l ngt cng ni tip (v ngt timer2 trong 8052) c gy ra bi 2 nguyn nhn (c 2 c cho mi ngt), khi xy ra ngt, ngi lp trnh cn phi kim tra xem c no c t bng 1 phn bit nguyn nhn gy ra ngt l nguyn nhn no x l thch hp. V d ngt cng ni tip l ngt c gy ra bi 1 trong 2 nguyn nhn: vi iu khin nhn xong hoc truyn xong mt byte d liu qua cng ni tip. Xy ra s kin no th c ngt tng ng s t ng c t ln bng 1, nu nhn xong th c RI bng 1, nu truyn xong th c TI bng 1. Trong chng trnh x l ngt, ngi lp trnh phi kim tra c TI hay c RI bng 1 quyt nh x l ngt truyn hay x l ngt nhn. Sau khi kim tra, ngi lp trnh phi vit lnh xa c v vic ny khng c CPU thc hin t ng nh cc c ngt khc.

  • cng bi ging 8051 Starter Kit

    14

    Ni n ngt khng th khng ni n mc u tin ca ngt. Mc u tin ca ngt y c th c hiu l s phn bc, quyt nh x l ngt no khi hai hay nhiu ngt xy ra. C 2 c ch phn bc u tin. Th nht l c ch phn bc dnh cho cc ngt xy ra ng thi, hai ngt A v B xy ra cng mt thi im nhn t pha vi iu khin. Th hai l c ch phn bc dnh cho cc ngt xy ra xen k nhau, trong khi ang x l ngt A th ngt B xy ra, vy th trong tng trng hp, CPU s x l ra sao? Hy xem di y.

    Vi trng hp cc ngt xy ra ng thi, CPU s xem xt mc u tin ca cc ngt , t quyt nh x l ngt c mc u tin cao hn trc. Mc u tin trong trng hp ny l mc u tin cng (c quy nh bi nh sn xut, bi cu trc sn c ca 8051 v ngi lp trnh khng th thay i c).

    Nhn vo bng trn ta thy ngt INT0 l ngt c mc u tin cao nht v ngt timer2 l ngt c mc u tin thp nht trong s cc ngt. Nh vy nu ngt ngoi 1 v ngt timer0 cng xy ra mt lc, ngt timer0 s c CPU x l trc, sau mi x l ngt ngoi 1.

    Vi trng hp xy ra ngt xen k, khi CPU ang x l ngt A m ngt B xy ra, CPU s gii quyt theo 2 hng: tip tc x l ngt A nu mc u tin ca ngt B khng cao hn mc u tin ca ngt A, hoc s dng vic x l ngt A li, chuyn sang x l ngt B nu mc u tin ca ngt B cao hn mc u tin ca ngt A. Mc u tin cho cc ngt trong trng hp ny khng phi l mc u tin cng do nh sn xut quy nh (tc l khng cn c vo bng trn) m l do ngi lp trnh t. Lp trnh vin c th dng thanh ghi IP quy nh mc u tin cho cc ngt mt trong hai mc: mc cao v mc thp. t mc u tin ca mt ngt (trong trng hp xy ra xen k) mc cao, ta t bit tng ng vi ngt trong thanh ghi IP bng 1, mc thp ng vi gi tr bit = 0.

    Thanh ghi IP (Interrupt Priority) - - PT2 PS PT1 PX1 PT0 PX0

    Cc bit trong thanh ghi IP tng ng vi cc ngt ng nh trong thanh ghi IE (bit PX0 dnh cho ngt ngoi 0, bit PT0 dnh cho ngt timer 0)

  • cng bi ging 8051 Starter Kit

    15

    Mt iu d nhn ra l nu mt ngt c t mc u tin cao (bit tng ng trong thanh ghi IP bng 1) th s chng c ngt no c th xen vo qu trnh x l n c na.

    Ni v mc u tin ngt, c th dng mt v d tng qut sau, gi s hai ngt timer0 v ngt cng ni tip cng c cho php (cc bit tng ng v bit EA trong thanh ghi IE c t bng 1), bit PT0 = 0, bit PS = 1 th:

    - Nu hai ngt cng xy ra, ngt timer0 s thng th v c phc v trc. - Nu ngt cng ni tip xy ra trc v ang c x l th ngt timer0 nu

    c xy ra cng khng th chen vo, lm dng qu trnh x l ngt cng ni tip c.

    - Nu ngt timer0 xy ra trc v ang c x l m ngt cng ni tip xy ra th CPU s phi dng vic x l ngt timer0 li, chuyn sang x l ngt cng ni tip, x l xong mi quay li x l tip ngt timer0.

    Nh ni trn, 8051 c 2 ngt ngoi l INT0 v INT1. Ngt ngoi c hiu l ngt c gy ra bi s kin mc lgic 0 (mc in p thp, gn 0V) hoc sn xung (s chuyn mc in p t mc cao v mc thp) xy ra chn ngt tng ng (P3.2 vi ngt ngoi 0 v P3.3 vi ngt ngoi 1). Vic la chn kiu ngt c thc hin bng cc bit IT (Interrupt Type) nm trong thanh ghi TCON. y l thanh ghi iu khin timer nhng 4 bit LSB (bit0..3) c dng cho cc ngt ngoi.

    Khi bit ITx = 1 th ngt ngoi tng ng c chn kiu l ngt theo sn xung, ngc li nu bit ITx = 0 th ngt ngoi tng ng c s c kiu ngt l ngt theo mc thp. Cc bit IE l cc bit c ngt ngoi, ch c tc dng trong trng hp kiu ngt c chn l ngt theo sn xung.

    Khi kiu ngt theo sn xung c chn th ngt s xy ra duy nht mt ln khi c sn xung ca tn hiu, sau khi tn hiu mc thp, hoc c sn ln, hoc mc cao th cng khng c ngt xy ra na cho n khi c sn xung tip theo. C ngt IE s dng ln khi c sn xung v t ng b xa khi CPU bt u x l ngt.

    Khi kiu ngt theo mc thp c chn th ngt s xy ra bt c khi no tn hiu ti chn ngt mc thp. Nu sau khi x l xong ngt m tn hiu vn mc thp th li ngt tip, c nh vy cho n khi x l xong ngt ln th n , tn hiu ln mc cao ri th thi khng ngt na. C ngt IE trong trng hp ny khng c ngha g c. Thng thng kiu ngt hay c chn l ngt theo sn xung.

    B nh thi/B m (Timer/Counter) 8051 c 2 timer tn l timer0 v timer1. Cc timer ny u l timer 16bit, gi

    tr m max do bng 216 = 65536 (m t 0 n 65535).

  • cng bi ging 8051 Starter Kit

    16

    Hai timer c nguyn l hot ng hon ton ging nhau v c lp. Sau khi cho php chy, mi khi c thm mt xung ti u vo m, gi tr ca timer s t ng c tng ln 1 n v, c nh vy cho n khi gi tr tng ln vt qu gi tr max m thanh ghi m c th biu din th gi tr m li c a tr v gi tr min (thng thng min = 0). S kin ny c hiu l s kin trn timer (overflow) v c th gy ra ngt nu ngt trn timer c cho php (bit ETx trong thanh ghi IE = 1).

    Vic cho timer chy/dng c thc hin bi cc bit TR trong thanh ghi TCON (nh a ch n tng bit).

    Khi bit TRx = 1, timerx s m, ngc li khi TRx = 0, timerx s khng m mc d vn c xung a vo. Khi dng khng m, gi tr ca timer c gi nguyn.

    Cc bit TFx l cc c bo trn timer, khi s kin trn timer xy ra, c s c t ng t ln bng 1 v nu ngt trn timer c cho php, ngt s xy ra. Khi CPU x l ngt trn timerx, c ngt TFx tng ng s t ng c xa v 0.

    Gi tr m 16bit ca timerx c lu trong hai thanh ghi THx (byte cao) v TLx (byte thp). Hai thanh ghi ny c th ghi/c c bt k lc no. Tuy nhin nh sn xut khuyn co rng nn dng timer (cho bit TRx = 0) trc khi ghi/c cc thanh ghi cha gi tr m.

    Cc timer c th hot ng theo nhiu ch , c quy nh bi cc bit trong thanh ghi TMOD (khng nh a ch n tng bit).

  • cng bi ging 8051 Starter Kit

    17

    xc nh thi gian, ngi ta chn ngun xung nhp (clock) a vo m trong timer l xung nhp bn trong (dnh cho CPU). Ngun xung nhp ny thng rt u n (c tn s n nh), do t s m ca timer ngi ta c th nhn vi chu k xung nhp tnh ra thi gian tri qua. Timer lc ny c gi chnh xc vi ci tn timer, tc b nh thi.

    m cc s kin bn ngoi, ngi ta chn ngun xung nhp a vo m trong timer l tn hiu t bn ngoi ( c chun ha v dng xung vung 0V/5V). Cc tn hiu ny s c ni vi cc bit cng c dn knh thm cc tnh nng T0/T1/T2. Khi c s kin bn ngoi gy ra thay i mc xung u vo m, timer s t ng tng ln 1 n v ging nh trng hp m xung nhp bn trong. Lc ny, timer c gi chnh xc vi ci tn khc: counter, tc b m (s kin).

    Nhn vo bng m t thanh ghi TMOD bn trn, ta c th nhn thy c 2 b 4 bit ging nhau (gm GATEx, C/Tx, Mx0 v Mx1) dnh cho 2 timer0 v 1. ngha cc bit l nh nhau i vi mi timer.

    Bit GATEx quy nh vic cho php timer m (run timer). Nu GATEx = 0, timerx s m khi bit TRx bng 1, dng khi bit TRx bng 0. Nu GATEx = 1, timerx s ch m khi bit TRx = 1 v tn hiu ti chn INTx = 1, dng khi mt trong hai iu kin trn khng cn tha mn. Thng thng ngi ta dng timer vi GATE = 0, ch dng timer vi GATE = 1 trong trng hp mun o rng xung v lc timer s ch m thi gian khi xung a vo chn INTx mc cao.

    Bit C/Tx quy nh ngun clock a vo m trong timer. Nu C/Tx = 0, timer s c cu hnh l b nh thi, nu C/Tx = 1, timer s c cu hnh l b m s kin. Hai bit cn li (Mx0 v Mx1) to ra 4 t hp cc gi tr (00,01,10 v 11) ng vi 4 ch hot ng khc nhau ca timerx. Trong 4 ch thng ch dng ch timer/counter 16bit (Mx1 = 0, Mx0 = 1) v ch Auto Reload 8bit timer/counter (Mx1 = 1, Mx0 = 0).

    Trong ch timer/counter 16bit, gi tr m (cha trong hai thanh ghi THx v TLx) t ng c tng ln 1 n v mi ln nhn c thm mt xung nhp. Khi gi tr m tng vt qu gi tr max = 65535 th s trn v 0, c ngt TFx c t ng t = 1. Ch ny c dng trong cc ng dng m thi gian v m s kin.

    Trong ch Auto Reload 8bit, gi tr m s ch c cha trong thanh ghi TLx, cn gi tr ca thanh ghi THx bng mt s n (t 0 n 255) do ngi lp trnh a vo. Khi c thm 1 xung nhp, gi tr m trong TLx ng nhin cng tng ln 1 n v nh bnh thng. Tuy nhin trong trng hp ny, gi tr m ln nht l 255 ch khng phi 65535 nh trng hp trn v timer/counter ch cn 8bit. Do vy s kin trn lc ny xy ra nhanh hn, ch cn vt qu 255 l gi tr m s trn. C ngt TFx vn c t ng t = 1 nh trong trng hp trn 16bit. im khc bit l thay v trn v 0, gi tr THx s c t ng np li (Auto Reload) vo thanh ghi TLx, do timer/counter sau khi trn s c gi tr bng n (gi tr cha trong THx) v s m t gi tr n tr i. Ch ny c dng trong vic to Baud rate cho truyn thng qua cng ni tip.

  • cng bi ging 8051 Starter Kit

    18

    s dng timer ca 8051, hy thc hin cc bc sau: - Quy nh ch hot ng cho timer bng cch tnh ton v ghi gi tr cho

    cc bit trong thanh ghi TMOD. - Ghi gi tr m khi u mong mun vo 2 thanh ghi m THx v TLx. i

    khi ta khng mun timer/counter bt u m t 0 m t mt gi tr no thi im trn gn hn, hoc chn hn trong tnh ton sau ny. V d nu cho timer m t 15535 th sau 50000 xung nhp (tc 50000 micro giy vi thch anh 12MHz) timer s trn, v thi gian mt giy c th d dng tnh ra kh chnh xc = 20 ln trn ca timer (ng nhin mi ln trn li phi np li gi tr 15535).

    - t mc u tin ngt v cho php ngt trn timer (nu mun). - Dng bit TRx trong thanh ghi TCON cho timer chy hay dng theo

    mun.

  • cng bi ging 8051 Starter Kit

    19

    Chng II: Cc ngn ng lp trnh cho vi iu khin

    Trong k thut vi x l ni chung, ngn ng lp trnh thng c chia lm 2 loi: Ngn ng bc thp v Ngn ng bc cao.

    Ngn ng bc thp l ngn ng my hoc ngn ng gn vi my. Ngn ng my l ngn ng bc thp nht, chnh l m my dng nh phn. Lp trnh vi ngn ng ny ng ngha vi vic lp trnh vin phi vit tng bit 0/1 cho tng m lnh c th, ng nhin l vic rt vt v v kh khn. K n l ngn ng gn vi my, chnh l hp ng (Assembly). Vi ngn ng ny, lp trnh vin c th vit cc lnh c th dng k t, tun theo mt tp hp cc k t nht nh gi l tp lnh. Ni cch khc, cp ny, lp trnh vin s vit cc lnh dng m gi nh (mnemonic) thay v phi vit cc bit 0/1 cho cc m lnh c th. Trnh hp ng (Assembler) - mt phn mm trn my tnh - s m nhim vic dch cc lnh do lp trnh vin vit dng m gi nh sang dng m my 0/1.

    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 C l ngn ng thng dng hn c trong k thut vi x l. V bn cht, s dng cc ngn ng ny thay cho ngn ng bc thp l s 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.

    Mi loi ngn ng c u v nhc im ring. Vi hp ng (i din cho ngn ng bc thp): - u im: m my sinh ra rt ngn gn, thi gian x l ca CPU v

    th cng c gim thiu, trnh hp ng (Assembler) ca cc h vi iu khin u min ph i vi ngi s dng.

    - Nhc im: kh khn trong vic tip cn vi tp lnh (tuy dng m gi nh nhng vn cha thc s gn vi ngn ng con ngi), cc cu trc gii thut (ifelse, for, switchcase) hu ht khng c sn, v vy qu trnh lp trnh kh khn, mt nhiu thi gian v cng sc, vic k tha v pht trin l gn nh khng th.

    Vi ngn ng C (i din cho ngn ng bc cao): - u im: ngn ng gn vi ngn ng con ngi, cc cu trc gii

    thut c sn, do to s thun tin, d dng trong s din t thut ton, vic k tha v pht trin l kh thi, tn t thi gian.

  • cng bi ging 8051 Starter Kit

    20

    - Nhc im: m my sinh ra thng di hn so vi hp ng (tt nhin cng cn ty vo nng lc ca lp trnh vin), thi gian x l ca CPU v th cng di hn, cc trnh bin dch (Compiler) ty theo cp ti u m c thit k v bn vi gi rt cao.

    Trong thc t hin nay, cc vi iu khin c ti nguyn (resourse) ni chung v b nh (memory) ni ring rt phong ph v di do. Mt khc cc trnh bin dch (Compiler) cng c thit k ngy cng ti u, h tr rt nhiu cc thao tc x l gii thut, cho php trn lnh hp ng vo nhng tnh hung yu cu kht khe v mt thi gian v lng m my sinh ra. Chnh v th yu cu v ti gin m my khi lp trnh khng cn qu bc xc nh trc kia. S dng ngn ng bc cao gip rt ngn rt nhiu thi gian nghin cu, thit k sn phm trc khi a ra th trng (time to market), nng cao kh nng k tha, pht trin, ci tin cc tnh nng sn phm, t ko di chu k sng (life time) ca sn phm trn th trng. l l do ti sao ngn ng bc cao (in hnh l ngn ng C) l s la chn ca hu ht nhng ngi tc nghip trn lnh vc k thut vi x l.

  • cng bi ging 8051 Starter Kit

    21

    Chng III: Hng dn s dng trnh bin dch Keil C cho h vi iu khin 8051

    Trong s cc trnh bin dch C (C Compiler) cho h vi iu khin 8051, Keil C l mt trnh bin dch ti u, c s dng rng ri. Chng ny ch yu hng dn s dng trnh bin dch ny trong vic thit k phn mm cho h vi iu khin 8051.

    Ci t Keil C chy c trn cc H iu hnh Win98, Windows2000, WindowsME, WindowsXP. ci t, hy chy file setup.exe trong th mc Setup ca Keil C trn a CD km theo. Tip hy theo cc ch dn ca giao din ci t.

    To mt Project mi

    Tip g tn project vo hp thoi. Chn ng dn v bm OK.

  • cng bi ging 8051 Starter Kit

    22

    Chn tip loi vi iu khin s s dng (trong trng hp ny l AT89S52).

    Chn cu tr li No khi c hi Copy Standart Startup Code to Project Folder and Add File to Project?

  • cng bi ging 8051 Starter Kit

    23

    To mt file mi

    Sau khi Keil to cho ta mt file mc nh dng Text, hy Save File li di dng mong mun (*.c nu l file m ngun, hoc *.h nu l file header). Mt Project ch yu s dng hai loi file ni trn. Tip thc hin son tho cc file theo mun.

  • cng bi ging 8051 Starter Kit

    24

    Cu trc mt chng trnh

    Mt s lu khi lp trnh vi Keil C Khai bo cc file header Khi s dng loi vi iu khin 8051 no ( la chn trong khi to Project mi) th phi s dng file header ca loi . Trong trng hp ny ta s dng file AT89X52.H cho vi iu khi AT89S52. Cc file header c tm trong th mc C51\INC\ ca Keil C ci ra. nh ngha hng s trong b nh chng trnh unsigned char code ; V d nh ngha mt mng 3 hng s: unsigned char code array[3] = {1,2,3}; nh ngha cc chng trnh con phc v ngt void (void) interrupt do lp trnh vin ty t. c tra phn cui file header (AT89X52.H). Khng nn vit lnh dng biu thc di m nn tch ra thnh tng php tnh nh thc hin ln lt.

  • cng bi ging 8051 Starter Kit

    25

    Cc tnh nng khc ging nh ANSI C.

    Bin dch Project to ra file m my dng *.hex np vo chip, click chut phi nh hnh v.

    Trong hp thoi hin ra, hy check vo Creat Hex File nh ch dn.

  • cng bi ging 8051 Starter Kit

    26

    Cui cng chn theo Menu nh hnh nh, hoc bm phm F7.

    File m my *.hex to ra s nm trong cng mt th mc vi cc file khc ca Project. S dng phn mm SPI Flash Programmer c sn trn a CD km theo m file m my (bng nt Open) v np xung chip (nt Program). Phn mm ny chy trc tip khng cn ci t v chy tt nht trn cc Win98, 2000 v ME, vi WindowsXP i khi khng tng thch mt s rt t cc trng hp.

  • cng bi ging 8051 Starter Kit

    27

    ChngIV: Hng dn thc hnh mt s bi th nghim mu vi 8051 Starter Kit

    Bi 1: Ghp ni vi LED n Light Emitting Diode Nguyn l thit k

    LED n c ni trc tip vi cng vo ra ca vi iu khin AT89, s dng in tr hn dng 470 Ohm. Vi iu khin a ra mc logic 0 lm n sang, mc logic 1 lm n tt.

    V d: Thc hin nhp nhy LED. // Khai bao cac file header #include #include

    // Khai bao cac ham void Delay(unsigned int n); void InitSystem(void);

    // Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i

  • cng bi ging 8051 Starter Kit

    28

    } void InitSystem(void) { LCD_E = 0; } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { P0 = ~P0; Delay(1000); } }

  • cng bi ging 8051 Starter Kit

    29

    Bi 2: Ghp ni vi LED 7 thanh 7 Segment LED Nguyn l thit k

    LED 7 thanh s dng l loi Anode chung. Cc LED 7 thanh c ni chung chn d liu vi nhau v ni vi mt cng vo ra 8 bit ca vi iu khin. Vic cp in cho tng LED c thc hin bi cc transistor, iu khin bi cc chn vo ra khc ca vi iu khin AT89. Cc LED c cp ngun cho sng cc thi im khc nhau, vic qut cc LED ny c thc hin lin tc, do hin tng nh lu vng mc m con ngi nhn thy cc LED hin th mt cch lin tc.

    V d: Hin th 4 s 1234 4 LED 7 thanh. // Khai bao cac file header #include #include

  • cng bi ging 8051 Starter Kit

    30

    // Khai bao cac bien toan cuc unsigned char code LED_code[] = {Number0, Number1, Number2, Number3, Number4, Number5, Number6, Number7, Number8, Number9};

    // Khai bao cac ham void Delay(unsigned int n); void InitSystem(void); void Display(unsigned char digit1, unsigned char digit2, unsigned char digit3, unsigned char digit4);

    // Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i

  • cng bi ging 8051 Starter Kit

    31

    // Hien thi so thu hai LED = LED_code[digit2]; K2 = 0; Delay(1); K2 = 1;

    // Hien thi so thu ba LED = LED_code[digit3]; K3 = 0; Delay(1); K3 = 1;

    // Hien thi so thu tu LED = LED_code[digit4]; K4 = 0; Delay(1); K4 = 1; } void InitSystem(void) { LCD_E = 0; } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { Delay(10); Display(1,2,3,4); } }

  • cng bi ging 8051 Starter Kit

    32

    Bi 3: S dng ngt ngoi ca vi iu khin 8051 External Interrupt Nguyn l thit k

    Ngt ngoi ca AT89 c kch hot bi mt phm bm bn ngoi. Khi phm bm, mc lgic 0 s c a vo chn ngt ca vi iu khin, khi nh phm, mc lgic tr li mc cao. T C8 c mc nhm hn ch rung phm do c kh ch to khng hon ton chnh xc ca cng tc.

    V d: Nhn tn hiu phm bm bn ngoi bng ngt, th hin bng vic o trng thi LED n. // Khai bao cac file header #include #include

    // Khai bao cac bien toan cuc

    // Khai bao cac ham void InitSystem(void);

    // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Chon ngat theo suon xuong IT1 = 1; // Cho phep ngat ngoai 1 EX1 = 1; EA = 1; } void ExternalInterrupt(void) interrupt IE1_VECTOR {

  • cng bi ging 8051 Starter Kit

    33

    // Dao trang thai cua cong P0 (trang thai cac LED) khi co ngat P0 = ~P0; }

    // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1); }

    Bi 4: Ghp ni vi ma trn phm Button Matrix Nguyn l thit k

    Phm bm c ni thnh ma trn 3 hng x 3 ct, cc hng v ct c ni vi cc chn cng vo ra ca vi iu khin AT89. Khi mt phm c bm, n s ni mt hng v mt ct tng ng. Thut ton qut phm c s dng l ln lt tm hng v tm ct (hoc ngc li). Khi tm hng, cc hng s c t lm u vo, cc ct c t lm u ra mc thp. Sau kim tra cc hng xem c hng no mc thp hay khng (c phm no bm gy ra ni vi ct hay khng)? Sau khi xc nh c hng s t cc ct lm u vo, hng va tm c lm u ra mc

  • cng bi ging 8051 Starter Kit

    34

    thp. Vic kim tra c tin hnh vi cc ct. Sau khi xc nh c hng v ct s suy ra phm c bm.

    V d: Qut ma trn phm v hin th s th t phm c bm ln LED 7 thanh. // Khai bao cac file header #include #include

    // Khai bao cac bien toan cuc unsigned char code LED_code[] = {Number0, Number1, Number2, Number3, Number4, Number5, Number6, Number7, Number8, Number9}; unsigned char stt=0; // Khai bao cac ham void Delay(unsigned int n); void InitSystem(void); void ScanMatrix(void); void Display(unsigned char number);

    // Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i

  • cng bi ging 8051 Starter Kit

    35

    Delay(1); K4 = 1; } void InitSystem(void) { // Cam LCD LCD_E = 0; // Cau hinh Timer0 o che do 16 bit TMOD = 0x01; // Cho phep ngat tran Timer 0 ET0 = 1; EA = 1; // Cho Timer 0 chay TR0 = 1; } void Timer0Interrupt(void) interrupt TF0_VECTOR { // Dung Timer 0 TR0 = 0; // Nap lai gia tri = 55536--> con 10000 clock nua la tran TH0 = (unsigned char)(55536>>8); TL0 = (unsigned char)(55536); // Tiep tuc cho chay Timer 0 TR0 = 1; Display(stt); } void ScanMatrix(void) { // Chuyen cac hang lam dau vao, cac cot lam dau ra muc thap ROW_1 = 1; ROW_2 = 1; ROW_3 = 1; COL_1 = 0; COL_2 = 0; COL_3 = 0; // Kiem tra xem co phim bam? if((!ROW_1)|(!ROW_2)|(!ROW_3)) { // Chong rung phim

  • cng bi ging 8051 Starter Kit

    36

    Delay(100); // Kiem tra lai // Neu la hang 1 co phim bam if(!ROW_1) { // Chuyen cac cot lam dau vao COL_1 = 1; COL_2 = 1; COL_3 = 1; // Hang 1 lam dau ra muc thap ROW_1 = 0; // Kiem tra cac cot de xac dinh phim if(!COL_1) stt = 1; else if (!COL_2) stt = 2; else if (!COL_3) stt = 3; } // Neu la hang 2 co phim bam if(!ROW_2) { // Chuyen cac cot lam dau vao COL_1 = 1; COL_2 = 1; COL_3 = 1; // Hang 2 lam dau ra muc thap ROW_2 = 0; // Kiem tra cac cot de xac dinh phim if(!COL_1) stt = 4; else if (!COL_2) stt = 5; else if (!COL_3) stt = 6; } // Neu la hang 3 co phim bam if(!ROW_3) { // Chuyen cac cot lam dau vao COL_1 = 1; COL_2 = 1; COL_3 = 1; // Hang 3 lam dau ra muc thap ROW_3 = 0;

  • cng bi ging 8051 Starter Kit

    37

    // Kiem tra cac cot de xac dinh phim if(!COL_1) stt = 7; else if (!COL_2) stt = 8; else if (!COL_3) stt = 9; } } } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { ScanMatrix(); } }

  • cng bi ging 8051 Starter Kit

    38

    Bi 5: Ghp ni vi my tnh qua giao din RS232 RS232 Communication

    Nguyn l thit k

    Giao thc truyn thng gia cng COM ca my tnh v cng ni tip UART ca vi iu khin AT89 l tng thch. Tuy nhin v mt in hc th c s khc bit v mc lgic gia my tnh v vi iu khin. Vi mch MAX232CPE c s dng to ra s tng thch v mt in hc, t ng chuyn i mc lgic gia vi iu khin v my tnh.

    V d: Thit k thit b t ng truyn tr li PC nhng d liu nhn c. // Khai bao cac file header #include #include

  • cng bi ging 8051 Starter Kit

    39

    // Khai bao cac bien toan cuc

    // Khai bao cac ham void InitSystem(void);

    // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Khoi tao cong noi tiep SCON = 0x50; // Khoi tao Timer1 dung de tao Baud Rate TMOD = 0x20; TH1 = 0xFD; TR1 = 1; // Cho phep ngat cong noi tiep ES = 1; EA = 1; } void SerialPortInterrupt(void) interrupt SIO_VECTOR { unsigned char temp; // Kiem tra xem ngat la do nhan duoc du lieu hay truyen xong du lieu? if(RI==1) { RI = 0; // Doc du lieu nhan duoc tu bo dem temp = SBUF; // Truyen tra lai may tinh SBUF = temp; } else { TI = 0; } }

    // Chuong trinh chinh

  • cng bi ging 8051 Starter Kit

    40

    void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1); }

    Bi 6: Ghp ni vi LCD Liquid Crystal Display Nguyn l thit k

  • cng bi ging 8051 Starter Kit

    41

    LCD l thit b hin th chun, tit kim nng lng v khng i hi phi qut lin tc nh LED 7 thanh. Cc loi LCD k t (character LCD) u tun theo mt tp lnh chung.

    Cc thao tc ghi c c thc hin theo biu thi gian sau:

  • cng bi ging 8051 Starter Kit

    42

    V d: Hin th dng ch Truong CDSP HN ln dng th nht, dng ch 8051 Starter Kit ln dng th hai ca LCD. // Khai bao cac file header #include #include

    // Khai bao cac bien toan cuc unsigned char code string1[] = "Truong CDSP HN"; unsigned char code string2[] = "8051 Starter Kit";

    // Khai bao cac ham void InitSystem(void); void Delay(unsigned int n); void InitLCD(void); void WriteCommand(unsigned char command); void WriteCharacter(unsigned char character); void WriteLCD(unsigned char x); void SendString2LCD(unsigned char code *p); void DisplayText(void);

    // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Sang den backlight LCD_BL = 0; // Tre de LCD tu khoi tao ben trong (it nhat 15ms) Delay(100); // Tat den backlight LCD_BL = 1; InitLCD(); } void Delay(unsigned int n) { unsigned int i,j; for(i=0;i

  • cng bi ging 8051 Starter Kit

    43

    void InitLCD(void) { WriteCommand(0x30); WriteCommand(0x30); WriteCommand(0x30);

    // 8 bit, 2 lines, font 5x7 WriteCommand(0x38); // Display on, hide cursor WriteCommand(0x0C);

    // Xoa man hinh WriteCommand(0x01); } void DisplayText(void) { // Dich con tro den vi tri thu 2, dong thu nhat WriteCommand(0x81); SendString2LCD(string1); // Dich con tro den dau dong thu hai WriteCommand(0xC0); SendString2LCD(string2); } void WriteLCD(unsigned char x) { LCD_RW = 0; LCD_DATA = x;

    LCD_E = 1; LCD_E = 0; Delay(5); } void WriteCommand(unsigned char command) { LCD_RS = 0; WriteLCD(command); } void WriteCharacter(unsigned char character) {

  • cng bi ging 8051 Starter Kit

    44

    LCD_RS = 1; WriteLCD(character); } void SendString2LCD(unsigned char code *p) { unsigned char i=0; while(p[i]!=0) { WriteCharacter(p[i]); i++; Delay(200); } } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); DisplayText(); // Vong lap vo tan while(1); }

    Bi 7: Ghp ni vi ADC Analog to Digital Converter Nguyn l thit k

  • cng bi ging 8051 Starter Kit

    45

    ADC0804 l mt trong nhng IC cho php chuyn i in p dng tng t (analog) sang gi tr dng s (digital), c ng dng trong rt nhiu cc thit b o lng. u vo in p c th trong di t 0 n +5V. Gi tr s u ra trong di t 0 n 255. Cc tn hiu D0-D7 dng a d liu chuyn i xong ti vi iu khin. Cc tn hiu CS, RD, WR (u tch cc mc thp) dng ra lnh cho ADC bt u chuyn i hoc a d liu chuyn i ra. K t khi nhn c lnh yu cu chuyn i t vi iu khin, ADC s mt mt khong thi gian thc hin nhim v. Trong khong thi gian ny tnh hiu INTR s mc cao (bo bn). Khi qu trnh chuyn i kt thc, tn hiu ny s t ng tr li mc thp thng bo rng ADC chuyn i xong v c th thc hin ln chuyn i tip theo. Lp trnh vin c th thm d tn hiu INTR bit khi no ADC bn, khi no ADC sn sng hoc n gin ch cn i mt vi mili giy trc khi c kt qu hoc ra lnh chuyn i tip theo.

    V d: o in p (trong di t 0 n +5V) c to ra t chit p v hin th gi tr o c ln LCD. // Khai bao cac file header #include #include

    // Khai bao cac bien toan cuc unsigned char code string1[] = "8051 Starter Kit"; unsigned char code string2[] = "Dien ap = "; unsigned char voltage,digit1,digit2;

    // Khai bao cac ham void InitSystem(void); void Delay(unsigned int n); void DelayShort(void); void InitLCD(void); void WriteCommand(unsigned char command); void WriteCharacter(unsigned char character); void WriteLCD(unsigned char x); void SendString2LCD(unsigned char code *p); void DisplayText(void); void DisplayVoltage(void); void Convert(); void Calculate();

  • cng bi ging 8051 Starter Kit

    46

    // Dinh nghia cac ham void InitSystem(void) { // Cam LCD LCD_E = 0; // Sang den backlight LCD_BL = 0; // Tre de LCD tu khoi tao ben trong (it nhat 15ms) Delay(100); // Tat den backlight LCD_BL = 1; InitLCD(); } void Delay(unsigned int n) { unsigned int i,j; for(i=0;i

  • cng bi ging 8051 Starter Kit

    47

    { // Dich con tro den dau dong thu nhat WriteCommand(0x80); SendString2LCD(string1); // Dich con tro den dau dong thu hai WriteCommand(0xC1); SendString2LCD(string2); // Dich con tro den vi tri don vi do WriteCommand(0xCE); WriteCharacter('V'); } void WriteLCD(unsigned char x) { LCD_RW = 0; LCD_DATA = x;

    LCD_E = 1; LCD_E = 0; Delay(5); } void WriteCommand(unsigned char command) { LCD_RS = 0; WriteLCD(command); } void WriteCharacter(unsigned char character) { LCD_RS = 1; WriteLCD(character); } void SendString2LCD(unsigned char code *p) { unsigned char i=0; while(p[i]!=0) { WriteCharacter(p[i]); i++; Delay(50); }

  • cng bi ging 8051 Starter Kit

    48

    } void Convert(void) { ADC_CS = 0; DelayShort(); ADC_WR = 0; DelayShort(); ADC_WR = 1; DelayShort(); ADC_CS = 1;

    // Tre cho chuyen doi xong Delay(10); // Chuyen Port thanh cong vao de chuan bi doc du lieu ADC_DATA = 0xFF; ADC_CS = 0; DelayShort(); ADC_RD = 0; DelayShort(); // Doc du lieu vao voltage = ADC_DATA; ADC_RD = 1; DelayShort(); ADC_CS = 1; } void Calculate(void) { unsigned int temp; temp = (voltage*10); temp = temp/52; // tinh ra dien ap tu gia tri ADC dua ve // tach phan nguyen va phan thap phan digit1 = (unsigned char) (temp/10); digit2 = (unsigned char)(temp%10); // chuyen sang ma ASCII digit1 = digit1 + 0x30; digit2 = digit2 + 0x30; } void DisplayVoltage(void)

  • cng bi ging 8051 Starter Kit

    49

    { // Dua con tro den vi tri can hien thi WriteCommand(0xCB); WriteCharacter(digit1); WriteCharacter('.'); WriteCharacter(digit2); } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); DisplayText(); // Vong lap vo tan while(1) { Convert(); Calculate(); DisplayVoltage(); } }

    Bi 8: Thit k h giao tip t xa bng hng ngoi Infrared Communication

    Nguyn l thit k

  • cng bi ging 8051 Starter Kit

    50

    Mch pht c thit k vi mt transistor cng sut nh c th ng ct ngun cp cho LED hng ngoi tn s ~36KHz. y l tn s c dng trong cc thit b thu pht hng ngoi ph bin trong sinh hot (TV, iu ha nhit , u a CD,)

    Mch thu c thit k vi mt thu hng ngoi sn c trn th trng. Mt thu ny c thit k vi b lc thng mt di, ch cho php cc tn s xp x 36KHz i qua. Do loi mt thu ny c bit nhy cm vi nhiu ngun nui nn u vo ngun nui cho mt c thit k vi mt mch lc RC thay v ni trc tip ln ngun ca mch th nghim. Bnh thng u ra ca mt thu mc cao, khi nhn c tn hiu hng ngoi tn s ~36KHz truyn ti, u ra ca mt thu s lp tc xung mc lgic thp (mc 0). Khi ht tn hiu hng ngoi, u ra li tr v mc logic cao (mc 1). Nh vo vic o khong thi gian mc thp ca u ra, ngi ta c th bit c thi gian pht xung tng ng bn pht, t suy ra m c truyn i. Trong v d sau s s dng tia hng ngoi truyn i 3 loi m, phn bit nhau bi thi gian pht i (2ms, 4ms v 6ms). Cc ngng phn bit cc m vi nhau v cc m vi nhiu l 1ms, 3ms, 5ms v 7ms. M th nht ko di 2ms tng ng vi khong 80 xung pht i tn s ~36KHz. M ny c pht i khi mch bn pht nhn c tn hiu t mt trong ba phm bm ca hng 1. M th hai ko di 4ms tng ng vi khong 160 xung pht i tn s ~36KHz. M ny c pht i khi mch bn pht nhn c tn hiu t mt trong ba phm bm ca hng 2. M th ba ko di 6ms tng ng vi khong 240 xung pht i tn s ~36KHz. M ny c pht i khi mch bn pht nhn c tn hiu t mt trong ba phm bm ca hng 3. V d: Thit k h thu pht tn hiu hng ngoi, thc hin thu pht ba loi m v hin th ln LCD loi m thu c. Code mu cho bn pht // Khai bao cac file header #include

  • cng bi ging 8051 Starter Kit

    51

    #include

    // Khai bao cac bien toan cuc

    // Khai bao cac ham void Delay(unsigned int n); void Delay12us(void); void InitSystem(void); void ScanMatrix(void); void Transmit(unsigned char n);

    // Dinh nghia cac ham void Delay(unsigned int n) { unsigned int i,j; for(i=0;i

  • cng bi ging 8051 Starter Kit

    52

    ROW_3 = 1; COL_1 = 0; COL_2 = 0; COL_3 = 0; // Kiem tra xem co phim bam? if((!ROW_1)|(!ROW_2)|(!ROW_3)) { // Chong rung phim Delay(100); // Kiem tra lai // Neu la hang 1 co phim bam if(!ROW_1) { Transmit(80); // Doi nha phim while(!ROW_1); } // Neu la hang 2 co phim bam if(!ROW_2) { Transmit(160); // Doi nha phim while(!ROW_2); } // Neu la hang 3 co phim bam if(!ROW_3) { Transmit(240); // Doi nha phim while(!ROW_3); } } } void Transmit(unsigned char n) { unsigned char i; for(i=0;i

  • cng bi ging 8051 Starter Kit

    53

    Delay12us(); IR_LED = 1; Delay12us(); } } // Chuong trinh chinh void main(void) { // Khoi tao he thong InitSystem(); // Vong lap vo tan while(1) { ScanMatrix(); } } Code mu cho bn thu // Khai bao cac file header #include #include

    // Khai bao cac bien toan cuc unsigned char code string1[] = "8051 Starter Kit"; unsigned char code string2[] = "Ma nhan duoc = ";

    // Khai bao cac ham void InitSystem(void); void Delay(unsigned int n); void InitLCD(void); void WriteCommand(unsigned char command); void WriteCharacter(unsigned char character); void WriteLCD(unsigned char x); void SendString2LCD(unsigned char code *p); void DisplayText(void);

    // Dinh nghia cac ham void InitSystem(void) { // Cam LCD

  • cng bi ging 8051 Starter Kit

    54

    LCD_E = 0;

    // Tre de LCD tu khoi tao ben trong (it nhat 15ms) Delay(100);

    InitLCD();

    // Khoi tao Timer0 o che do 16bit TMOD = 0x01;

    // Cau hinh ngat ngoai 0 theo suon xuong IT0 = 0; // Cho phep ngat ngoai 0 EX0 = 1; EA = 1; } void Delay(unsigned int n) { unsigned int i,j; for(i=0;i

  • cng bi ging 8051 Starter Kit

    55

    WriteCommand(0x80); SendString2LCD(string1); // Dich con tro den dau dong thu hai WriteCommand(0xC0); SendString2LCD(string2); } void WriteLCD(unsigned char x) { LCD_RW = 0; LCD_DATA = x;

    LCD_E = 1; LCD_E = 0; Delay(5); } void WriteCommand(unsigned char command) { LCD_RS = 0; WriteLCD(command); } void WriteCharacter(unsigned char character) { LCD_RS = 1; WriteLCD(character); } void SendString2LCD(unsigned char code *p) { unsigned char i=0; while(p[i]!=0) { WriteCharacter(p[i]); i++; Delay(100); } } void ExternalInterrupt0(void) interrupt IE0_VECTOR { unsigned char temp; // Xoa Timer 0

  • cng bi ging 8051 Starter Kit

    56

    TH0 = 0; TL0 = 0; // Cho Timer 0 chay TR0 = 1; // Doi cho den khi tin hieu nhan duoc ket thuc while(!P3_2); // Dung Timer 0 TR0 = 0; // So sanh gia tri cua Timer voi cac nguong de xac dinh ma nhan duoc temp = TH0; if((temp>THRESHOLD_1)&&(tempTHRESHOLD_2)&&(tempTHRESHOLD_3)&&(temp

  • cng bi ging 8051 Starter Kit

    57

    while(1); }

    File header cho ton b cc chng trnh mu trn bao gm file AT89X52.H c sn ca trnh bin dch Keil. Ngoi ra cn c thm mt file header khc tn l Kit8051.h do ngi s dng t to ra nhm nh ngha cc hng s, cc tn gi khc ca cc tn hiu giao tip, iu khin. Chi tit xin tham kho trong a CD km theo.