Lập Trình Nhúng - Vietnamese

Embed Size (px)

Citation preview

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    1/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    2/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    3/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    4/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    5/246

    Atienganh.blogspot.com No book no knowledge5

    Khi qut kin thc :

    Chng m u ny s:

    Cung cp khi qut v kha hc ny

    Gii thiu VK 8051

    Cu trc phn mm siu vng lp

    M t cch s dng cc chn iu khin

    Bn to ra hm tr nh th no? V ti sao bn cn n?

    Khi qut v kha hc ny

    Kha hc ny c lin quan n s thc hin ca phn mm (v mt lng nh phn cng)

    cho vic xy dng h thng nhng s dng 1 VK.

    Cc b vi x l c kim tra chi tit l h 8051 (Bao gm c thit b chun v

    thit b nh).

    Tt c lp trnh ngn ng C.

    Kt thc kha hc

    Kt thc kha hc, bn c th:

    1. Thit k phn mm cho b x l nhng ng dng n, trn c s nh,tiu chuncng nghip.

    2. Thc hin thit k trn bng cch s dng ngn ng lp trnh bc cao, hin i

    3. Bt u hiu cc vn v tin cy,an ton,lm th no thit k phn mm v

    chng trnh quyt nh c th c mt tc ng tch cc hoc tiu cc ln mt phn

    vng.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    6/246

    Atienganh.blogspot.com No book no knowledge6

    Sch tham kho

    Trong sut kha hc bn c th tham kho cun sch sau:

    Embedded C

    by Michael J. Pont (2002)

    Addison-Wesley

    [ISBN: 0-201-79523X]

    Thng tin chi tit ti:

    http://www.engg.le.ac.uk/books/Pont/ec51.htm

    :

    http://www.engg.le.ac.uk/books/pont/ec51.htmhttp://www.engg.le.ac.uk/books/pont/ec51.htm
  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    7/246

    Atienganh.blogspot.com No book no knowledge- 7 -

    Ti sao dng ngn ngC?

    y l ngn ng mc gia, vi cc tnh nng ca bc cao: h tr cho cc chc

    nng v cc modul, v cc tnh nng bc thp: truy cp vo phn cng thng qua con

    tr

    Hiu qu cao.

    Ph bin v d hiu.

    Thm ch nhng ngi pht trin my tnh bn ch s dng c Java v C++

    cng ddng hiu c php C.

    Tt, trnh bin dch c cho mi vi x l nhng, (8-bit to 32-bit or

    more) .

    Sch, cc kha o to, code v d v cc trang wed tho lun rng ri trn ton th gii .

    Ni chung ngn ng C c th khng l mt ngn ng hon ho pht trin h thng

    nhng, nhng n l mt s la chn tt (v khng chc c mt ngn ng hon ho

    c to ra.:-d).

    Cn bit nhng g?

    Trong sut kha hc ny, n s gi nh rng bn c kinh nghim lp trnh.V d -

    Java or C++.

    Mi ngi u c nn tng v lp trnh ri th vic hc C qu tht n gin

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    8/246

    Atienganh.blogspot.com No book no knowledge8

    The 8051 microcontroller

    Tnh nng in hnh ca 8051:

    32 chn I/O

    B nh trong (RAM) - 256 bytes.

    Nng cp ln ti 64 kbytes of ROM (B nh flash)

    3 timer/counter 16-bit

    9 ch ngt (2 ngt ngoi) vi 2 mc u tin.

    Ngun tiu th thp.

    Cc loi khc trong h 8051 thch hp cho mi th t h thng t v hng khng

    n iu khin TV.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    9/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    10/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    11/246

    Atienganh.blogspot.com No book no knowledge11

    V d: Trung tm iu khin nhit

    void main(void){/* Khoi tao he thong */C_HEAT_Init();

    while(1) /* vong lap mai mai */{

    /* tim kiem nhiet do nguoi dung cai dat thong qua dao dien nguoi dung*/C_HEAT_Get_Required_Temperature();

    /* tim kiem nhiet do phong hien tai ..thong qua sensor nhiet do */C_HEAT_Get_Actual_Temperature();

    /* dieu chinh bep lua theo yeu cau */

    C_HEAT_Control_Boiler();}}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    12/246

    Atienganh.blogspot.com No book no knowledge12

    c (v vit) cc chn

    Vn

    Lm th no vit phn mm c v vit t cc chn ca 8VK?

    Bi cnh:

    8051 chun c 4 cng 8-bit.

    Tt c cc chn u dung c c 2 chiu: input v out put .

    SFRs cc chn

    iu khin cc chn ca 8051 thng qua phn mm l c bit n nh l cc thanh ghi

    c bit special function registers (SFRs).

    V mt vt l, SFR l mt vng b nh trong RAM ni:

    P0 ti a ch 0x80

    P1 ti a ch 0x90

    P2 ti a ch 0xA0

    P3 ti a ch 0xB0

    Ch : 0x l nh dng s dng thp lc phn xem cun Embedded C, Chapter 2.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    13/246

    Atienganh.blogspot.com No book no knowledge13

    SFRs v cc chn

    Mt SFR phn u mt tp tin cho h 8051 s so dng :

    sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;

    Khai bo cc bin SFR nh danh, chng ta c th vit ti cc port mt cch n gin.

    V d, chng ta c th gi d liu ti Port 1 nh sau:

    unsigned char Port_data;

    Port_data = 0x0F;

    P1 = Port_data; /* viet 00001111 toi Port 1 */

    Cng nh vy, chng ta c th c t Port 1 nh sau:

    unsigned char Port_data;

    P1 = 0xFF; /* thiet lap che do doc */

    Port_data = P1; /* doc du lieu */

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    14/246

    Atienganh.blogspot.com No book no knowledge14

    Cch to v sdng bin sbit

    vit ti 1 chn n ca vk (p1_1) Chng ta c th dng Keil C d dng bin dch

    v kim sot li.

    #define LED_PORT P3

    #define LED_ON 0#define LED_OFF 1

    sbit Warning_led = LED_PORT^0; /* LED duoc ket noi toi pin 3.0 */

    Warning_led = LED_ON;

    ... /* delay */Warning_led = LED_OFF;

    ... /* delay */Warning_led = LED_ON;... /* etc */

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    15/246

    Atienganh.blogspot.com No book no knowledge15

    V d: c v vit bytes

    void main (void){unsigned char Port1_value;

    /* cai dat P1 de doc */P1 = 0xFF;

    while(1){/* doc tu P1 */Port1_value = P1;

    /* sao chep gia tri toi P2 */P2 = Port1_value;}

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    16/246

    Atienganh.blogspot.com No book no knowledge16

    To hm trbng phn mm

    Vn

    Lm th no to hm tr m khng dng ti phn cng (timer):Gii quyt

    Loop_Delay(){unsigned int x,y;

    for (x=0; x

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    17/246

    Atienganh.blogspot.com No book no knowledge17

    u nhc im ca hm delays

    To ra thi gian tr ngn.

    Khng yu cu timer (ca phn cng)

    Lm vic vi bt k VK no.

    Nhc im:

    thay i tn s, hoc thm ch thay i ti u ha trnh bin dch.

    Chun b cho chng tip theo

    Bn gi lp phn cng th nhng bi hc c. iu ny to cho bn c kh nng

    tp trung vo kha cnh phn mm ca h thng nhng of embedded systems, m khng cn

    quan tm n vn phn cng.

    Trong chng tip theo chng ti s chun b to ra h thng th nghim u tin ca

    bn trn phn cng thc t.

    Vui lng c chng 1, 2, 3 trc khi c

    chng tip theo

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    18/246

    Atienganh.blogspot.com No book no knowledge18

    Chng2: C s thit lp phn cng (resets, dao dng v port I

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    19/246

    Atienganh.blogspot.com No book no knowledge19

    Nhc li: The 8051 microcontroller

    Tnh nng in hnh ca 8051:

    32 cng vo ra I/O.

    B nh trong (RAM) - 256 bytes.

    Nng ln 64 kbytes vi b nh ca ROM (usually flash)

    3 Timer 16bit/ counter

    9 ch ngt vi 2 ch ngt trong vi 2 ch u tin .

    Low-power Idle and Power-down modes.

    Cc loi khc ca h 8051 rt thch hp cho tt c mi th t h thng t v hngkhng n iu khin TV.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    20/246

    Atienganh.blogspot.com No book no knowledge20

    Nhc li: Trung tm iu khin l si

    void main(void){/* khoi tao he thong */C_HEAT_Init();

    while(1) /* vong lap mai mai */{/* tim kiem nhiet do yeu cau thong qua giaodien nguoi dung */C_HEAT_Get_Required_Temperature();

    /* Nhiet do phong hien nay la.(thong qua gao

    dien nguoi dung */C_HEAT_Get_Actual_Temperature();

    /* dieu chinh bep ga theo yeu cau */C_HEAT_Control_Boiler();}

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    21/246

    Atienganh.blogspot.com No book no knowledge21

    Tng quan :

    Chng ny s:

    Gii thiu k thut m bn cn xy dng mt h thng nhng thc t u

    tin ca bn(trn bo th).

    Chnh xc, chng ta s xem xt:

    Mch dao ng

    Mch Reset

    MchLEDs

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    22/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    23/246

    Atienganh.blogspot.com No book no knowledge23

    Kt ni thch anh t

    VDDK nh th no?

    Trong trng hp khng c thng tin c th, gi tr ca t =30pF s thc hin

    tt trong mi trng hp.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    24/246

    Atienganh.blogspot.com No book no knowledge24

    Tn s dao ng v thi gian chu k my

    Trong cc thnh vin h 8051 ban u, 1 chu k my c khong 12 dao dng.

    Cc th h sau nh Infineon C515C, mt chu k my c khong 6 dao ng, trong cc thi bgn y nh Dallas 89C420, ch 1 dao dng trong mi chu k my.

    Kt qu l cc thnh vin th h sau hot ng cng tn s nhng thc hinnhiu vic v nhanh hn.

    Gi tn s cng thp cng tt

    Many developers select an oscillator Nhiu nh pht trin chn mt tn s cng hng, l gn hoc l gi tr cao nht c h tr bi thit b c bit .

    iu ny c th l mt sai lm:

    Many Nhiu chng trnh khng yu cu cao v hiu sut m mt loi 8051 hini c th cung cp.

    Cc nhiu in t (EMI) s tng ln cng vi tn s dao ng.

    Trong hu ht cc h 8051 hin i (CMOS-based), c mt mi quan h gn gi giwuaxtn s dao ng v mch ngun cung cp. Kt qu l, bng cch s dng tn s thp nhtcn thit c th s gim mc tiu th in nng: iu ny rt hu ch trong nhiu ngdng.

    Khi truy cp cc thit b ngoi vi tn s thp nh LCD,b nh ngoi , chng trnh vphn cng thit k c th n gin ha- v chi ph cho cc thit b ngoi vi, nh b nhcht c th c gim xung (nu chip hot ng chm hn).

    Ni chung, bn nn hot ng tn s thp nht c th tng thch vi thc hin cc nhucu cho cc ng dng ca bn.

    Vn n nh

    Mt yu t quan trng trong vic la chn mt b dao ng cho h thng dao ngca bn vn n nh dao ng. Trong hu ht cc trng hp,b dao dng n nhtrong khong :20 ppm: 20 phn trn triu.(percent part million) .

    Thch anh tinh th tiu chun c nh gi trong khong t 10 100 ppm, v nh

    vy c th t ti5 50 Pht/nm.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    25/246

    Atienganh.blogspot.com No book no knowledge25

    Ci thin s n nh ca tn s dao ng

    Nu bn mun mt h thng iukhin nhng ni chung c thch anh gi thi gian

    chnh xc, bn c th chn cch l gi thit b l nng hoc t lnh (ni c nhit

    n nh) , v tinh chnh phn mm gi thi gian chnh xc.(tuy nhin iu ny

    him khi thc t.

    Temperature Compensated Crystal Oscillators (TCXOs) Nhit b dao ng

    thch anh- l c sn , cung cp trong mt gi phn mm s fujng d dng- 1 thch anh

    dao ng, mt mch in b li s thay i nhit .

    TCXOs c gi khong $100.00 .

    Mt thc t l xc nh nhit , tn s c trng cho s la chn thch anh ca

    bn, v bao gm c thng tin chng trnh ca bn.

    Gi ca mt cm bin nhit nh khong ~$2.00), Bn c th theo di nhit v

    iu chnh thi gian theo yu cu.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    26/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    27/246

    Atienganh.blogspot.com No book no knowledge27

    B cng hng gm

    Khi qut u nhc im

    R hn tinh th.

    Mnh v vt l: t b tn thng bi rung ng thit b,hoc v thit b.

    Nhiu cn hng cha c xy dng trong t in., v c th s dng m khngcn bt k thit b ngoi vi no.

    C nh, khong tinh th dao ng.

    Nhng

    S n nh tng i thp: ni chung khng thch hp s dng khi yu cu chnh

    xc thi gian. chnh xc thng khong 5000 ppm = 2500 pht/nm (ln ti 50pht/tun).

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    28/246

    Atienganh.blogspot.com No book no knowledge28

    Reset phn cng

    Qu trnh bt u khi ng ca VK l mt qu trnh khng bnh thng .

    Cc phn cng nm bn di l phc tp v nh,Nh sn xut xc nh, (reset routine)thi quen xc lp li phi c chy

    t phn cng ny thnh trng thi thch hp trc khi n thc hin mt chng

    trnh ca ngi dng. Vic reset mt mt khong thi gian v yu cu b dao

    ng ca VK hot ng.

    1 mch resetl cch n gin nht diu khin reset thng xuyn.

    V d:

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    29/246

    Atienganh.blogspot.com No book no knowledge29

    Mch reset mnh m hn

    V d: (dng ds1812)

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    30/246

    Atienganh.blogspot.com No book no knowledge30

    Ti DC (in 1 chiu)

    Cc chn cng ca VK 8051 c th ci t gi tr 0V hoc 5V (hoc trong 3V,

    0V hoc 3V)di s iu khin ca phn mm.

    Mi cng thng thng xut ra tn hiu c dng ~10mA.

    Tng dng in trn VK xut ra khong 70mA hoc nh hn.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    31/246

    Atienganh.blogspot.com No book no knowledge31

    LEDs

    Kt ni trc tip led n ti 1 chn VK .

    Ngun in p, Vcc= 5V,

    LED in p thun, Vdiode= 2V,

    Yu cu dng in, Idiode= 15 mA (Lu rng cc thng tin v LED c ch r

    trong datasheet).

    Gi tr in tr cn thit R= 200.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    32/246

    Atienganh.blogspot.com No book no knowledge32

    Dng in tr ko (Use of pull-up resistors)

    thch nghi vi mch m kt ni vi chn vk khng c in tr ko ta cn phi mc thm

    in tr ko bn ngoi.

    Gi tr in tr ko thch hp vo khong 1K 10K.

    iu ny p dng cho mi v d trong sch.

    Lu :

    iu ny thng xy ra Port 0 (xem chng3 bit them chi tit).

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    33/246

    Atienganh.blogspot.com No book no knowledge33

    Lai mt ti in p thp m khng cn b m

    Xem cun PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS, p.115(NAKED LOAD)

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    34/246

    Atienganh.blogspot.com No book no knowledge34

    Dng 1 IC m

    Dng IC m CMOS.

    Dng IC m TTL.

    C th s dng IC m CMOS trong bt c mch m no ca bn. Tham kho thm ti

    liu v mch logic s.

    Xem cunPATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS, p.118 (ICBUFFER)

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    35/246

    Atienganh.blogspot.com No book no knowledge35

    V d: m 3 LED vi IC 74HC04

    V d ny ch dung mt IC 74HC04 m cho 3 LEDs. Nh tho lun trong cch gii

    quyt m vi CMOS chng ti khng yu cu in tr ko ln vi cc b m HC

    (CMOS).

    Trong trng hp ny chng ta gi nh rng cc led c iu khin dng ~15mA

    mi led trong tng 50mA ca b m.

    Xem cun PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS, p.123

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    36/246

    Atienganh.blogspot.com No book no knowledge36

    LED nhiu thanh l g?

    Nhiu n led c sp xp nh mt on nhiu thanh hin th : s

    hin th ca 7 thanh led to thnh led hin th 7 thanh

    .

    Hin th c b tr nh sau thng c gi l catot chung hoc anot chung.

    Yu

    cudng in qua mi led khong 2mA (led hin th nh) ti 60mA (Led hin th to,

    100mm hoc hn).

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    37/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    38/246

    Atienganh.blogspot.com No book no knowledge38

    Chng 3: c nt bm

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    39/246

    Atienganh.blogspot.com No book no knowledge39

    Gii thiu

    Cc h thng nhng thng s dng cc thit b chuyn mch ging nh mt phn

    giao din ngi dng.

    Quy lut chung ny p dng cho hu ht cc h thng iu khin t xa nh gara t,

    v nhiu nht l h thng li xe t ng.

    D h thng bn to nh th no, bn vn cn c 1 giao din chuyn i ng

    tin cy.

    Trong chng ny chng ta xem xt lm th no c tn hiu t nt bm c

    kh ti h thng nhng.

    Trc khi xem xt chnh cc cng tc, chng ta hy xem xt qu trnh c trng

    thi t chn vk.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    40/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    41/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    42/246

    Atienganh.blogspot.com No book no knowledge42

    V d: c v vit bits (phin bn chung)

    S dng 6 php ton vi ton t bit:

    Php ton M t& AND

    | OR^ XOR

    > Dch bit sang phi~ o trng thi

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    43/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    44/246

    Atienganh.blogspot.com No book no knowledge44

    /* --------------------------------------------------------------- */

    void Display_Byte(const unsigned char CH){unsigned char i, c = CH;unsigned char Mask = 1

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    45/246

    Atienganh.blogspot.com No book no knowledge45

    /*-------------------------------------------------------------*-

    doc va viet du lieu vao tung chan(pin) cua cac cong.

    Luu y: 2 chan tren cung 1 port 1

    -*-------------------------------------------------------------*/

    #include

    void Write_Bit_P1(const unsigned char, const bit); bitRead_Bit_P1(const unsigned char);

    /* ... ...................................................................................................................................................................................... */

    void main (void)

    {bit x;

    while(1){x = Read_Bit_P1(0); /* doc Port 1, Pin 0 */Write_Bit_P1(1,x); /* viet to Port 1, Pin 1 */}

    }

    /* --------------------------------------------------------------- */

    void Write_Bit_P1(const unsigned char PIN, const bit VALUE){unsigned char p = 0x01; /* 00000001 */

    /* Dich trai voi so thich hop */p

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    46/246

    Atienganh.blogspot.com No book no knowledge46

    /* Dich trai */p

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    47/246

    Atienganh.blogspot.com No book no knowledge47

    Scn thit ca in trko

    Phn cng ny hot ng nh sau:

    Khi nt bm c m, khng c s tc ng vo cc chn(pin ) ca cc port. Mt

    in tr trong trn cng ko cc chn ca vk ln mc 1 (thng l 5V). Nn

    chng ta c cc chn(pin) s thy gi tr l 1.

    Khi nt bm c nhn, cc chn(pin) s v mc 0V. khi chng ta c cc chn

    c gi tr 0.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    48/246

    Atienganh.blogspot.com No book no knowledge48

    S cn thit ca in tr ko (P1,P2,P3)

    Chng ta tm tt in tr ko chng 2.

    C in tr ko:

    Khng c in tr ko:

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    49/246

    Atienganh.blogspot.com No book no knowledge49

    S cn thit ca in tr ko ln(P0)

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    50/246

    Atienganh.blogspot.com No book no knowledge50

    X l vi nt bm ny ln

    Trong thc t cc nt bm c kh thng ny ln (c ngha l ON ri OFF trong mt thi

    gian rt ngn) sau khi nt bm ng hoc m. (y gi l rung c kh)

    Mi ln nhy tng ng vi mt ln bm l i vi 1 nt bm l tng. V vy nu

    khng thit k phn mm ph hp, iu n c th pht sinh mt vi vn , nht l:

    Thay v c A t bn phm, chng ta c th c AAAAA.

    m s ln cng tc c nhn l v cng kh khn .

    Nu nt bm c nhn 1 ln v nh ngay sau , vic nhy phm din ra ging

    nh ta li nhnnt bm ln na.

    Vic to ra phn mm kim tra gi tr u vo l rt n gin :

    1. Chng ta c th c cc chn ph hp.

    2. Nu chng ta ngh rng nt bm c nhn, chng ta ch thm 20ms v sau c

    li chn ln na.

    3. Nu c ln 2 xc nhn c l 1 th ta gi nh rng nt bm c nhn. .

    Lu rng con s 20 ms ch ph hp cho mt s trng hp .

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    51/246

    Atienganh.blogspot.com No book no knowledge51

    V d:c nt bm (code c bn)

    Code dc nt bm ny ch yu chng ta mun thc hin cc cng vic nh:

    iu khin motor khint bm c nhn.

    Chuyn i nh sang n khi nt bm c nhn.

    Kch hot my bm khi nt bm c nhn.

    Cc hot ng nay c th s dng cc cng tc in mkhng cn dung n vk, tuy

    nhin chng ta dng vk s thch hp cho iu khin nhiu cng tc phc tp . V d:

    iu khin motor khi nt bm cc nhn.

    iu kin: Khng phi bo m an ton ti ch, thay vo l ting r trong 2s.

    Chuyn i nh sang n khi nt bm c nhn.

    iu kin: tit kim in, br qua cc yu cu bt sng ban ngy.

    Kch hot my bm khi nt bm c nhn

    iu kin: Nu cc b cha nc ch yu l di 300lit, Khng bm: thay vo bt

    u d tr bm v rt nc t cc b khn cp.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    52/246

    Atienganh.blogspot.com No book no knowledge52

    /*-------------------------------------------------------------*-

    Switch_read.C (v1.00)

    Mot chuong trinh doc nut bam don gian cho 8051.- doc (phong nhay phim) nut bam vao Pin 1^0- neu nut bam duoc nhan thay thi doi Port 3 output

    -*-------------------------------------------------------------*/

    #include

    /* Connect switch to this pin */sbit Switch_pin = P1^0;

    /* hien thi trang thai nut bam o port 3 */#define Output_port P3

    /* tro ai gia tri Switch_Get_Input() */#define SWITCH_NOT_PRESSED (bit) 0#define SWITCH_PRESSED (bit) 1

    /* ham chuc nang */void SWITCH_Init(void);

    bit SWITCH_Get_Input(const unsigned char DEBOUNCE_PERIOD); voidDISPLAY_SWITCH_STATUS_Init(void);void DISPLAY_SWITCH_STATUS_Update(const bit);void DELAY_LOOP_Wait(const unsigned int DELAY_MS);

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    53/246

    Atienganh.blogspot.com No book no knowledge53

    /*---------------------------------------------------------------- */void main(void)

    {

    bit Sw_state;

    /* ham khoi tao */SWITCH_Init();DISPLAY_SWITCH_STATUS_Init();

    while(1){Sw_state = SWITCH_Get_Input(30);

    DISPLAY_SWITCH_STATUS_Update(Sw_state);

    }}

    /*-------------------------------------------------------------*-

    SWITCH_Init()

    Ham khoi tao cho swicth

    -*-------------------------------------------------------------*/void SWITCH_Init(void)

    {Switch_pin = 1; /* dung pin nay cho input */}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    54/246

    Atienganh.blogspot.com No book no knowledge54

    /*-------------------------------------------------------------*-

    SWITCH_Get_Input()

    Doc va phong chong nhay co khi nhu sau:

    1. Neu nut bam khong nhan, tro ve SWITCH_NOT_PRESSED.

    2. neu nut bam duoc nhan, cho ham DEBOUNCE_PERIOD (in ms).Sau do:a. Neu nut bam khong duoc nhan trong thoi gian dai, tro ve SWITCH_NOT_PRESSED.

    b. neu nut bam van duoc nhan, tro ve SWITCH_PRESSED

    xem Switch_Wait.H de biet thm chi tiet ve gia tri ham tre.

    -*-------------------------------------------------------------*/bit SWITCH_Get_Input(const unsigned char DEBOUNCE_PERIOD)

    {bit Return_value = SWITCH_NOT_PRESSED;

    if (Switch_pin == 0){/* nut bam duoc nhan */

    /* phong chong nhay phimcho phim ... */DELAY_LOOP_Wait(DEBOUNCE_PERIOD);

    /* kiem tra nut nhan lan nua */if (Switch_pin == 0)

    {Return_value = SWITCH_PRESSED;}

    }

    /* ay gio qay tro ve gia tri nut nhan */return Return_value;}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    55/246

    Atienganh.blogspot.com No book no knowledge55

    /*-------------------------------------------------------------*-

    DISPLAY_SWITCH_STATUS_Init()

    Ham khoi tao DISPLAY_SWITCH_STATUS.( Trang thai cua nut bam)

    -*-------------------------------------------------------------*/void DISPLAY_SWITCH_STATUS_Init(void)

    {Output_port = 0xF0;}

    /*-------------------------------------------------------------*-

    DISPLAY_SWITCH_STATUS_Update()

    Ham don gia hien thi du lieu (SWITCH_STATUS) tren led ketnoi voi cac pin (Output_Port)

    -*-------------------------------------------------------------*/void DISPLAY_SWITCH_STATUS_Update(const bit SWITCH_STATUS)

    {if (SWITCH_STATUS == SWITCH_PRESSED)

    {Output_port = 0x0F;

    }else

    {Output_port = 0xF0;}

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    56/246

    Atienganh.blogspot.com No book no knowledge56

    /*-------------------------------------------------------------*-

    DELAY_LOOP_Wait()

    Thoi giant re la khac nhau voi cac tham so.

    Tham so la, khoang thoi giant re trong 1ms, tren 12MHz 8051 (12 daodong trong 1 chu ki may).

    Ban can phai dieu chinh choc ac ung dung cua ban!

    -*-------------------------------------------------------------*/void DELAY_LOOP_Wait(const unsigned int DELAY_MS)

    {unsigned int x, y;

    for (x = 0; x

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    57/246

    Atienganh.blogspot.com No book no knowledge57

    V d: m nhng ch cu

    Vi code n gin trong v d trc, vn c th xy ra bt c khi no mt ntbm(cng tc) c nhn trong khong thi gian di hn thi gian tr.

    y l mi quan tm ln, bi v trong nhiu trng hp, ngi s dng s nhn

    trong it nht 500ms(hoc cho n khi h nhn c phn hi rng nt bm c

    nhn). Kt qu l ngi dng g ch hello trn man hnh c th thy :

    HHHHHHHHHeeeeeeeeellllllllllllllllooooooooooo.

    Mt hu qu l cc m code ny khng thch hp cho ng dng m chng ta cn m s

    ln cng tc c nhn .

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    58/246

    Atienganh.blogspot.com No book no knowledge58

    Nu chng ta th dung code ny cho v d trc, cm bin s khng cho chng ta m scu nhng thay vo l thi gian ch cu i qua sensor.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    59/246

    Atienganh.blogspot.com No book no knowledge59

    /*-------------------------------------------------------------*-

    mot chuong trinh dem cuu voi 8051...

    -*-------------------------------------------------------------*/

    #include

    /* ket noi toi pin nay */sbit Switch_pin = P1^0;

    /* hien thi so dem o port nay */#define Count_port P3

    /* tro ve gia tri Switch_Get_Input() */#define SWITCH_NOT_PRESSED (bit) 0#define SWITCH_PRESSED (bit) 1

    /* ham chuc nang */void SWITCH_Init(void);

    bit SWITCH_Get_Input(const unsigned char DEBOUNCE_PERIOD); voidDISPLAY_COUNT_Init(void);void DISPLAY_COUNT_Update(const unsigned char);void DELAY_LOOP_Wait(const unsigned int DELAY_MS);

    /* ---------------------------------------------------------------- */void main(void)

    {unsigned char Switch_presses = 0;

    /* Init functions */SWITCH_Init();DISPLAY_COUNT_Init();

    while(1){

    if (SWITCH_Get_Input(30) == SWITCH_PRESSED){Switch_presses++;}

    DISPLAY_COUNT_Update(Switch_presses);}

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    60/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    61/246

    Atienganh.blogspot.com No book no knowledge61

    /*-------------------------------------------------------------*-

    DISPLAY_COUNT_Init()

    Ham khoi tao hien thi gia tri dem DISPLAY COUNT .

    -*-------------------------------------------------------------*/void DISPLAY_COUNT_Init(void)

    {Count_port = 0x00;}

    /*-------------------------------------------------------------*-

    DISPLAY_COUNT_Update()

    Ham don gian de hien thi ra cac led (Count_Port)

    -*-------------------------------------------------------------*/void DISPLAY_COUNT_Update(const unsigned char COUNT)

    {Count_port = COUNT;}

    /*-------------------------------------------------------------*-

    DELAY_LOOP_Wait()

    Thoi giant re la khac nhau voi cac tham so.

    Tham so la, khoang thoi giant re trong 1ms, tren 12MHz 8051 (12 daodong trong 1 chu ki may).

    Ban can phai dieu chinh cho cac ung dung cua ban!

    -*-------------------------------------------------------------*/void DELAY_LOOP_Wait(const unsigned int DELAY_MS)

    {unsigned int x, y;

    for (x = 0; x

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    62/246

    Atienganh.blogspot.com No book no knowledge62

    Kt lun

    M code nt bm va trnh by v tho lun trong cc chng trc gip chng ta thc hin c 2

    vic :

    Thc hin mt hot ng khi nt bm c nhn.

    Tr li s vic l ngi s dng nhn v sau nt bm v sau nh.

    Trong c 2 trng hp chng ti minh ha lm th no chng rung(nhy) nt bm.

    Chun b cho chng tip theo

    Trong chng tip theo, chung ti chuyn s ch v phng php cc bn c th s dng

    li m code cho cc ti tip theo.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    63/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    64/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    65/246

    Atienganh.blogspot.com No book no knowledge65

    Lp trnh hng i tng vi C

    Ngn ng chung

    -

    First-Generation Language

    (1GL)

    Second-Generation Languages

    (2GLs)

    Third-Generation Languages

    (3GLs)

    Fourth-Generation Languages

    (4GLs)

    Ngn ng v d

    Code my

    Assembly

    Language.

    COBOL,

    FORTRAN

    C, Pascal, Ada 83

    C++, Java, Ada 95

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    66/246

    Atienganh.blogspot.com No book no knowledge66

    Graham ni1:

    Cm t hng i tng(object-oriented) tr thnh gn nh

    ng ngha vi s hin i, tt p v gi tr trong cng ngh thng tin.

    Jalote ni:

    Mt li th chnh ca vic s dng nh hng hng i tng l n lm

    cho d dng sn xut v hiu thit k hn.

    Ngn ng hng i tng khng c sn trong cc ng dng nh, bi v chi ph cho vic sdng cc tnh nng trong ngn ng nykh cao.

    1 Graham, I. (1994) Object-Oriented Methods, (2nd Ed.) Addison-Wesley. Page1.

    2 Jalote, P. (1997) An Integrated Approach to Software Engineering, (2nd Ed.)Springer-Verlag. Page 273.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    67/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    68/246

    Atienganh.blogspot.com No book no knowledge68

    V dlp trnh hng i tng vi c (O-O C )

    /*-------------------------------------------------------------*-

    PC_IO.H (v1.00)

    Xem PC_IO.C de biet them chi tiet

    -*-------------------------------------------------------------*/

    #ifndef _PC_IO_H#define _PC_IO_H

    /* ------ hang so cong khai ------------------------------------ */

    /* Gia tri tro ve boi PC_LINK_Get_Char_From_Buffer neu khong co san trong bodem */#define PC_LINK_IO_NO_CHAR 127

    /* ------ Khai bao ham mau -------------------------- */

    void PC_LINK_IO_Write_String_To_Buffer(const char* const); voidPC_LINK_IO_Write_Char_To_Buffer(const char);

    char PC_LINK_IO_Get_Char_From_Buffer(void);

    /* phai thuong xuyen goi cac ham nay... */void PC_LINK_IO_Update(void);

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    69/246

    Atienganh.blogspot.com No book no knowledge69

    /*-------------------------------------------------------------*-

    PC_IO.C (v1.00)

    [chua day du - - xem EC Chap 9 de hoan thien thu vien] -*----------------------------------------

    ---------------------*/

    #include "Main.H"#include "PC_IO.H"

    /* ------ dinh nghia cac bien cong khai ------------------------- */

    tByte In_read_index_G; /* du lieu trong bo dem da duoc doc */tByte In_waiting_index_G; /* du lieu trong bo dem cho de doc */

    tByte Out_written_index_G; /* du lieu trong bo dem da duoc viet */ tByteOut_waiting_index_G; /* du lieu trong bo dem cho de viet */

    /* ------ ham mau rieng ------------------------- */

    static void PC_LINK_IO_Send_Char(const char);

    /* ------ hang so rieng ----------------------------------- */

    /* nhan bo dem length */#define RECV_BUFFER_LENGTH 8

    /* truyen bo dem length */#define TRAN_BUFFER_LENGTH 50

    #define XON 0x11#define XOFF 0x13

    /* ------ cac bien rieng ----------------------------------- */

    static tByte Recv_buffer[RECV_BUFFER_LENGTH];static tByte Tran_buffer[TRAN_BUFFER_LENGTH];

    /*-------------------------------------------------------------*/void PC_LINK_IO_Update(...)

    {

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    70/246

    Atienganh.blogspot.com No book no knowledge70

    /*-------------------------------------------------------------*/void PC_LINK_IO_Write_Char_To_Buffer(...)

    {

    }

    /*-------------------------------------------------------------*/void PC_LINK_IO_Write_String_To_Buffer(...)

    {

    }

    /*-------------------------------------------------------------*/

    char PC_LINK_IO_Get_Char_From_Buffer(...){

    }

    /*-------------------------------------------------------------*/void PC_LINK_IO_Send_Char(...)

    {

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    71/246

    Atienganh.blogspot.com No book no knowledge71

    The Project Header (Main.H)

    Project Header (Main.H)

    #include

    #define OSC_FREQ (11059200UL)

    typedef unsigned char tByte;

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    72/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    73/246

    Atienganh.blogspot.com No book no knowledge73

    Cc tiu thit b

    /*----------------------------------------------------------REG515C.H

    File tieu de Infineon C515C

    Copyright (c) 1995-1999 Keil Elektronik GmbH All rights reserved.----------------------------------------------------------------*/

    /* bo chuyen doi A/D */

    sfr ADCON0 = 0xD8;

    /* he thong ngat */sfr IEN0 = 0xA8;

    /* Ports */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;

    sfr P3 = 0xB0;sfr P4 = 0xE8;sfr P5 = 0xF8;sfr P6 = 0xDB;sfr P7 = 0xFA;

    /* Serial Channel */sfr SCON = 0x98;

    /* Timer0 / Timer1 */sfr TCON = 0x88;

    /* CAP/COM Unit / Timer2 */sfr CCEN = 0xC1;

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    74/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    75/246

    Atienganh.blogspot.com No book no knowledge75

    Dliu cc loi bin thng thng

    typedef unsigned char tByte;typedef unsigned int tWord;typedef unsigned long tLong;

    Trong C cc t kha typedef cho php chng ta cung cp b danh cho cc kiu d liu.

    Nh vy, trong project ny chng ta nhn thy m nh th ny:

    tWord Temperature;

    thay v:

    unsigned int Temperature;

    L do chnh s dng typedef l dn gin ha v thc y vic s dng d liu khng

    m.(unsigned)

    8051 khng h tr m s vm code s hc ph l cn thit thao tc d liu :

    iu ny lm gim tc chng trnh v lm tng kch thc chng trnh.

    S dng ton t bit ch dung cho cc d liu kiu unsigned: dung bin kiu

    typedef lm gim kh nng lp trnh v v tnh p dng ton t ny vo d liu

    signed.

    Cui cng, ging nh chng trnh my tnh, s dng t kha typedef l cch d dng

    lp rp ti code ca bn s dng cc vi x l khc.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    76/246

    Atienganh.blogspot.com No book no knowledge76

    Interrupts

    Nh lu trong Embedded C Chapter 2, Ngt l mt thnh phn quan trng

    trong cc h thng nhng.

    Nhng dng sau trong tiu Project Header c tc dng lm cho bn d dng s

    dng hm ngt trong cc d n ca bn.

    #define INTERRUPT_Timer_0_Overflow 1#define INTERRUPT_Timer_1_Overflow 3#define INTERRUPT_Timer_2_Overflow 5

    Chng ta s m t lm cch no dung hm ny d dng trong Embedded C, Ch. 7.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    77/246

    Atienganh.blogspot.com No book no knowledge77

    Tm tt: ti sao sdng Project Header(tiu dn)?

    Vic s dng PROJECT HEADER lm cho code ca bn tr nn hay hn, bi v bt c a is dng project ca bn u bit ni tm kim thng tin. Chng hn nh m hnh mu ca

    VK v tn s dao ng i hi s thc hin ca phn mm.

    Vic s dng 1 project header c th lm cho code ca bn d dng di ng, bng cch t

    mt s d liu quan trng ph thuc vo VK mt ni: nu bn thay i b vi x l hoc

    dao ng s dng sau - trong nhiu trng hp bn s ch cn thay i project

    header(tiu d n)

    PES I - 91

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    78/246

    Atienganh.blogspot.com No book no knowledge78

    The Port Header (Port.H)

    Port Header (Port.H)

    // chn 3.0 v 3.1 c s dng // cng tc// cng RS-232 sbit Sw_up = P1^2;

    sbitSw_down = P1^3;

    f

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    79/246

    Atienganh.blogspot.com No book no knowledge79

    Tp tin Port Header rt n gin chng ta hiu v p dng.

    rng, V d, chng ta c 3 file C trong mt profect (A, B,C) mi file yu cu truy cp ti 1 hoc nhiu hn 1 chn cu VK,

    File A c th bao gm:

    /* File A */

    sbit Pin_A = P3^2;

    File B c th bao gm:

    /* File B */

    #define Port_B = P0;

    File C c th bao gm:

    /* File C */

    sbit Pin_C = P2^7;

    Trong phin bn ca m code ny, tt c cc port i hi truy cp tri rng qua nhiu

    file.

    C rt nhiu thun li thu c bng cch tch hp tt c cc cng truy cp trong mt file

    tiu port.h :

    /* ----- Port.H ----- */

    /* dinh nghia cong truy cap B */#define Port_B = P0;

    /* dinh nghia cong truy cap A */sbit Pin_A = P3^2;

    /* dinh nghia cong truy cap C */sbit Pin_C = P2^7;

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    80/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    81/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    82/246

    Atienganh.blogspot.com No book no knowledge82

    /*-------------------------------------------------------------*-

    Port.H (v1.00)

    'Port Header' for project HELLO2 (xem Chap 5)

    -*-------------------------------------------------------------*/

    #ifndef _PORT_H#define _PORT_H

    /* ------ LED_Flash.C ----------------------------------------- */

    /* ket noi led toi chan nay, kem theo tro thich hop */sbit LED_pin = P1^5;

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    83/246

    Atienganh.blogspot.com No book no knowledge83

    /*-------------------------------------------------------------*-

    Main.C (v1.00)

    Chuong trinh test cho 8051 "Hello Embedded World".

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "Delay_Loop.h"#include "LED_Flash.h"

    void main(void){LED_FLASH_Init();

    while(1){/* Thay doi trang thai led (OFF to ON,) */LED_FLASH_Change_State();

    /* Tre khoang 1000 ms */DELAY_LOOP_Wait(1000);

    }}

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    84/246

    Atienganh.blogspot.com No book no knowledge84

    *-------------------------------------------------------------*-

    LED_flash.H (v1.00)

    - Xem LED_flash.C de biet them chi tiet.

    -*-------------------------------------------------------------*/

    #ifndef _LED_FLASH_H#define _LED_FLASH_H

    /* ------ ham chuc nang mau -------------------------- */

    void LED_FLASH_Init(void);

    void LED_FLASH_Change_State(void);

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    85/246

    Atienganh.blogspot.com No book no knowledge85

    /*-------------------------------------------------------------*-

    LED_flash.C (v1.00)

    Kiem tra ham sang led don gian.

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "LED_flash.H"

    /* ------ dinh nghia bien rieng ------------------------ */

    static bit LED_state_G;

    /*-------------------------------------------------------------*-

    LED_FLASH_Init()

    Chuan bi thay doi trang thai led .

    -*-------------------------------------------------------------*/void LED_FLASH_Init(void)

    {LED_state_G = 0;}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    86/246

    Atienganh.blogspot.com No book no knowledge86

    /*-------------------------------------------------------------*-

    LED_FLASH_Change_State()

    Thay doi trang thai cua LED tren 1 chan out danh nghia cua vdk

    -*-------------------------------------------------------------*/void LED_FLASH_Change_State(void)

    {/* thay doi trang thai led tu OFFON */if (LED_state_G == 1)

    {LED_state_G = 0;LED_pin = 0;}

    else{LED_state_G = 1;LED_pin = 1;}

    }

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*

    /*-------------------------------------------------------------*-

    Delay_Loop.H (v1.00)

    - Xem Delay_Loop.C de biet them chi tiet.

    -*-------------------------------------------------------------*/

    #ifndef _DELAY_LOOP_H

    #define _DELAY_LOOP_H/* ------ ham mau chuc nang --------------------------- */void DELAY_LOOP_Wait(const tWord DELAY_MS);

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    87/246

    Atienganh.blogspot.com No book no knowledge87

    /*-------------------------------------------------------------*-

    Delay_Loop.C (v1.00)

    Tao tre phan mem don gian trong 1 vong lap.

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "Delay_loop.h"

    /*-------------------------------------------------------------*-

    DELAY_LOOP_Wait()

    Thoi giant re voi bien la thong so .

    Thong so o day la thoi giant re ms tren 12MHz 8051 (12 osc cycles).

    Ban can sua lai thoi gian cho dung chuong trinh cua ban

    -*-------------------------------------------------------------*/void DELAY_LOOP_Wait(const tWord DELAY_MS)

    {tWord x, y;

    for (x = 0; x

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    88/246

    Atienganh.blogspot.com No book no knowledge88

    V d: cu trc li v d m nhng ch d.

    /*-------------------------------------------------------------*-

    Main.H (v1.00)

    -*-------------------------------------------------------------*/

    #ifndef _MAIN_H#define _MAIN_H

    /*--------------------------------------------------------Ban can them phan nay ho moi project

    -------------------------------------------------------- */

    /* phai khai bao file tieu de header thich hop cho vdk o day */#include

    /* tan so dao dong (in Hz) e.g. (11059200UL) */#define OSC_FREQ (12000000UL)

    /* so dao dong trong moi huong dan (12, etc)12 - ho 8051 / 8052 va phan lon cac ic khac cua philip4 - Dallas 320, 520 etc.

    1 - Dallas 420, etc. */#define OSC_PER_INST (12)

    /* --------------------------------------------------------nen sua cac phan duoi day

    -------------------------------------------------------- */

    /* kieu du lieu */typedef unsigned char tByte;typedef unsigned int tWord;typedef unsigned long tLong;

    /* dinh nghia ham ngat */#define INTERRUPT_Timer_0_Overflow 1#define INTERRUPT_Timer_1_Overflow 3#define INTERRUPT_Timer_2_Overflow 5

    #endif

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    89/246

    Atienganh.blogspot.com No book no knowledge89

    /*-------------------------------------------------------------*-

    Port.H (v1.00)

    'Port Header' cho project GOATS2 (xem Chap 5)

    -*-------------------------------------------------------------*/

    #ifndef _PORT_H#define _PORT_H

    /* ------ Switch_Wait.C ------------------------------------------ */ /* ket noi toi pin nay */

    sbit Switch_pin = P1^0;

    /* ------ Display_count.C ---------------------------------------- */ /* ma nhi phan ra o port 3 */#define Count_port P3

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    90/246

    Atienganh.blogspot.com No book no knowledge90

    /*-------------------------------------------------------------*-

    Main.C (v1.00)

    Chuong trinh dem cho 8051.

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "Switch_wait.H"#include "Display_count.H"

    /* ---------------------------------------------------------------- */void main(void)

    {tByte Switch_presses = 0;

    /* ham khoi tao*/SWITCH_Init();DISPLAY_COUNT_Init();

    while(1){

    if (SWITCH_Get_Input(30) == SWITCH_PRESSED){Switch_presses++;}

    DISPLAY_COUNT_Update(Switch_presses);}

    }

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    91/246

    Atienganh.blogspot.com No book no knowledge91

    /*-------------------------------------------------------------*-

    Switch_wait.H (v1.00)

    - Xem Switch_wait.C de biet them chi tiet

    -*-------------------------------------------------------------*/

    #ifndef _SWITCH_WAIT_H#define _SWITCH_WAIT_H

    /* ------ hang so chung ------------------------------------ */ /* quay tro ve gia tri

    Switch_Get_Input() */#define SWITCH_NOT_PRESSED (bit) 0#define SWITCH_PRESSED (bit) 1

    /* ------ ham mau chuc nang chung --------------------------- */void SWITCH_Init(void);

    bit SWITCH_Get_Input(const tByte DEBOUNCE_PERIOD);

    #endif

    /*-------------------------------------------------------------*-

    ---- END OF FILE ----------------------------------------*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    92/246

    Atienganh.blogspot.com No book no knowledge92

    /*-------------------------------------------------------------*-

    Switch_Wait.C (v1.00)

    Thu vien don gian cho phong chong rung phim.

    luu y: khong thoi gin cua chuc nang nay a bien o muc cao!

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "Switch_wait.h"

    #include "Delay_loop.h"

    /*-------------------------------------------------------------*-

    SWITCH_Init()

    Cai dat chuc nang cho thu vien nut bam.

    -*-------------------------------------------------------------*/void SWITCH_Init(void)

    {

    Switch_pin = 1; dung pin nay cho tin hieu vao */}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    93/246

    Atienganh.blogspot.com No book no knowledge93

    /*-------------------------------------------------------------*-

    SWITCH_Get_Input()

    Doc va chong rung phim co khi nhu sau:

    1. neu nut bam chua duoc nhan quay tro ve SWITCH_NOT_PRESSED.

    2. neu nut bam duoc nhan, cho ham chong rung phim

    DEBOUNCE_PERIOD (in ms).

    -*-------------------------------------------------------------*/bit SWITCH_Get_Input(const tByte DEBOUNCE_PERIOD)

    {bit Return_value = SWITCH_NOT_PRESSED;

    if (Switch_pin == 0){/* nut bam duoc nhan */

    /* chong rung phim..cho (wait) */DELAY_LOOP_Wait(DEBOUNCE_PERIOD);

    /* Kiem tra nut bam lan nua */if (Switch_pin == 0)

    {

    /* Cho den khi nut bam nay len */while (Switch_pin == 0);Return_value = SWITCH_PRESSED;}

    }

    /* cuoi cung quay tro ve gia tri ban dau */return Return_value;}

    /*-------------------------------------------------------------*-

    ---- END OF FILE ----------------------------------------*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    94/246

    Atienganh.blogspot.com No book no knowledge94

    /*-------------------------------------------------------------*-

    Display_count.H (v1.00)

    - Xem Display_count.C de biet them chi tiet

    -*-------------------------------------------------------------*/

    #ifndef _DISPLAY_COUNT_H#define _DISPLAY_COUNT_H

    /* ------ Ham mau chuc nang-------------------------- */void DISPLAY_COUNT_Init(void);void DISPLAY_COUNT_Update(const tByte);

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    95/246

    Atienganh.blogspot.com No book no knowledge95

    /*-------------------------------------------------------------*-

    Display_count.C (v1.00)

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "Display_Count.H"

    /*-------------------------------------------------------------*-

    DISPLAY_COUNT_Init()

    Khoi tao thu vien ham hien thi.

    -*-------------------------------------------------------------*/void DISPLAY_COUNT_Init(void)

    {Count_port = 0x00;}

    /*-------------------------------------------------------------*-

    DISPLAY_COUNT_Update()

    Ham hien thi don gian gia tri dem tren led qua cac cong

    -*-------------------------------------------------------------*/void DISPLAY_COUNT_Update(const tByte COUNT)

    {Count_port = COUNT;}

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    96/246

    Atienganh.blogspot.com No book no knowledge96

    /*-------------------------------------------------------------*-

    Delay_Loop.H (v1.00)

    - Xem Delay_Loop.C de biet them chi tiet.

    -*-------------------------------------------------------------*/

    #ifndef _DELAY_LOOP_H#define _DELAY_LOOP_H

    /* ------ ham chuc nang chung --------------------------- */void DELAY_LOOP_Wait(const tWord DELAY_MS);

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    97/246

    Atienganh.blogspot.com No book no knowledge97

    /*-------------------------------------------------------------*-

    Delay_Loop.C (v1.00)

    Tao ham tre phan mem do gian.

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "Delay_loop.h"

    /*-------------------------------------------------------------*-

    DELAY_LOOP_Wait()

    Thoi giant re voi cac thong so.

    Thong so tre la ms, tan so 12MHz voi 8051 (12 osc cycles).

    Ban can sua laic ho dung voi chuong trinh cua ban!

    -*-------------------------------------------------------------*/void DELAY_LOOP_Wait(const tWord DELAY_MS)

    {tWord x, y;

    for (x = 0; x

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    98/246

    Atienganh.blogspot.com No book no knowledge98

    Chng 5: Thi gian thc

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    99/246

    Atienganh.blogspot.com No book no knowledge99

    Gii thiu

    Trong chuyn ny, chng ta bt u xem xt vn phc tp trong vic o chnh

    xc thi gian.

    Vn ny kh quan trng v nhiu h thng nhng phi tha mn rng buc thi gian

    thc.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    100/246

    Atienganh.blogspot.com No book no knowledge100

    bit SWITCH_Get_Input(const tByte DEBOUNCE_PERIOD){tByte Return_value = SWITCH_NOT_PRESSED;

    if (Switch_pin == 0){/* nhan nut bam */

    /* Chong rung phim - just wait... */DELAY_LOOP_Wait(DEBOUNCE_PERIOD); /* POTENTIAL PROBLEM */

    /* kiem tra nut bam lan nua */if (Switch_pin == 0)

    {

    /* cho den khi nt bam duoc nha tay */while (Switch_pin == 0);Return_value = SWITCH_PRESSED;}

    }

    /* cuoi cung tro ve gia tri nut bam */return Return_value;}

    Vn u tin s chng rung phm.khng bit chc lc no nt bm c nhn. V hm

    tr l thc hin bng phn mm c th khng chnh xc c thi gian.

    Vn th 2 thm ch cn nghim trng hn, trong mt h thng vi cc c trng thi gian

    thc: chng ta lm cho h thng ch i v thi hn cho s nh ra cu nt bm.

    Chng ta s gii quyt vn ny trong chng ny.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    101/246

    Atienganh.blogspot.com No book no knowledge101

    To tr phn cng

    Tt c cc thnh vin h 8051 u c it nht 16 bit timer/counter( nh bit l timer0 v timer1).

    Timer ny c th s dng vi thi gian chnh xc.

    /* Cau hinh Timer 0 nhu mot timer 16-bit */TMOD &= 0xF0; /* Xoa tat ca bit T0 (T1 trai khong doi) */TMOD |= 0x01; /* cai dat bt T0 (T1 trai khong doi) */

    ET0 = 0; /* khong cho phep ngat */

    /* gia tri cho tre 50 ms */TH0 = 0x3C; /* Timer 0 gia tri dau (byte cao) */TL0 = 0xB0; /* Timer 0 gia tri dau ( Byte thap) */

    TF0 = 0; /* xoa co tran */TR0 = 1; /* bat dau Timer 0 */

    while (TF0 == 0); /* choc ho den khi timer 0 tran (TF0 == 1) */

    TR0 = 0; /* dung Timer 0 */

    By gi chng ta xem n hot ng th no

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    102/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    103/246

    Atienganh.blogspot.com No book no knowledge103

    Thanh ghi TMOD SFR

    Bit 7 6 5 4 3 2 1 0

    NAME Gate C / T M1 M0 Gate C / T M1 M0

    Timer 1 Timer 0

    Mode 1 (M1 = 0; M0 = 1)

    16-bit timer/counter ( np li ch bnh thng))

    Mode 2 (M1 = 1; M0 = 0)

    8-bit timer/counter (ch 8bit t np li))

    GATE Gating control

    Khi ci t, timer/counter x is c hiu lc khi INT x mc cao v TRxiu khin bit c ci t. Khi xa timer x c hiu lc bt c khi no bit iukhin TRx c ci t (TRx =1)

    C / T Counter or timer chn bit

    Ci t counter hot ng truy cp (u vo t chn Tx).Xa timer hot ng truy cp (du vo t h thng ng h nib)).

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    104/246

    Atienganh.blogspot.com No book no knowledge104

    Hai thanh ghi bsung

    Trc khi chng ta xem xt phn cng ny to ra hm tr nh th no, chng ta cn nhn

    thy rng c 2 thanh ghi b sung lin kt ti mi timer: Chng ta gi l TL0 and TH0,

    and TL1 and TH1.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    105/246

    Atienganh.blogspot.com No book no knowledge105

    V d: Generating a precise 50 ms delay

    /*-------------------------------------------------------------*-

    Hardware_Delay_50ms.C (v1.00)

    Kiem tra co se tre phan cung.

    -*-------------------------------------------------------------*/

    #include

    sbit LED_pin = P1^5;bit LED_state_G;

    void LED_FLASH_Init(void);void LED_FLASH_Change_State(void);

    void DELAY_HARDWARE_One_Second(void);void DELAY_HARDWARE_50ms(void);

    /*... .................................................................................................................................... ...*/

    void main(void){LED_FLASH_Init();

    while(1){/* thay doi trang thai led (OFF to ON, or vice versa) */LED_FLASH_Change_State();

    /* Tre khoang 1000 ms */DELAY_HARDWARE_One_Second();

    }}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    106/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    107/246

    Atienganh.blogspot.com No book no knowledge107

    /*-------------------------------------------------------------*-

    DELAY_HARDWARE_One_Second()

    Tre phan cung trong khoang 1000 ms.

    *** Gia thiet 12MHz 8051 (12 osc cycles) ***

    -*-------------------------------------------------------------*/void DELAY_HARDWARE_One_Second(void)

    {unsigned char d;

    /* goi ham DELAY_HARDWARE_50ms() 20 lan */

    for (d = 0; d < 20; d++){DELAY_HARDWARE_50ms();}

    }

    /*-------------------------------------------------------------*-

    DELAY_HARDWARE_50ms()

    *** gia thiet 12MHz 8051 (12 osc cycles) ***

    -*-------------------------------------------------------------*/void DELAY_HARDWARE_50ms(void)

    {/* cau hinh Timer 0 nhu mot 16-bit timer */TMOD &= 0xF0; /* xoa tat ca bit T0 (T1 trai khong doi) */TMOD |= 0x01; /* cai dat bit yeu cau T0 (T1 trai khong doi) */

    ET0 = 0; /* cam ngat */

    /* gia tri tre 50 ms delay */TH0 = 0x3C; /* Timer 0 gia tri ban dau ( Byte cao) */TL0 = 0xB0; /* Timer 0 gia tri ban dau ( Byte thap) */

    TF0 = 0; /* xoa co tran */TR0 = 1; /* bat dau timer 0 */

    while (TF0 == 0); /* choc ho den khi Timer 0 tran (TF0 == 1) */

    TR0 = 0; /* dung Timer 0 */}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    108/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    109/246

    Atienganh.blogspot.com No book no knowledge109

    V d: to hm trphn cng

    /*-------------------------------------------------------------*-

    Main.C (v1.00)

    Nhay led voi ham tre phan cung (T0).

    -*-------------------------------------------------------------*/

    #include "Main.H"#include "Port.H"

    #include "Delay_T0.h"#include "LED_Flash.h"

    void main(void){LED_FLASH_Init();

    while(1){/* thay doi trang thai led (OFF to ON,) */LED_FLASH_Change_State();

    /* tre khoang 1000 ms */DELAY_T0_Wait(1000);}

    }

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    110/246

    Atienganh.blogspot.com No book no knowledge110

    #define PRELOAD01 (65536 - (tWord)(OSC_FREQ / (OSC_PER_INST * 1020)))#define PRELOAD01H (PRELOAD01 / 256)#define PRELOAD01L (PRELOAD01 % 256)

    /*-------------------------------------------------------------*/

    void DELAY_T0_Wait(const tWord N){tWord ms;

    /* cu hnh Timer 0 nh mt 16-bit timer */TMOD &= 0xF0; /* xoa bit T0 (T1 left unchanged) */TMOD |= 0x01; /* cai dat bit yeu cau T0 (T1 left unchanged) */

    ET0 = 0; /* cam ngat */

    /* tre 1 ms moi vong lap */for (ms = 0; ms < N; ms++)

    {TH0 = PRELOAD01H;TL0 = PRELOAD01L;

    TF0 = 0; /* xoa co tran */TR0 = 1; /* bat dau timer 0 */

    while (TF0 == 0); /* cho den khi timer 0 tran (TF0 == 1) */

    TR0 = 0; /* ngung Timer 0 */}

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    111/246

    Atienganh.blogspot.com No book no knowledge111

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    112/246

    Atienganh.blogspot.com No book no knowledge112

    Scn thit cho c chtimeout(thi gian tr) - V d

    Philips 8Xc552 l mt thit b m rng 8051 vi mt s thit b ngoi vi on -chip trong

    bao gm c ADC 8-knh 10-bi. Philips cung cp mt chng trnh ng dng (AN93017)m t lm th no s dng tnh nng ny ca vk.

    Chng trnh ny bao gm on m sau:

    /* ch cho n khi ADC chuyn i xong (checking ADCI) */while ((ADCON & ADCI) == 0);

    M code nh vy c th khng ng tin cy, bi v c mt s trng hp m ng dng c

    th b treo. iu ny xy ra v mt trong nhng l do sau :

    Nu ADC khi to khng chnh xc, chng ta khng th chc chn rng mt

    chuyn i c th c thc hin.

    Nu ADC phi chu mt in p u vo qu nhiu, sau c th n s khng hot

    ng.

    Nu bin ADCON or ADCI khng khi to ng, Chng c th khnghot ng theo yu cu.

    V d ca Philips khng c nh sn xut code. Tht khng may, tuy nhin code ny

    ph bin trong nhiu chng trnh nhng .

    Hai gii php gii quyt vn : Loop timeouts v hardware timeouts.

    (ngng tr dng vng lp v ngng tr phn cng)

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    113/246

    Atienganh.blogspot.com No book no knowledge113

    To loop timeouts

    C s ca loop timeout:

    tWord Timeout_loop = 0;

    while (++Timeout_loop);

    Original ADC code:

    /* Doi cho den khi chuyen doi ket thuc (checking ADCI) */

    while ((ADCON & ADCI) == 0);

    Modified version, with a loop timeout:

    tWord Timeout_loop = 0;

    /* doi cho den khi chuyen doi ket thuc

    (checking ADCI)vong thoi giant tre don gian */while (((ADCON & ADCI) == 0) && (++Timeout_loop != 0));

    Note that this alternative implementation is also useful:

    while (((ADCON & ADCI) == 0) && (Timeout_loop != 0)){Timeout_loop++; /* ngat su dung phan cung ao */}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    114/246

    Atienganh.blogspot.com No book no knowledge114

    /*-------------------------------------------------------------*-

    TimeoutL.H (v1.00)

    Thoi giant tre don gian voi cac thanh vien ho 8051

    * nhung gia tri nay khong chinh xacban phai lap vao he thong cua ban*

    -*-------------------------------------------------------------*/

    #ifndef _TIMEOUTL_H#define _TIMEOUTL_H

    /* ------ Public constants ------------------------------------ */

    /* bien nay thay doi thoi gian lapGia tri nay co cac khoang thoi giant re tren 8051, 12 MHz, 12 Osc/ cycle

    *** phai chinh xac dung voi chuong trinh cua ban ***

    *** thoi gian khac nhau voi cac thiet lap toi uu hoa trinh

    bien dich *** */

    /* tWord */#define LOOP_TIMEOUT_INIT_001ms 65435#define LOOP_TIMEOUT_INIT_010ms 64535#define LOOP_TIMEOUT_INIT_500ms 14535/* tLong */#define LOOP_TIMEOUT_INIT_10000ms 4294795000UL

    #endif

    /*-------------------------------------------------------------*----- END OF FILE ---------------------------------------

    -*-------------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    115/246

    Atienganh.blogspot.com No book no knowledge115

    V d: kim tra loop timeouts

    /*-------------------------------------------------------------*-

    Main.C (v1.00)

    -*-------------------------------------------------------------*/

    #include

    #include "TimeoutL.H"

    /* dinh nghia kieu bien (xem Chap 5) */typedef unsigned char tByte;

    typedef unsigned int tWord;typedef unsigned long tLong;

    /* khai bao ham */void Test_Timeout(void);

    /*-------------------------------------------------------------*/void main(void)

    {while(1)

    {

    Test_Timeout();}}

    /*-------------------------------------------------------------*/void Test_Timeout(void)

    {tLong Timeout_loop = LOOP_TIMEOUT_INIT_10000ms;

    /* ngung tre vong lap don gian... */while (++Timeout_loop != 0);

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    116/246

    Atienganh.blogspot.com No book no knowledge116

    V d: nt bm tin cy hn

    bit SWITCH_Get_Input(const tByte DEBOUNCE_PERIOD){

    tByte Return_value = SWITCH_NOT_PRESSED;tLong Timeout_loop = LOOP_TIMEOUT_INIT_10000ms;

    if (Switch_pin == 0){/* nut bam duoc nhan */

    /* chong rung - chi can doi... */DELAY_T0_Wait(DEBOUNCE_PERIOD);

    /* khiem tra nut bam lan nua */

    if (Switch_pin == 0){/* doi cho den khi nut bam nay len

    (voi vong lap thoi gian tre - 10 s) */while ((Switch_pin == 0) && (++Timeout_loop != 0));

    /* kiem tra vong lap thoi gian tre */if (Timeout_loop == 0)

    {Return_value = SWITCH_NOT_PRESSED;}

    else{Return_value = SWITCH_PRESSED;}

    }}

    /* bay gio quay tro ve gia tri nut bam */return Return_value;}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    117/246

    Atienganh.blogspot.com No book no knowledge117

    To hardware timeouts

    /* cau hinh Timer 0 nhu mot 16-bit timer */TMOD &= 0xF0; /* xoa bit T0 (T1 trai khong doi) */

    TMOD |= 0x01; /* cai dat bit yeu cau T0 (T1 trai khong doi */ET0 = 0; /* cam ngat */

    /* thoi giant tre don gian khoang 10ms */TH0 = PRELOAD_10ms_H; /* Xem Timeout.H for PRELOAD de biet them */TL0 = PRELOAD_10ms_L;TF0 = 0; /* xoa co tran */TR0 = 1; /* bat dau timer */

    while (((ADCON & ADCI) == 0) && !TF0);

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    118/246

    Atienganh.blogspot.com No book no knowledge118

    /*-------------------------------------------------------------*-

    TimeoutH.H (v1.00)

    -*-------------------------------------------------------------*/

    #ifndef _TIMEOUTH_H#define _TIMEOUTH_H

    /* ------ hang so chung ------------------------------------ */

    /* gia tri Timer T_ su dung don giant hoi gian tre (phan cung ) */- Timers 16-bit, che do nap lai binh thuong('one shot'). */

    Luu y: Cac che do dinh thoi phai kiem tra bang tay cho hinh xac . */

    /* dinh nghia ban dau Timer 0 / Timer 1 gia tri de tre 50us */#define T_50micros (65536 - (tWord)((OSC_FREQ /26000)/(OSC_PER_INST)))#define T_50micros_H (T_50micros / 256)#define T_50micros_L (T_50micros % 256)

    /* dinh nghia ban dau Timer 0 / Timer 1 gia tri tre ~10 ms*/

    #define T_10ms (65536 - (tWord)(OSC_FREQ / (OSC_PER_INST * 100)))#define T_10ms_H (T_10ms / 256)#define T_10ms_L (T_10ms % 256)

    /* dinh nghia ban dau Timer 0 / Timer 1 gia tri tre ~15 ms */#define T_15ms (65536 - (tWord)(OSC_FREQ / (OSC_PER_INST * 67)))#define T_15ms_H (T_15ms / 256)#define T_15ms_L (T_15ms % 256)

    /* dinh nghia ban dau Timer 0 / Timer 1 gia tri tre ~20 ms */#define T_20ms (65536 - (tWord)(OSC_FREQ / (OSC_PER_INST * 50)))#define T_20ms_H (T_20ms / 256)#define T_20ms_L (T_20ms % 256)

    /* dinh nghia ban dau Timer 0 / Timer 1 gia tri tre ~50 ms */#define T_50ms (65536 - (tWord)(OSC_FREQ / (OSC_PER_INST * 20)))#define T_50ms_H (T_50ms / 256)#define T_50ms_L (T_50ms % 256)

    #endif

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    119/246

    Atienganh.blogspot.com No book no knowledge119

    Kt lun

    Vic tr v thi gian ch xem xt trong chng ny s dng rt rng ri trong cc chng

    trnh nhng.

    Trong chng tip theo chng ta xem xt phn mm khc cu thnh nhiu chng trnh nhng: hiu hnh..

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    120/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    121/246

    Atienganh.blogspot.com No book no knowledge121

    Chng6: To ra mt h iu hnh nhng

    Xc nh tc dng chy da vo dng xung

    H thng tit trng sa

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    122/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    123/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    124/246

    Atienganh.blogspot.com No book no knowledge124

    void main(void){

    Init_System();

    while(1)/* 'mi mi' (Vng lp v tn) * /{X(); /* Gi hm ny (Tn ti 10 ms) * /Delay50ms();/* Tr50 ms * /}

    }

    iu ny s tt nu:

    1.Nu chngta bit chnh xc thi gian tnti ca hm X()v

    2. Khong thi gian ny khng bao gi bin thin.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    125/246

    Atienganh.blogspot.com No book no knowledge125

    Cc ngt Timer c bn (Li ca mt hiu hnh nhng)

    #define INTERRUPT_Timer_2_Overflow 5...

    void main(void){Timer_2_Init();

    EA = 1;

    while(1);

    /* Ci t Timer2 * /

    /* Cho php ton b cc ngt hot ng* /

    /* vng lp v tn rng* /}

    void Timer_2_Init(void)

    {/* Timer 2 l mt Timer 16 bit , c th t ng np li khi b trn gi tr

    Code ny (Ph hp vi 8051/52) gi s h thng dao ng vi tn s 12Mhz.Nh vyTimer 2 c phn gii l 1.000 s

    Np li gi trFC18 (hex) = 64536 (Thp phn)Timer (16-bit) s trn khi ti gi tr 65536 (Thp phn)V vy,vi nhng ci t sau, timer s trn sau mi khong thi gian1 ms * /

    T2CON = 0x04; /* Np gi tr thanh ghi T2CON* /

    TH2RCAP2HTL2RCAP2L

    ====

    0xFC;0xFC;0x18;0x18;

    /*/*

    /*

    /*

    LoadLoad

    Load

    Load

    T2T2

    T2

    T2

    high * /reload capt. reg. high byte * /low byte * /reload capt. reg. low byte * /

    /* Ngt timer 2 c cho php, v ISR s c gi n bt c khi no Timer ny trn xem bn di. */ET2 = 1;

    /* Bt u chy Timer 2* /TR2 = 1;

    }

    void X(void) interrupt INTERRUPT_Timer_2_Overflow{

    /* ISR ny s c gi sau mi khong thi gian 1ms* //* t nhng code cn thit y* /}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    126/246

    Atienganh.blogspot.com No book no knowledge126

    Chng trnh con phc ngt (ISR)

    Ngt c to ra bi vic ngt ca Timer 2 , gi ISR nh sau:

    /* ------------- -------------- ---- ------------ -------------------- * /

    void X(void) interrupt INTERRUPT_Timer_2_Overflow{/* ISR ny s c gi sau mi khong thi gian 1ms *//* t nhng code cn thit y */}

    Mi lin lc gia hm ny v s trn ca Timer c to ra bng cch s dng t kha Keilinterrupt:

    void X(void) interrupt INTERRUPT_Timer_2_Overflow

    cng vi #define sau ch dn:

    #define INTERRUPT_Timer_2_Overflow 5

    Ngt

    Reset h thng

    Ngt ngoi 0

    Trn Timer 0

    Ngt ngoi1Trn Timer 1

    Port ni tip

    Trn Timer 2

    a ch

    0x00

    0x03

    0x0B

    0x13

    0x1B

    0x23

    0x2B

    S hiu IE

    -

    0

    1

    2

    3

    4

    5

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    127/246

    Atienganh.blogspot.com No book no knowledge127

    Timer tng np li

    /* Np trc cc gi tr tr 50ms* /TH0 = 0x3C;TL0 = 0xB0;

    TF0 = 0;TR0 = 1;

    /* Timer 0: Gi tr khi to (Byte cao) * //* Timer 0: Gi tr khi to (Byte thp) * /

    /* Xa c trn* //* Bt utimer 0 * /

    while (TF0 == 0);/* Lp n khi Timer o trn(TF0 == 1) * /

    TR0 = 0; /* dngTimer 0 * /

    i vi h iu hnh, chng ta c thm cc yu cu nh sau :

    chng ta yu cu mt chui cc ngt nhng khong thi gian chnh xc nh trc .

    Chng ta mun to ra cc ngt ny m khng without to ra cc ti ng k trn CPU .

    Timer 2 ph hp vi nhng yu cu chnh xc .

    Trong trng hp ny,timer 2c np li bng vic s dng ni dung ca thanh ghi thuthp(ch rng tn ca cc thanh ghi ny c mt cht thay i nh ty vo hng sn xut ):

    RCAP2HRCAP2L

    = 0xFC;= 0x18;

    /* Np vo gi tr np libyte cao * //* Np vo gi tr np li byte thp* /

    Kh nng t ngnp li m bo rngtimer ny s gi nguyn cc gi tr yu cu nhngkhong thi gian chnh xc 1ms,vi rt t phn mm c tom khng c bt k s can thipno t pha ngi dng.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    128/246

    Atienganh.blogspot.com No book no knowledge128

    Gii thiu vsEOS

    void main(void)

    {Init_System();

    while(1)/* Vng lp v tn* /{X(); /* Gi hm ny (Duy tr trong 10ms) * /Delay_50ms();/*Tr 50 ms* /}

    }

    Trong trng hp ny:

    Chng ta s dng mt vng lp v tn v hm tr

    Chng ta gi hmX() sau mi khong thi gian xp x 60ms .

    Chng ta s cng xem mt cch lm tt hn cch ny

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    129/246

    Atienganh.blogspot.com No book no knowledge129

    Gii thiu vsEOS

    Xem cun Embedded C, Chng 7

    /* ------------------- ------------------- ------------ ------* -

    Main.c (v1.00)

    ---------------------------------------------------

    Minh ha cho sEOS chy mt tc v gi .

    -*--------------------------------------------------------*/

    #include "Main.H"#include "Port.H"#include "Simple_EOS.H"

    #include "X.H"

    /* -------------------- ------------------- -------------- * /

    void main(void){

    /* Chun b cho mt tc v gi* /X_Init();

    /* Ci tEOS n gin(khong thi giantick 60 ms) * /sEOS_Init_Timer2(60);

    while(1)/* Vng lp v tn* /{/* a ra ch ngh tit kim nng lng* /sEOS_Go_To_Sleep();}

    }

    /* ------------ ------------------- -------------------------* -----KT THC FILE----------------------------------

    -*--------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    130/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    131/246

    Atienganh.blogspot.com No book no knowledge131

    /* ------------------- ------------------- ------------ ------* -

    sEOS_Init_Timer2()

    -*--------------------------------------------------------*/

    void sEOS_Init_Timer2(const tByte TICK_MS){tLong Inc;tWord Reload_16;tByte Reload_08H, Reload_08L;

    /* Timer 2 l mt Timer 16 bit, t ng np li khi b trn* /T2CON = 0x04; /* Np gi tr thanh ghi T2CON* /

    /* Lng gia tng timer yu cu(Ln nht65536) * /Inc = ((tLong)TICK_MS * (OSC_FREQ/1000)) /

    (tLong)OSC_PER_INST;

    /* 16-bit np li gi tr* /Reload_16 = (tWord) (65536UL - Inc);

    /* 8-bit np li gi tr (cao & thp) * /Reload_08H = (tByte)(Reload_16 / 256);Reload_08L = (tByte)(Reload_16 % 256);

    /* c s dng kim tra s nh thi(tr ong m hnh) * //* P2 = Reload_08H ; * /

    /* P3 = Reload_08L ; * /

    TH2RCAP2HTL2RCAP2L

    ====

    Reload_08H;Reload_08H;Reload_08L;Reload_08L;

    /*

    /*

    /*

    /*

    NpNpNpNp

    T2

    T2

    T2

    T2

    Byte cao * /Gi tr np li(cao)* /byte thap * /gi tr np li(thp)* /

    /* ngt Timer 2 c cho php, v ISR s b gi bt c khi no timer trn. * /ET2 = 1;

    /* bt u chy timer 2* /

    TR2 = 1;

    EA = 1;}

    /* cho php ngt ton b* /

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    132/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    133/246

    Atienganh.blogspot.com No book no knowledge133

    /* ------------------- ------------------- ------------ ------* -

    X.C (v1.00)

    ---------------------------------------------------

    Tc v gi gii thiu vsEOS.

    -*--------------------------------------------------------*/

    #include "X.H"

    /* ------------------- ------------------- ------------ ------* -

    X_Init()

    Hm bt u.

    -*--------------------------------------------------------*/void X_Init(void)

    {/* tc v gi bt u... * /}

    /* ------------------- ------------------- ------------ ------* -

    X()

    Tc v gi c gi t vic ngt.

    -*--------------------------------------------------------*/void X(void)

    {/* tc v gi... * /}

    /* ------------------- ------------------- ------------ ------* -

    ----KT THCFI LE -----------------------------------*--------------------------------------------------------*/

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    134/246

    Atienganh.blogspot.com No book no knowledge134

    Tc v, hm v lp trnh

    Khi cp n cc h thng nhng,bn s thng xuyn nghe thy cm tthit k nhimv, nhim v chu k v

    h x l a nhim.

    Trong trng hp ny, thut ng tc v lun c s dng ch mt hm m hm cthc thi trong mt chu k chun.

    Trong trng hp ca sEOS, cc tc v s c thc thi bng cch s dng cc hm c gi

    t dch v ngt ca timer.

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    135/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    136/246

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    137/246

    Atienganh.blogspot.com No book no knowledge137

    Nu s dng b dao ng 12MHz, th c th nh thi chnh xc trong khong xp x t 1 msn60 ms .

    Nu s dng nhng tn s khc (v d11.0592 MHz), th nh thichnh xc ch thu c trong mt s khong gii hn.

    Nu bn pht trin mt ng dng yu cu nh thi chnh xc,bn phi t kim tra kt qu

    nh thi.

    /* s dng kim tra s nh thi mt cch khng t ng(trong m phng) * /P2 = Reload_08H;P3 = Reload_08L;

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    138/246

    Atienganh.blogspot.com No book no knowledge138

    Tit kim nng lng

    S dngsEOS, chng ta c th gim bt lng tiu th ca ng dng bng cch s dng ch ng khi b x l thc thi xong ngt IRS .

    iu ny t c bng cch s dng hmsEOS_Go_To_Sleep():

    /* ------------------- ------------------- ------------ ------* -

    sEOS_Go_To_Sleep()

    H iu hnh ny a vo 'ch ngh' gia cc xung nhp tit kim nng lng.xung

    nhp tip theo s tr li ch bnh thng cho h thng.

    -*--------------------------------------------------------*/void sEOS_Go_To_Sleep(void)

    {PCON |= 0x01; /* nhp vo ch ngh(h 8051) * /}

    Ch rng b x l s t ng tr li ch bnh thng khi Timer tip theo ngt(sinh ra mtngt).

    Linh kin

    Atmel 89S53

    Bnhthng

    11 mA

    Ngh

    2 mA

    Power Down

    60 A

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    139/246

    Atienganh.blogspot.com No book no knowledge139

    S dng sEOS trong d n ca chnh bn

    Khi s dngsEOS trong cc ng dng ca chnh bn,bn s cn n c bn sao ca cc file

    Simple_EOS.C v Simple_EOS.H trong d n ca bn: file .C s cn c chnh sacho phhp vi yu cu ca bn trong phn minh ha di y :

    sEOS_ISR() interrupt INTERRUPT_Timer_2_Overflow{

    /* phi t reset c nh T2* /TF2 = 0;

    /* ===== USER CODE - Begin ============================= * /

    /* thm hm ca bn (TASK) y... * /

    /* ===== USER CODE - End =============================== * /}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    140/246

    Atienganh.blogspot.com No book no knowledge140

    Phng php ny c linh hotkhng?

    S c mt ca mt Timer trn chip, c s dng to ra ngt bng cch ny khng cngha l ch gii hn cho h 8051.: hu nh tt c cc b x l dng cho cc h thng nhng

    u c cc Timer, c th c s dng theo mt kiu cch rt ging cc miu t y .

    V d, cc b Timer tng t cng c trn cc vi iu khin 8 -bit khc (H vi iu khinPIC,h vi iu khin caMotorola

    HC08), v cng c trn cc thit b 16-bit khc (v d nh hInfineon

    C167) v c trn cc b x l 32-bit (v d nh hARM,h Motorola MPC500).

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    141/246

    Atienganh.blogspot.com No book no knowledge141

    V d: Tit trng sa

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    142/246

    Atienganh.blogspot.com No book no knowledge142

    /* ------------------- ------------------- ------------ -----------* -

    Port.H (v1.00)

    --------------------------------------------------------

    File tiu Port cho v d v h thng tit trng sa(Embedded C Chng7)

    -* -------------------------------------------------------------* /

    /* ------ Pulse_Count.C -------------------------- -------- * /

    /* kt ni u vo xung vi chn ny-c hm bng phn mm* /sbit Sw_pin = P3^0;

    /* kt ni bo ng vi chn ny (ci vnu xung di mc cho php) * /sbit Alarm_pin = P3^7;

    /* ------ Bargraph.C ------- ------------------- ------------ * /

    /* Bargraph hin th ln cc chn ny(8 chn ni ny c th c phn b theo cc cchkhc nhau, nu b yu cu). * /sbit Pin0 = P1^0;

    sbit Pin1 = P1^1;sbit Pin2 = P1^2;sbit Pin3 = P1^3;sbit Pin4 = P1^4;sbit Pin5 = P1^5;sbit Pin6 = P1^6;sbit Pin7 = P1^7;

    /* ------------------- ------------------- ------------ -----------* ----- END OF F I LE ---------------------------------------

    -* -------------------------------------------------------------* /

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    143/246

    Atienganh.blogspot.com No book no knowledge143

    /* ------------------- ------------------- ------------ -----------* -

    Main.c (v1.00)

    --------------------------------------------------------

    Vd v h thng tit trng sa.

    -* -------------------------------------------------------------* /

    #include#include#include#include

    "Main.H""Port.H""Simple_EOS.H""Bargraph.H"

    #include "Pulse_Count.H"

    /* ------------- -------------- ---- ---------- ---------------------- * /

    void main(void){PULSE_COUNT_Init();BARGRAPH_Init();

    /* ci t simple EOS (khong thi gian tick 30ms) * /sEOS_Init_Timer2(30);

    while(1)/* vng lp v tn* /{/* a vo ch ngh tit kim nng lng* /sEOS_Go_To_Sleep();}

    }

    /* ------------------- ------------------- ------------ -----------* ----- END OF F I LE ---------------------------------------

    -* -------------------------------------------------------------* /

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    144/246

    Atienganh.blogspot.com No book no knowledge144

    /* ------------------- ------------------------------- -------- ---* -

    Simple_EOS.C (v1.00)

    --------------------------------------------------------

    File chnh cho h iu hnh nhng n gin(sEOS) s dng 8051.

    --phin bn ny kim tra tc dng chy ca sa.

    -* -------------------------------------------------------------* /

    #include "Main.H"#include "Simple_EOS.H"

    #include "Pulse_count.H"

    /* ------------------- ------------------- ------------ -----------* -

    sEOS_ISR()

    c gi ra mt cch nh k bi vic trn timer 2:Xem hm sEOS_Init_Timer2() bit chi tit nh thi.

    -* -------------------------------------------------------------* /sEOS_ISR() interrupt INTERRUPT_Timer_2_Overflow{

    /* phai tu reset c nh T2* /TF2 = 0;

    /* ===== USER CODE - Begin ================================== * /

    /* Gi hm cp nht y* /PULSE_COUNT_Update();

    /* ===== USER CODE - End ==================================== * /}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    145/246

    Atienganh.blogspot.com No book no knowledge145

    /* ------------------- ------------------- ------------ -----------* -

    sEOS_Init_Timer2()

    ...

    -* -------------------------------------------------------------* /void sEOS_Init_Timer2(const tByte TICK_MS)

    {tLong Inc;tWord Reload_16;tByte Reload_08H, Reload_08L;

    /* Timer 2 l mt Timer 16 bit,t ng np li gi tr khi b trn* /T2CON = 0x04; /* np thanh ghi iu khin T2* /

    /* ln yu cu(ln nht l65536) * /Inc = ((tLong)TICK_MS * (OSC_FREQ/1000)) / (tLong)OSC_PER_INST;

    /* gi tr 16 bit np li* /Reload_16 = (tWord) (65536UL - Inc);

    /* gi tr 8 bit np li (cao & thp) * /Reload_08H = (tByte)(Reload_16 / 256);Reload_08L = (tByte)(Reload_16 % 256);

    /* c s dng t kim tra nh thi(trong m phng) * //* P2 = Reload_08H ; * //* P3 = Reload_08L ; * /

    TH2RCAP2HTL2RCAP2L

    ====

    Reload_08H;Reload_08H;Reload_08L;Reload_08L;

    /*

    /*

    /*

    /*

    Load

    Load

    Load

    Load

    T2

    T2

    T2

    T2

    high byte * /reload capt. reg. high byte * /low byte * /reload capt. reg. low byte * /

    /* ngt Timer 2 c cho php, I SR s b gi bt c khi no Timer trn . */

    ET2 = 1;

    /* bt u chy timer 2* /TR2 = 1;

    EA = 1;}

    /* cho phep toan bo cac ngat * /

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    146/246

    Atienganh.blogspot.com No book no knowledge146

    /* ------------------- ------------------- ------------ -----------* -

    sEOS_Go_To_Sleep()

    h iu hnh s avo 'ch ngh' gia cc tick ng h tit kim nng lng. tick ng h tip theo s tr li trng thibnh thng cho b x l.

    -* -------------------------------------------------------------* /void sEOS_Go_To_Sleep(void)

    {PCON |= 0x01; /* avo ch ngh(h 8051) * /}

    /* ------------------- ------------------- ------------ -----------* -

    ---- END OF F I LE ----------------------------------------* -------------------------------------------------------------* /

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    147/246

    Atienganh.blogspot.com No book no knowledge147

    /* ------------------- ------------------- ------------ -----------* -

    Pulse_Count.C (v1.00)

    --------------------------------------------------------

    m xung t mt thit b ngtc kh hay thit b tng t.___

    ___

    -* -------------------------------------------------------------* /

    #include "Main.H"

    #include "Port.H"

    #include "Bargraph.H"#include "Pulse_Count.H"

    /* ------ Pr ivate function prototypes --------------------- ---- * /void PULSE_COUNT_Check_Below_Threshold(const tByte);

    /* ------ khai bo bin dng chung------------------------ * //* d liu c hin th* /

    extern tBargraph Data_G;

    /* ------ nh ngha bin dng chung-------------------------- * //* ch set sau khi sn xung c pht hin* /bit Falling_edge_G;

    /* ------ nh ngha bin ring------------------------- * //* lin tc kim tra tn hiu xung* //* (ch : khng th c mt dy cc bit...) * /static bit Test4, Test3, Test2, Test1, Test0;

    static tByte Total_G = 0;static tWord Calls_G = 0;

    /* ------ hng s ring----------------------------------- * /

    /* cho php thay i mc logic m phn cng khng thay i* /#define HI_LEVEL (0)#define LO_LEVEL (1)

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    148/246

    Atienganh.blogspot.com No book no knowledge148

    /* ------------------- ------------------- ------------ -----------* -

    PULSE_COUNT_Init()

    Hm khi ng cho th vin thit b ngt.

    -* -------------------------------------------------------------* /void PULSE_COUNT_Init(void)

    {Sw_pin = 1;/* s dng chn ny cho u vo* /

    /* cc du hiu* /Test4 = LO_LEVEL;Test3 = LO_LEVEL;Test2 = LO_LEVEL;Test1 = LO_LEVEL;Test0 = LO_LEVEL;}

    /* ------------------- ------------------- ------------ -----------* -

    PULSE_COUNT_Check_Below_Threshold()

    Kim tra xem b m xung c thp hn gi tr ngng khng.Nu ng, h thng bo ng s ku.

    -* -------------------------------------------------------------* /void PULSE_COUNT_Check_Below_Threshold(const tByte THRESHOLD){if (Data_G < THRESHOLD)

    {Alarm_pin = 0;}

    else{Alarm_pin = 1;}

    }

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    149/246

    Atienganh.blogspot.com No book no knowledge149

    /* ------------------- ------------------- ------------ -------- ---* -

    PULSE_COUNT_Update()

    y l hm ngt chnh.

    N ln c gi sau mi 30ms( cho php thi gian hm c trng l 20ms).

    -* -------------------------------------------------------------* /void PULSE_COUNT_Update(void)

    {/* xa c timer* /TF2 = 0;

    /* trn cc kt qu kim nh* /Test4 = Test3;Test3 = Test2;Test2 = Test1;Test1 = Test0;

    /* thu thp cc kt qu mi nht* /Test0 = Sw_pin;

    /* kt quTest4 ==

    Test3 ==

    Test1 ==

    yu cu:HI_LEVEL

    HI_LEVELLO_LEVELTest0 == LO_LEVEL * /

    if ((Test4 == HI_LEVEL) &&(Test3 == HI_LEVEL) &&(Test1 == LO_LEVEL) &&(Test0 == LO_LEVEL))

    {/* sn xung c pht hin* /Falling_edge_G = 1;

    }else{/* mc nh* /Falling_edge_G = 0;}

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    150/246

    Atienganh.blogspot.com No book no knowledge150

    /* tnh trung bnh 45 ln gi tc v- s m ln nht trn mt chu k ny l 9 xung

    if (++Call s_G < 45) * /

    /* 450 c s dng y mang mc ch kim tra (trong m phng)[Bi v c mt gii hntc nn bn c th m phng bng tay ...] * /

    if (++Calls_G < 450){Total_G += (int) Falling_edge_G;}

    else{

    /* cp nht hin th* /Data_G = Total_G;/* ln nht l 9* /

    Total_G = 0;Calls_G = 0;PULSE_COUNT_Check_Below_Threshold(3);BARGRAPH_Update();}

    }

    /* ------------------- ------------------- ------------ -----------* ----- END OF F I LE ---------------------------------------

    -* -------------------------------------------------------------* /

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    151/246

    Atienganh.blogspot.com No book no knowledge151

    /* ------------------- ------------------- ------------ -----------* -

    Bargraph.h (v1.00)

    --------------------------------------------------------

    - xem Bargraph.c bit thm chi tit.

    -* -------------------------------------------------------------* /

    #include "Main.h"

    /* ------ khai bo kiu d liu chung----------------------- * /

    typedef tByte tBargraph;

    /* ------ khai bo hm nguyn mu-------------------------- * /

    void BARGRAPH_Init(void);void BARGRAPH_Update(void);

    /* ------ khai bo hng s------------------------------------ * /

    #define BARGRAPH_MAX (9)#define BARGRAPH_MIN (0)

    /* ------------------- ------------------- ------------ -------- ---* ----- END OF F I LE ----------------------------------------* -------------------------------------------------------------* /

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    152/246

    Atienganh.blogspot.com No book no knowledge152

    /* ------------------- ------------------- ------------ -----------* -

    Bargraph.c (v1.00)

    --------------------------------------------------------

    Th vin bargraph n gin.

    -* -------------------------------------------------------------* /

    #include "Main.h"#include "Port.h"

    #include "Bargraph.h"

    /* ------ khai bo bin chung ------------------------ * /

    /* d liu c hin th* /tBargraph Data_G;

    /* ------ cc hng ring----------------------------------- * /

    #define BARGRAPH_ON (1)#define BARGRAPH_OFF (0)

    /* ------ cc bin ring----------------------------------- * /

    /* cc bin lu tr ngng ny c s dng cp nht hin th* /static tBargraph M9_1_G;static tBargraph M9_2_G;static tBargraph M9_3_G;static tBargraph M9_4_G;static tBargraph M9_5_G;static tBargraph M9_6_G;static tBargraph M9_7_G;static tBargraph M9_8_G;

  • 8/11/2019 Lp Trnh Nhng - Vietnamese

    153/246

    Atienganh.blogspot.com No book no knowledge153

    * -------------------------------------------------------------* -

    BARGRAPH_Init()

    Chun b cho hin th bargraph.

    -* -------------------------------------------------------------* /void BARGRAPH_Init(void)

    {Pin0 = BARGRAPH_OFF;Pin1 = BARGRAPH_OFF;Pin2 = BARGRAPH_OFF;Pin3 = BARGRAPH_OFF;Pin4 = BARGRAPH_OFF;Pin5 = BARGRAPH_OFF;Pin6 = BARGRAPH_OFF;

    Pin7 = BARGRAPH_OFF;/* s dng mt t l tuyn tnh hin th d liu

    Nh rng: *9* trng thi u ra c th thc hin- lm tt ccc