Ngôn Ngữ Lập Trình MPLAB C18

Embed Size (px)

Citation preview

  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    1/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    1

    M u

    Sau nhiu nm c m t ti Vit Nam, hin nay dng vi iu khin

    PIC vn th hin u th ca n. T cc ng dng nh ti cc ng dng

    ln ta u c th chn loi PIC ph hp vi ng dng ca mnh m gi

    thnh vn ph hp.

    Vit Nam hin nay pht t rin cc ng dng thng s dng cc

    trnh bin dch ngn ng C cho vi iu khin nh CSS, Keil C

    compiler Bi v l do n gin l cc hm, cc th vin m cc trnh

    dch ny cung cp tng i y v kh d s dng. Tuy nhin vic

    pht trin cc trnh ng dng ln v mang tnh chuyn nghip hn th

    cc trnh d ch ny hu nh vn cha mang li. 1 c tnh na l trnh

    dch ny khng phi do chnh hng sn xut phn cng Microchip

    cung cp do vy tnh mi v tnh chuyn nghip s k hng c cao

    nh chnh do nh sn xut cung cp.

    MPLAB l mi trng lp trnh tch hp do chnh Microchip cung

    cp, i km vi n ngn ng lp trnh ph hp vi tng dng vi iu

    khin. Pic16 c ngn ng C16, Pic 18 c ngn ng C18, Pic 30 c

    C30Theo ti thy cc th vin hm, cc v d ng dng do

    Microchip cung cp kh y v chuyn nghip. Hin nay vic pht

    trin cc ng dng trn nn MPLAB n c ta vn cha ph bin. Vimong mun gp 1 phn nh v rt ngn thi gian hc tp ca cc bn

    mi lm quen vi mi trng ny. Trong ti liu ny ti xin gii thiu

    nhng nt chnh v ngn ng C18 v cc ng dng trn dng Pic18 s

    dng ngn ng ny

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    2/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    2

    Mc lcPhn I: Ngn Ng C18........................................................................................................................ 3

    1. Kiu d l iu v cc gi i hn ................................................................................................. 3

    2. S m rng ca C18 ................................................................................................................. 9

    3. #pragma sectiontype............................................................................................................... 11

    4 . #Pragma interrupt low v #Pragma interrupt ............................................................. 17

    5 . # Prag ma tm pdata [ sec ti on-na me] .................................................................................... 26

    6 . #pragma varlocate bank variable-name v #pragma varlocate "sect ion-

    name" variable-name ........................................................................Error! Bookmark not defined.

    7. #pragma conf ig........................................................................................................................ 31

    8 . P roces so r-Spec if i c Hea der F il e s ....................................................................................... 33

    9. Processor-Specific Register Definitions Files ............................................................................. 37

    Phn II: Lp trnh PIC18 bng MPLAB C18 ....................................................................38

    1. S dng MPLAB ...................................................................................................................... 381.1. Qun l Project ................................................................................................................. 38

    1.2. Cc bc to ra fi le.hex ............................................................................................... 40

    1.3. Ca s t in ch s dng trong MPLAB .................................................................. 54

    2. V d lp trnh Pic18 bng C18 ........................................................................................ 55

    2.1. I/O c bn v delay........................................................................................................ 56

    2.2. RESET................................................................................................................................. 63

    2.3. Sleep..................................................................................................................................... 70

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    3/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    3

    Phn I: Ngn NgC18Ngn ng ny c xy dng trn nn ngn ng C c s . Chnh v

    vy i vi nhng ai quen cu lnh lp trnh C ri th vic nm bt

    v s dng n s tr nn n gin hn rt nhiu.

    1. Kiu d liu v cc gii hn

    Ging nh ngn ng lp trnh C c s v cc ngn ng lp trnh

    khc kiu d liu l c strong lp trnh. C18 c cc kiu d liu sau:

    Kiu s nguyn: bng sau trnh by cc kiu s nguyn ( tn,

    rng, gii hn max-min )s dng trong C18

    Kiu char l kiu mc nh trong C18 nu ta ko khai bo kiu d liu

    pha trc.

    Hnh 1.1

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    4/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    4

    Kiu du phy ng

    C18 h tr khai bo 2 kiu du phy ng l float v double vi chi

    tit v ng, gii hn min-max ( hnh 1.2)

    V d: ta khai bo

    Char var1; // rng 8 bit

    Float var2 // rng 32bit

    C18 lu dliu kiu endianness

    Endianness l khi nim c bn trong in t m ta lm quen

    trong cu trc my tnh: n c ngha l lu nhng byte t quan trng

    nht vn g a ch thp nht, v ngc li nhng byte quan trng nht

    th vng cao nht.

    V d: trong trnh dch C18 t a c on m sau

    Hnh 1.2

    Hnh 1.3

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    5/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    5

    Ta c th thy rng bin l c byte DD thp nht th c lu vo

    trong vng nh thp nht, byte AA cao nht th c lu vo vng nh

    cao nht

    Cc lp ca vng lu tr

    MPLAB C18 h tr cc lp lu tr chun ANSI nh auto, extern,

    register, static v typedef. Chng ra nhc li 1 cht v cc chun lu

    tr ny:

    - Auto: l bin trong 1 hm, tc l n ch xut hin trong hm,

    khi 1 hm thc thi xong n s mt

    - Extern: l kiu bin dng chung cho nhng file khc nhau, tc

    l bin c khai bo kiu extern trong file1.* c th s dng

    trong file2.* khi trong file2.* c lnh #include

    V d:

    File1.c:

    extern int x ; // bin x kiu ex tern

    char c;

    function(int m)

    { int var; // bin auto

    }

    File2.c

    #include

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    6/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    6

    .

    x=1234; // s dng x m ko cn khai bo li

    - Register: khai bo ny s bo cho trnh d ch bit bin c s

    dng nhiu v v th bin c lu trong thanh ghi vi mc

    ch lm truy cp d liu nhanh. Khai bo ny ch c s dng

    trong bin formal ca hm v bin auto, nu khai bo bin extern

    dng ny th trnh d ch s b qua v coi nh khng c khai bo

    register

    register int x; / / khai bo ny trnh d ch

    register char c; // s coi nh ko c khai bo regis ter

    function(register unsigned m, register long n) / / khai bo s dng

    trong bin formal

    {

    register int i; // khai bo s dng trong bin auto

    ...

    }

    - Static: l loi bin c cp pht tnh. N khc vi bin auto

    ch l lifetime (thi gian tn ti) trong ton b thi gian chy

    ca chng trnh. Nhng li khc so vi bin extern ch l n

    c cp pht tnh (allocated statically) cn bin extern c

    cp pht ng (allocated dynamically).

    Khi nim cp pht tnh v cp pht ng ging vi khi nim

    trong cu trc my tnh. Ti xin ni qua bn d hn h d ung : Cp

    pht tnh c ngha l bin c lu trong b nh stack (ko phi b

    nh heap) v n c cp pht vng nh trong khi bin d ch chng

    mailto:[email protected]://en.wikipedia.org/wiki/Static_memory_allocationhttp://en.wikipedia.org/wiki/Static_memory_allocationhttp://en.wikipedia.org/wiki/Static_memory_allocationhttp://en.wikipedia.org/wiki/Static_memory_allocationhttp://en.wikipedia.org/wiki/Dynamic_memory_allocationhttp://en.wikipedia.org/wiki/Dynamic_memory_allocationhttp://en.wikipedia.org/wiki/Dynamic_memory_allocationhttp://en.wikipedia.org/wiki/Static_memory_allocationmailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    7/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    7

    trnh, tc l bin c cp pht vng nh trc khi chng tr nh

    ca ta c chy. Cn ngc li, cp pht ng th bin c cp pht

    b nh trong khi thc hin chng trnh. trc quan ta xem v d:

    #include

    void func() {

    static int x = 0; // x is initialized only once across three calls

    of func()

    printf("%d\n", x); // outputs the value of x

    x = x + 1;

    }

    int main(int argc, char * const argv[]) {

    func(); // prints 0

    func(); // prints 1

    func(); // prints 2

    return 0;

    /* nu bin ta khai bo x ko phi l bin static th s hin th

    ln mn hnh l 0 0 0 ch ko phi l 0 1 2 nh trn. Ch n gin

    vy thi. Ta kt thc vn ny y*/

    }

    Cc bn mun chi tit thm v cc khai bo v ngha vng lu tr

    ny c th xem trong cc sch lp trnh C. Ti thy cun sch C

    Programming Language ca tc gi W.Kernighan & M.Ritchie vit rt

    hay, cc bn c th download trn mng hoc ti y.

    Ngoi cc nh ngha vng lu tr chun t rn MPLAB cn cungcp thm 1 khai bo lu tr na l overlay . Kiu ny ch p dng khi

    trnh dch hot ng trong ch Non-extended v ch p dng cho

    bin a phng (bin auto). Nh trn ti trnh by phn bin static,

    vn gp phi ca bin x l khi gi li hm bin x gi li gi tr

    mailto:[email protected]://sites.google.com/site/drocket42/Document/TheCProgrammingLanguageRitchieKernighan.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/TheCProgrammingLanguageRitchieKernighan.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/TheCProgrammingLanguageRitchieKernighan.pdf?attredirects=0&d=1mailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    8/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    8

    c tnh ton (tc l ko khi to li gi tr =0 khi gi hm) nhng i

    khi ta khng mun iu , v th bin kiu overlay chnh l gii quyt

    vn ny. Tm li bin kiu overlay l bin cp pht tnh nhng khi

    gi hm th n s c khi to li . Ta xem v d d i s hiu r:

    void f (void)

    {

    overlay int x = 5;

    x++;

    /* y bin x c cp pht tnh nh bin x v d trn nhng s c

    khi to li bng 5 khi gi li h m ch ko gi li gi tr. Kh d hi u,

    chng ta kt thc vn ny y */

    }

    Ta cng c section ( on d liu lu trong b nh) c th khai

    bo c tnh kiu overlay . Tc dng ca khai bo ny nh th no ti

    s nhc li pha di.

    i s ca hm

    i s ca hm trong C18 c th l lp auto hoc static . Mc

    nh l auto. Nu l tham s static th trnh dch phi hot ng trong

    ch Non-extended

    Qualifiers vng lu tr

    MPLAB C18 gii thiu cc qualifier far, near, rom, ram. Phm vi v

    vng nh da trn Qualifiers theo bng sau:

    Rom Ram

    Far Mi ni trong b nhMi ni trong b nh dliu (mc nh)

    NearTrong b nh chng tr nh vi a

    ch nh h n 64k

    Trong b nh c th truy

    cp

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    9/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    9

    V d:

    Nu ta khai bo:

    near ram charvar_mta // c ngha l bin var-mta lu trong bnh ram c th truy cp c.

    Ti y li xut hin khi nim mi v nh th no l b nh c th

    cp c v khng th. hiu r khi nim ny cc bn c th c

    trong cunPICmicro Mid-Range MCU Family Reference Manual . C

    th download ti y.

    2. S m rng ca C18

    C18 h tr cc cu trc nc danh bn trong cc union.

    1 cu trc nc danh c dng:

    1 cu trc nc danh nh ngha 1 i tng khng tn. Tn ca cc

    thnh vin cu trc phi c phn bit t nhng tn khc nhau trong

    phm vi cu trc c khai bo. Cc thnh vin c s dng trc tip

    trong phm vi khng c c php truy cp cho cc thnh vin thng

    thng

    Tm li: ta c th hiu iu ny ging nh lp trnh C thng

    thng ta c struct lng vo trong union nhng s khc bit l

    struct y c th nc danh ( tc l ko tn). Vic truy cp ti

    cc bin trong union nh cu trc C thng thng. Th hin v

    d sau:

    mailto:[email protected]://sites.google.com/site/drocket42/Document/Pic18MCUfamily.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/Pic18MCUfamily.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/Pic18MCUfamily.pdf?attredirects=0&d=1mailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    10/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    10

    Nhng code assembly vo trong chng trnh

    MPLAB C18 cung cp trnh dch assembler s dng c php ging vi

    trnh dch assembler MPASM. s dng on m assem ta phi khai

    bo nh sau:

    _asm

    [label:] [ [arg1[, arg2[, arg3]]]]

    _endasm

    Tuy nhin do l m assembly nhng trong C cho nn n c nhng im

    khc vi trnh d ch MPASM v ging vi code C:

    Cc comment phi ging trong C: comment phi sau // ch ko

    phi l ;

    Ko c mc nh ton hng m chng phi ghi r trong lnh, nu

    ko khi dch chng trnh s bo li

    H s mc nh l c s 10

    S dng cc k hiu ca C. v d: s hexa phi c vit l

    0x1234 ch ko phi l H 1234 nh assem thng thng

    Sau label c du :

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    11/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    11

    C php nh a ch theo ch s khng c h tr y (ngha

    l khng c dng []) m phi ch r bit truy cp. V d nh

    assem thng ta vit CLRF[2] nhng giphi vit CLRF 2,0

    C php v tt c cc lut nhng code assem trong code C v a trnh

    by t rn c th hin v d sau:

    _asm

    /* User assembly code */

    MOVLW 10 // Move decimal 10 to count

    MOVWF count, 0

    /* Loop until count is 0 */

    start:

    DECFSZ count, 1, 0

    GOTO done

    BRA start

    done:

    _endasm

    3. #pragma sectiontype

    C php:

    # pragma udata [attribute-list] [section-name [=address]]

    | # pragma idata [attribute-list] [section-name [=address]]

    | # pragma romdata [overlay] [section-name [=address]]

    | # pragma code [overlay] [section-name [=address]]

    Trong :

    [attribute-list] : l thuc tnh ca section ti s ni r phn di

    section-name : tn ca section ( do ngi lp trnh t)

    [=address]: a ch u tin ca section

    Tt c thuc tnh, tn, a ch ca section c th c hoc ko (t

    trong du ngoc vung), nu khi lp trnh khng ch r (specified) th

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    12/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    12

    trnh dch s t ng lm thay. T i s trnh by chi tit tng phn

    di

    Khai bo ny s gn c tnh v a ch cho sect ion (on). Trong

    phn ny ti xin c gi nguyn thut ng section (ch v l do d ch

    sang on nghe hi chui ) . 1 sect ion l 1 phn ca ng dng t ti

    a ch b nh no . 1 section c th cha code hoc data v c th

    c t trong b nh chng tr nh hoc b nh d liu. C 2 kiu

    section cho mi kiu b nh:

    B nh chng t r nh

    - code: cha cc lnh c th thc thi

    - romdata : cha cc bin v hng ( cc bin c khai bo vi

    qualifier rom)

    B nh d liu

    - udata: cha cc bin user cp pht tnh, ko c khi to

    - idata: cha cc bin user cp pht tnh v c khi to

    1 section absolute l section c a ch r rng thng qua khai bo

    =address .

    1 section assigned c gn l sec tion c trng vi khai bo

    SECTION

    1 sect ion unassigned khng phi l sect ion absolute v assigned

    Nghe c v kh hiu. V d sau th hin cc i tng c t

    trong b nh nh th no bn c th hiu c s khc nhau ca

    cc on d liu:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    13/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    13

    rom int ri; // r rng bin ri phi c lu trong vng nh rom. C

    th romdata //v n ko phi l code c th chy. tng

    t ta c bng di

    rom char rc = 'A';

    int ui;

    char uc;

    int ii = 0;

    char ic = 'A';

    void foobar (void)

    {

    static rom int foobar_ri;

    static rom char foobar_rc = 'Z';

    ...

    }

    void foo (void)

    {

    static int foo_ui;

    static char foo_uc;

    ...

    }

    void bar (void)

    {

    static int bar_ii = 5;

    static char bar_ic = 'Z';

    ...

    }

    Vi on chng trnh trn th cc bin c lu trong b nh nh

    th no . Ta c bng cc i tng (cc bin, bin hm..) c lu tr

    trong b nh tng ng:

    i tng Vng nh i tng Vng nh

    ri romdata ui udata

    rc romdata uc udata

    roobar_ri romdata foo_ui udata

    roobar_rc romdata foo_uc udata

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    14/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    14

    ii idata bar_ic idata

    ic idata foo code

    bar_ii idata bar code

    Ti y ta c th hiu c cc kiu b nh ca Pic18 m ta c th

    ch ng lu t r d liu vo trong qua cc khai bo nh trn.

    Kh l mt khi ta phi nm chc c nhng iu ny, vi nhng

    chng trnh nh i khi iu l khng cn thit nhng thc

    hin nhng project ln th iu l cn thit v nht l nm

    c nhng iu ny mi hiu c cc on m gc m

    Microchip cung cp cho chng ta v th mi s dng c tt.

    OK, lets go

    Cc section mc nh

    trn phn khai bo #pragma ti c ni tn section c th ko c

    khai bo bi ngi lp trnh. Nu iu xy ra trnh d ch s t ngt tn cho section ph thuc vo l kiu section no theo bng

    sau:

    Kiu section Tn mc nh

    code .code_filename

    romdata .romdata_filename

    udata .udata_filename

    idata .idata_filename

    filename: l tn file ca ta

    V d: nu tn file chng trnh ca ta l first_pro v kiu section l

    code th on mc inh s c tn l .code_first_pro

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    15/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    15

    Thuc t nh (attribute) ca section

    Thuc tnh ca section gm c access v overlay

    access : bo cho trnh dch bit rng section c t trong vng c th

    truy cp ca b nh d liu ( xem chi tit v nh th no l b nh c

    th truy cp trong PIC 18C MCU Family Reference Manual ). Bin t

    trong access section phi c khai bo vi t kha near. V d:

    #pragma udata access my_access

    /* all accesses to these will be unbanked */

    near unsigned char av1, av2;

    overlay: l thuc tnh cho php section khc c t ti cng a ch

    vt l. Thuc tnh ny c th s dng cng vi thuc tnh access .

    C 4 iu kin phi tha mn c th overlay:

    1. Mi section phi c t trong file ngun khc nhau

    2. C 2 section phi c tn ging nhau

    3. Nu on 1 c khai bo c thuc tnh access th on

    2 cng phi khai bo thuc tnh ny

    4. Nu gn a ch tuyt i cho 1 section, th section cn

    li cng phi gn a ch tuyt i

    V d:

    f i le1.c:

    #pragma code overlay my_overlay_scn=0x1000

    void f (void)

    {

    ...

    mailto:[email protected]://sites.google.com/site/drocket42/Document/Pic18MCUfamily.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/Pic18MCUfamily.pdf?attredirects=0&d=1mailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    16/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    16

    }

    f i le2.c:

    #pragma code overlay my_overlay_scn=0x1000

    void g (void)

    {

    ...

    }

    Hoc n cng s dng cho nhiu bin m ko bao gi c kch hot

    ng thi:

    f i le1.c:

    #pragma udata overlay my_overlay_data=0x1fc/* 2 bytes will be located at 0x1fc and 0x1fe */

    int int_var1, int_var2;

    f i le2.c:

    #pragma udata overlay my_overlay_data=0x1fc

    /* 4 bytes will be located at 0x1fc * /

    long long_var;

    c thm thng tin v iu khin section overlay bn c th xem

    thm trong MPASM Assembler, MPLINK Object Linker, MPLIB Object

    Librarian Users Guide (DS33014) . (nhng thc s l kh khoai)

    address ca section

    a ch c gn s l ni lu tr on m.

    #pragma code my_code=0x2000

    /* on m ny s c lu a ch 0x2000 cho t i khi gp t in x l b n d i

    */

    #pragma code

    mailto:[email protected]://sites.google.com/site/drocket42/Document/MPASM%E2%84%A2Assembler%2CMPLINK%E2%84%A2ObjectLinker.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/MPASM%E2%84%A2Assembler%2CMPLINK%E2%84%A2ObjectLinker.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/MPASM%E2%84%A2Assembler%2CMPLINK%E2%84%A2ObjectLinker.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/MPASM%E2%84%A2Assembler%2CMPLINK%E2%84%A2ObjectLinker.pdf?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/MPASM%E2%84%A2Assembler%2CMPLINK%E2%84%A2ObjectLinker.pdf?attredirects=0&d=1mailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    17/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    17

    4. #Pragma interruptlow v #Pragma interrupt

    Ngt l 1 phn quan trng trong vi iu khin (VK) gip cho

    chng trnh ca chng ta r nhnh v thc hin cc cng vic khc

    nhau, khi xy ra ngt VK con tr chng trnh s tr ti a ch ca

    chng trnh ngt tng ng ( a ch ca chng trnh ngt ty thuc

    vo loi ngt v loi VK, khi thc hin lp trnh vi VK no th ta

    xem datasheet ca n l bit) v thc hin chng trnh ngt c lu

    , khi thc hin chng trnh ngt xong n s tr li thc hin

    chng trnh ma in() ti a ch lc n dng li ( a ch ny c lu

    trong stack). Vy ta s xem xt cch khai bo, khai bo mc u v

    thc hin chng trnh ngt trong C18 nh th no, go on.

    #Pragma interrupt fname: khai bo hm phc v ngt mc u tin

    cao (high-priority ISR)

    a ch xyra ngt

    start

    a chvector ngt

    kt thc ngt

    end

    Lu thc hin ngt

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    18/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    18

    #Pragma interruptlow fname: khai bo chng trnh phc v ngt

    mc u tin thp(low-priority ISR)

    C php khai bo:

    # pragma interrupt function-name [tmp-section-name ][save=save-

    list][nosave=nosave-list]

    | # pragma interruptlow function-name [tmp-section-

    name][save=savelist][nosave=nosave-list]

    Trong :

    function-name : l tn hm phc v ngt

    [tmp-section-name]: tn section trong cha cc bin kiu

    temporary ca ISR

    [save=save-list] : S dng lu cc bin, cc section. Trong

    save-list l danh sch cc bin, cc section c lu.

    [nosave=nosave-list] : s dng ch rng compiler ko cn lu cc

    bin, cc section. nosave-list l danh sch cc bin, cc section ko cnlu

    Ta s tm hiu dn dn chi tit tng i tng pha d i .

    Vi khai bo ny trnh d ch s to ra bin kiu temporary (th no

    l bin, section kiu temporaty ti s ch r pha di ) trong udata

    section c tn l fname_tmp . V d:

    void foo(void);

    ...

    #pragma interrupt foo

    void foo(void)

    {

    /* perform interrupt function here */

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    19/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    19

    }

    Vi chng trnh ny cc bin ginh cho chng trnh ngt s c

    t trong udata section c tn l foo_tmp .

    Vector ngt

    MPLAB C18 ko t ng t ISR ti vector ngt. Thng thng l dng

    lnh Goto t ti vector ngt gi ISR. V d:

    #include

    void low_isr(void); // khai bo chng trnh phc v ngt

    void high_isr(void); // nh chng trnh bnh thng

    /*

    Gi s ta lm vic vi loai Pic18 m loi ngt c a ch vector

    ngt l 0x18. Nh ti ni phn trn, vector ngt ny ty vo

    loi ngt v loi VK, v th khi lm vic vi VK no bn tra

    trong datasheet

    */

    #pragma code low_vector=0x18

    void interrupt_at_low_vector(void)

    {

    _asm GOTO low_isr _endasm

    }

    #pragma code /* tr li code section mc nh */

    #pragma interruptlow low_isr

    void low_isr (void)

    {

    /* ... */

    }

    /*

    Gi s ta lm vic vi loai Pic18 m loi ngt c a ch vector

    ngt l 0x08 */

    #pragma code high_vector=0x08

    void interrupt_at_high_vector(void)

    {

    _asm GOTO high_isr _endasm

    }

    #pragma code /* tr li code section mc nh */

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    20/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    20

    #pragma interrupt high_isr

    void high_isr (void)

    {

    /* ... */

    }

    Nh ti ni trn bin, section kiu temporary (nht thi) tc l

    n ch xut hin nht thi trong qu trnh thc hin chng trnh. V

    d vi chng trnh sau:

    Section kiu temporary l dng lu li cc bin trung gian trong

    qu trnh tnh ton, thc hin chng trnh v cc bin tmp_1, tmp_2trong chng trnh l bin kiu temporary. V section kiu temporary

    l section c th dng chung gia cc hm vi nhau ( theo thut ng

    ca C18 chnh l section kiu overlay m ti trnh by trn).

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    21/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    21

    ISR Context Saving (lu trng thi chng trnh ngt) s dng

    [save=save-list]

    C php:

    #pragma interrupt isr save=myint, section("mydata") // lnh ny s lubin myint v section c tn l mydata.

    Ok, cu hi t ra cho chng ta l ti sao li phi lu trng thi

    chng trnh ngt? V cu hi u tin s l trng thi chng trnh

    ngt l g?

    Trong khoa hc my tnh, context ng ngha vi trng thi (state) cachng trnh. Nhiu ngi cn cho rng n l ti nguyn ca CPU mchng trnh ang s dng ti 1 thi im. Ti nguyn ny c th lcc thanh ghi , b nh v ngoi vi.

    Ti sao phi lu trng thi chng trnh ngt???

    Trong thc hin chng trnh c cc ti nguy n c c tnh

    vulnerable (tnh d b tn thng, hay ni cch khc l n d b thay

    i gi tr . y ti xin c gi nguyn thut ng vulnerable m ko

    dch ra ting vit) . Ti nguyn ny l loi ti nguyn m thng dng

    chung gia ISR v code chng trnh chnh. Bi vy nu ta ko tin

    hnh lu li cc ti nguyn ny trc khi thc hin code ca ISR th

    sau khi thc hin chng trnh n s th ay i v nhng d liu b thay

    i ny li c code ca chng trnh chnh thc hin v nh vy

    chng trnh chng ta sau khi thc hin ngt s chy sai.

    V d: ti nguyn c tn l WREG c chc nng lu nhng tnh ton

    trung gian. Gi s khi ang thc hin chng trnh chnh m xy ra

    ngt m ta ko tin hnh lu l i WREG th chng trnh ngt s thay i

    gi tr trong ti nguyn ny. Vy khi thc hin xong chng trnh ngt

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    22/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    22

    m tr li thc hin chng trnh main th khi chng trnh main c

    cc d liu trong ny ra thc hin tnh ton tip s l nhng d liu

    sai. Do vy kt qu cui cng l chng trnh ca chng ta thc hin

    sai.

    Vy cch gii quyt cho vn ny l nh th no?

    Ta c th ngay rng mun chng trnh ngt ISR khng lm thay

    i gi tr cc section .tmpdata gc ca chng trnh chnh th ta phi

    c section .tmpdata ring cho n. M nh ti trnh by trn khai

    bo #pragma interrupt s t ng to ra section .tmpdata cho ring

    n.

    Bi vy nn ta phi tin hnh lu trng thi chng trnh ngt

    Ti nguyn c tnh vulnerability trong thu t ng ca C18 chnh l

    ti nguyn qun l bi trnh dch (compiler managed resource). C

    ngha rng l cc ti nguyn ny d b thay i trong khi thc hin

    chng trnh ngt lm sai chng trnh chnh v th cn phi qun l

    (vi ngha nh vy theo ti cc loi ti nguyn ny c th gi l ti

    nguyn c che bi trnh d ch compiler masked sources). Bng

    di l danh sch cc ti nguyn qun l bi trnh d ch:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    23/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    23

    7 thanh ghi u tin c gi l vital c ngha rng n mc nh

    c lu li trc khi thc hin ngt, nay ni cch khc chng trnhthc hin ngt chc chn s t ha y i gi tr 7 thanh ghi ny.

    Tip theo l cc thanh ghi TBLPTR v TABLAT ( cc thanh ghic s dng truy cp b nh chng t r nh). Nu bn bit rng ISRko truy cp d liu rom th bn c th bo v trnh dch ko lu ccthanh ghi ny (pha di ti s trnh by cch lm th no ko lucc d liu nu ko cn thit phi lu).

    Ging nh vy, nu bn bit ISR ko s dng con tr hm, bn cth ko lu cc thanh ghi PCLATH v PCLATU

    MATHDATA l 1 section c bit c s dng bi th vic math,ngoi ra n c s dng trong ch truyn thng thc thi nhnggiao din hm. Section ny nh v th ng bn ko cn lo lng v n.

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    24/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    24

    Cui cng l section .tmpdata cha nhng gi tr trung gian cho

    nhng tnh ton phc tp m ti trnh by nh th no l sec tion

    temporary (.tmpdata) phn trn. Sect ion loi ny ln ln trong qu

    trnh thc hin chng trnh m chng ta khng kim sot c s ln

    ln ca n trong tng thi im.

    Ta thy rng ti sao phi lu trng thi chng trnh ngt.

    Nhng vn i km vi lu trng thi ngt s l thi gian phc v

    ngt b t ng ln . Bi v trc khi thc hin code ngt th phi lu li

    trng thi v sau khi thc hin ngt li phi tin hnh khi phc trng

    thi lu li . Cng vic ny tn kh nhiu thi gian nu d liu

    cn lu ln. c bit l trnh d ch v3.0 v phin bn cao hn , trnh

    dch nhn dng ti nguyn vulnerable 1 cch d dt(conservative), c

    ngha l nu n ko chng mnh c ti nguyn l ti nguyn

    vulnerable hay ko th n s lu ti nguyn . Ta xem v d sau:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    25/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    25

    ISR u tin ko gi hm khc. Bi vy trnh dch c th phn tchhm isr v nhn ra cc ti nguyn c sa l cc thanh ghi WREG,BSR, STATUS, TBLPTR v TABLAT . V th trnh dch s t ng lucc thanh ghi ny v cng ch lu cc thanh ghi ny.

    Trong chng trnh th 2, c gi hm khc v th trnh dch khng

    bit rng n ang v s sa ci g trong hm foo. Trong thc t hm

    foo c th l module ring r. Bi vy trnh dch lu tt c ti nguyn

    qun l bi trnh d ch (compiler managed resources). Vi c ch hotng ny th nu section kiu .tmpdata c d liu ln th s tn nhiu

    thi gian lu v khi phc v nh ti ch ra trn rng section kiu

    ny tng ln trong qu trnh thc hin chng trnh v ta ko kim sot

    c iu ny.

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    26/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    26

    Vy nhim v tip theo ca ta chnh l phi ti u qu trnh lu d

    liu, tc l lu nhng d liu cn thit cn nhng d liu ko cn thit

    th ko lu. N c thc hin bng [nosave=nosave-list]

    Ch r bin v d liu ko cn lu trong trng thi ngt bng

    [nosave=nosave-list]

    Nh ti trnh by trn khai bo ny s ch ra rng cc bin v

    section trong nosave-list s ko c lu.

    #pragma interrupt foo nosave=TBLPTR, TABLAT // khai bo ny s ko lu2 thanh ghi TBLPTR, TABLAT, bi v 2 thanh ghi ny ko c s dng trong chngtrnh main() v n ch s dng trong chng trnh ngt v th ko cn lu li (kocn bo v)

    Vi ngt mc u tin cao (khai bo bng #pragma interrupt) cc v tr

    ti nguyn c th khng cn lu bo v l: FSR0, TBLPTR, TBLPTRU, TABLAT,

    PCLATH, PCLATU, PROD, section(".tmpdata"), or section("MATH_DATA").

    Vi ngt mc u tin thp (khai bo bng #pragma interruptlow) cc

    v tr ti nguyn c th l khng cn lu bo v l nhng ti nguyn

    va k trn v thm WREG, BSR, or STATUS.

    Vn tip theo l ta xc nh section hoc thanh ghi no b thay

    i, hoc ko b thay i c th save hoc nosave. Chng nh ta li

    phi c m my m trnh dch to ra xc nh xem section no b

    thay i. Nu bt buc phi lm cng vic th chc chn rng ta

    mun ti u ti nguyn th phi mt nhiu thi gian, cng sc, v nh

    vy c l chng ai s dng C18 lp trnh. Vy cch gii quyt s l

    nh th no. Ta tm hiu vn ny tip sau:

    5. #Pragma tmpdata [section-name]

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    27/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    27

    Cu lnh ny s th ay i section thnh section lo i d liu .tmpdata

    C php:

    #pragma tmpdata [section-name]

    [section-name] tn ca section d liu m trnh d ch to cc bin

    temporary

    V d:

    #pragma tmpdata user_tmp

    // cu lnh bn trong s to ra cc bin dng .tmpdata lu trong section c tn luser_tmp

    #pragma tmpdata

    Ta xem xt xem vn ti va gi l lm th no xc nh

    section no ko thay i khng cn phi lu. Ta xt v d sau:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    28/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    28

    Lnh #pragma tmpdata setporttmp.#pragma tmpdata : s to

    thm 1 section kiu . tmpdata lu tr d liu trung gian khi thc

    hin hm SetPort().

    lnh tip theo #pragma interruptlow low_isr nonsave(.tmpdata)

    to ra section .tmpdata cho chng trnh ngt v bo v section c tn

    l setPorttmp bi chnh v th m hm setPort() c th c dng

    cho c chng tr nh chnh m ko b li khi thc hin. Hay ni cch

    khc section setPorttmp c dng chung cho c chng tr nh ngt

    v chng trnh chnh

    Vic tn dng ti nguyn mi ni trong chng trnh l vn

    kh quan trng gip chng thc hin c cc Project ln m khng

    tn nhiu tin chi cho ti nguyn ( Ti nguyn ti mun ni ti chnh

    l b nh v tc x l). Di y ta xem xt cch ti u s dng ti

    nguyn nh th no..

    Tit kim ti nguyn khi x l nhiu ngt mc u tin cao

    Trong chng trnh c nhiu ngt u tin cao (#pragma interrupt), v cc

    chng trnh ngt mc u tin cao th ch c th kch hot 1 thi

    im nn c th dng chung cc section kiu .tmpdata

    V d:

    void increment (int counter);

    void isr1 (void);void isr2 (void);

    #pragma interrupt isr1 isr_tmp nosave=section(".tmpdata")

    void isr1 (void)

    {

    static int foo = 0;

    ...

    increment (foo);

    ...

    }

    #pragma interrupt isr2 isr_tmp nosave=section(".tmpdata")

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    29/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    29

    void isr2 (void)

    {

    static int foo = 0;

    ...

    increment (foo);

    ...

    }

    #pragma tmpdata isr_tmpvoid increment (int counter)

    {

    ...

    }

    #pragma tmpdata

    Trong chng trnh v d trn ta thy 2 chng trnh ngt mc u

    tin cao dng chung section .tpmdata tn l isr_tmp. Bi v cc

    chng trnh ngt mc u t in cao 1 thi im ch c th kch hot 1

    chng trnh. Ta tng tng rng nu ko c c tnh ny khi ngt

    isr1 xy ra v chng trnh phc v ngt ca n ang thc hin,

    chng trnh isr1() chy vn cha xong th ngt 2 s c kch hot

    th section isr_tmp b thay i. Nh th sau khi thc hin xong isr2()

    chng trnh quay li thc hin isr1( ) v s dng cc gi tr trong

    section isr_tmp b thay i

    chng trnh isr1() thc hin khngchnh xc.

    Vy vi ngt c mc u tin khc nhau trong cng 1 chng trnh

    m chng trnh ngt mc u tin thp hn th chng ta phi x l

    nh th n o m bo chng trnh vn tn dng c ti nguyn v

    chc nng chng trnh vn c m bo chnh xc.

    Ngt lng nhau (Nested Interrupts)

    Ta xt v phn tch v d sau:

    void increment (int counter);

    void isr1 (void);

    void isr2 (void);

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    30/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    30

    #pragma interrupt isr1 isr_tmp save=section("isr_tmp")

    nosave=section(".tmpdata")

    void isr1 (void)

    {

    static int foo = 0;

    ...

    increment (foo);

    ...

    }

    #pragma interruptlow isr2 isr_tmp save=section("isr_tmp")

    nosave=section(".tmpdata")

    void isr2 (void)

    {

    static int foo = 0;

    INTCONbits.GIE = 1;

    ...

    increment (foo);

    ...

    }

    #pragma tmpdata isr_tmp

    void increment (int counter){

    ...

    }

    #pragma tmpdata

    Ta thy rng section isr_tmp phi c lu li trc khi thc hin

    chng trnh ngt v ngt isr2 l loi ngt c mc u tin thp nn

    trong khi thc hin chng trnh ngt isr2() n c th b ngt on.

    n y chc cc bn c th t phn t ch c ti sao li phi khai

    bo chng trnh nh th, ti ko phn tch r chng trnh ny, cc

    bn t phn tch nh v d trn ti va phn tch s thy v hiu r.

    Tip: ti y bn t t cu hi ti sao li phi lng nhng nh

    vy. Vic qun l ti nguyn sao ko trnh dch t lm. Nh t i

    phn tch trn rng hiu r c nhng iu ti va trnh

    by s tn dng c ti a ti nguyn. Gi s ta thc hin 1

    Project th phi lm sao tn dng ti a ti nguyn ta c, tc l

    lm sao m ti nguyn nh nht ta dng gii quyt c bi

    ton . Nh ti ni trn ti nguyn y l dung lng b

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    31/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    31

    nh v tc x l chng t r nh. Nu ta ko hiu r v ko thc

    hin c nhng khai bo tn dng ti a th c th ta s phi

    dng VK c ti nguyn ln hn, v nh th tn tin, v i khi

    thm ch l nhiu khi c tin cng ko mua c.

    6. #pragma config

    Khai bo ny ci t cu hnh s dng trong cc ng dng khc

    nhau. V c th s dng nhiu khai bo cu hnh cho thit b

    C php:

    # pragma config setting-list

    setting-list:

    setting

    | setting-list, setting

    setting:

    setting-name = value-name

    setting-name = value-name : ng vi tng thit b, tra chng ta s

    dng ti liu PIC18 Configuration Settings online help . Bn c th

    dowload ti liu ti y.

    V d vi PIC18F2220 tra trong ti liu ta c:

    mailto:[email protected]://sites.google.com/site/drocket42/Document/hlpPIC18ConfigSet.rar?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/hlpPIC18ConfigSet.rar?attredirects=0&d=1https://sites.google.com/site/drocket42/Document/hlpPIC18ConfigSet.rar?attredirects=0&d=1mailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    32/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    32

    Da vo ta cu hnh cho PIC18F2220 nh sau:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    33/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    33

    #pragma config WDT = ON, WDTPS = 128

    #pragma config OSC = HS

    /* cu hnh ny enable Watchdog Timer, thit lp postcaler

    Watchdog l 1:128 v oscillator HS*/

    void main (void)

    {

    ...

    }

    7. Processor-Specific Header Files

    L loi file cha nhng khai bo cho nhng thanh ghi chc nng

    c bit .

    V d, trong file header ca PIC18C452, PORTA c khai bo:

    extern volatile near unsigned char PORTA;

    extern volatile near union {

    struct {

    unsigned RA0:1;

    unsigned RA1:1;

    unsigned RA2:1;

    unsigned RA3:1;

    unsigned RA4:1;

    unsigned RA5:1;

    unsigned RA6:1;

    } ;

    struct {

    unsigned AN0:1;

    unsigned AN1:1;

    unsigned AN2:1;

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    34/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    34

    unsigned AN3:1;

    unsigned T0CKI:1;

    unsigned SS:1;

    unsigned OSC2:1;

    } ;

    struct {

    unsigned :2;

    unsigned VREFM:1;

    unsigned VREFP:1;

    unsigned :1;

    unsigned AN4:1;

    unsigned CLKOUT:1;

    } ;

    struct {

    unsigned :5;

    unsigned LVDIN:1;

    } ;

    } PORTAbits ;

    Khai bo u tin ngha rng PORTA l 1 byte ( kiu unsigned

    char). Modiffer extern cn thit khi gi file header trong file khc

    th bin mi c hiu lc, nearc ngha l bin PORTA c t trong

    b nh RAM c th truy cp. Dng khai bo ny thit lp gi tr

    PortA.

    V d:PORTA = 0x34; /* gn gi tr 0x34 ti cng A */

    Tip theo l khai bo th 2 l cu trc nc danh m ti trnh by

    trn, vy ta hiu khai bo ny nh th no. Bn c th thy cc nhn

    RA0, RA1.; AN0, AN1ging vi nhn m trong datasheet ghi. T c

    l dng khai bo ny chng ta c th truy cp tng bit trong portA.

    V d:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    35/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    35

    PORTAbits.AN0 = 1; /* Sets chn c k hiu AN0 pin */PORTAbits.RA0 = 1; /* Sets chn c k hiu RA0 pin, c tcdng ging vi lnh trn v AN0 v RA0 cng l k hi u ca1 chn*/

    Cc file header ny Microchip cung cp cho chng ta hu nh

    y cc dng Pic18 sau khi ta ci t C18 trn my. xem cc

    file header ny ta c th vo th mc C:\Program

    Files\Microchip\mplabc18\v3.38\h . Cng vic ca ta ch l dng n,

    dng n trong chng trnh ta dng lnh:

    #include // trong xxxx l ch s VK tng ng

    ta dng

    V d khi lp trnh cho pic18f4550 ta khai bo :

    #include

    Ngoi vic s dng tn trc tip khai bo ta c th s dng lnh

    #include kt hp vi lnh p option s dng file

    header ca VK tng ng

    Trong cc file header cn nh ngha sn cho chng ta cc Macro

    assembly v ta sn s dng chng trong lp trnh. Danh sch cc

    Macro v chc nng ca chng ti lit k di bng sau:

    Macro Chc nng

    Nop()

    Khng thc hin g, ch l delay 1 chu k dao

    ng thch anh, thng s dng trong vit hm

    delay

    ClrWdt() Clear watchdog timer

    Sleep() Thc thi lnh SLEEP

    Reset() RESET thit b

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    36/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    36

    Rlcf(var, dest, acces) Quay tri gi tr var qua bit mang

    Rlncf(var, dest, acces) Quay tri gi tr var ko qua bit mang

    Rrcf(var, dest, acces) Quay phi gi tr var qua bit mang

    Rrncf(var, dest, acces) Quay phi gi tr var ko qua bit mang

    swapf(var, dest , acces) i v tr nibble ca gi tr var

    - Nu s dng Macro qu nhiu s nh h ng ti qu trnh ti u

    cc chc nng m Macro m nhim

    - Var : phi l 8 bit v ko c t trong stack

    - Nu dest =0, kt qu c t trong WREG, nu dest=1 kt qu

    c t trong var. Nu access =0 th bank c th truy cp cchn, ghi gi tr BSR, nu access=1 th bank s c chn

    da trn gi tr ca BSR

    V d:

    var=0b11110000; // gi tr 8bit

    Rlcf(va r, 1 , 0) / / gi tr v ar =1 11 00 00 1 c l u trong bank c th

    truy cp, bit mang=1

    Hnh biu th thc hin lnh Rlcf()

    1 1 1 1 0 0 0 0

    Cc lnh khc qu trnh thc hin tng t nh vy.

    1

    1 1 1 0 0 0 0 1

    Gi tr gc

    Bit mang

    Gi tr ch

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    37/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    37

    8. Processor-Specific Register Definitions Files

    Cc file nh ngha thanh ghi ca VK l file assembly cha cc

    nh ngha v cc thanh ghi. Cc khai bo ny chnh l vic dn nhn

    cho cc thanh ghi ta sn s dng m ko cn khai bo.

    V d: PortA ca VK Pic18C452 c nh ngha trong file l:

    SFR_UNBANKED0 UDATA_ACS H'f80'

    PORTA

    PORTAbits RES 1 ; 0xf80

    nh ngha ny c ngha l PortA c 1 nhn l PORTA v PORTAbits

    v c 2 u c tham chiu ti v t r c a ch 0xf80 (y chnh l

    a ch ca thanh ghi PortA trong VK Pic18c452)

    Ta c th xem cc nh ngha ny trong th mc: C:\Program

    Files\Microchip\mplabc18\v3.38\src\extended\proc

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    38/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    38

    Phn II: Lp trnh PIC18 bng MPLAB C18

    Dowload phn mm MPLAB v C18 trn internet ri tin hnh ci

    t chng trn my tnh ca bn. C 1 lu cc loi phn mm u cphin bn ca n v tng ng vi loi phin bn ca MPLAB bn

    phi xem n h tr C18 ti phin bn no. V nu khng tng thch

    gia 2 ci ny khi thc hin dch chng trnh s bo li v bn chng

    bit li ch no.

    Download MPLAB:

    http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_7

    6.zip

    Download C18:

    http://ww1.microchip.com/downloads/en/DeviceDoc/mplabc18_v3.40_

    windows_lite.exe

    Bn download chng v my ri tin hnh ci t nh chng trnh

    bnh thng. Ti khng i su v vn ny.

    1. S dng MPLAB

    1.1. Qun l Project

    Cng nh bt k trnh d ch no khc MPLAB cng c assembler,

    compiler, linkerVy ta xem MPLAB dng chng nh th no to

    ra file chy. Tin trnh to file chy c th hin hnh 2.1 (hnh

    di):

    mailto:[email protected]://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_76.ziphttp://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_76.ziphttp://ww1.microchip.com/downloads/en/DeviceDoc/mplabc18_v3.40_windows_lite.exehttp://ww1.microchip.com/downloads/en/DeviceDoc/mplabc18_v3.40_windows_lite.exehttp://ww1.microchip.com/downloads/en/DeviceDoc/mplabc18_v3.40_windows_lite.exehttp://ww1.microchip.com/downloads/en/DeviceDoc/mplabc18_v3.40_windows_lite.exehttp://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_76.ziphttp://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_76.zipmailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    39/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    39

    T file ngun (source file) c vit theo c php assembly hoc c

    php compile (trong ti liu ny ta nghin cu C18 m ti trnh by

    phn 1), kt hp vi cc option build, cc assembler v compiler s

    dch ra m my (hnh 2.2). Tip theo l ti cng vic ca Linker s

    lin kt file do cc trnh d ch to ra + th vin file object + linker

    script (tp link, l tp ch r b tr b nh vi tng VK khc nhau)

    to ra file c th thc thi (file.hex) v file ginh cho debug.

    Hnh 2.1

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    40/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    40

    1.2. Cc bc to ra f ile.hex

    Di y ta i tng bc cch t u ti cui cch to fil e.hex ( l

    file np vo VK chy)

    B1: chn thit b

    y l bc chn thit b m ta tin hnh lp trnh cho n. Chon

    thit b c th tin hnh sau v trc khi d ch chng trnh. Nhng

    theo khuyn co th nn thc hin bc ny trc khi bt u 1

    project. ta c th tin hnh la chn li thit b nh s au: Configure/

    select Device .

    Hnh 2.2

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    41/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    41

    B2: To project:

    B2.1: M mi tr ng pht trin tch hp MPLAB: start/all

    program/Microchip/ MPLAB IDE v8.70/ MPLAB IDE

    Hnh 2.3

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    42/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    42

    B2.2: to 1 file: file/New hoc n ctrl+N

    Hnh 2.4

    Hnh 2.5

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    43/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    43

    y l ca s ta vit code lp trnh. File s c dng add vo

    project khi bn tin hnh lm 1project (bc 3)

    Sau khi vit xong code tin hnh lu li file/save as hoc n ctrl+s .

    Chn th mc bn mun lu file. Lu tn file bn phi c phn m

    rng .* sau tn. V d: file ca bn tn l sample th khi lu bn phi

    ch r l .c, .h hoc .asm

    B2.3: to project: project/project wizard

    n next ti ca s la chn thit b . y ta cn phi la chn thit

    b m mnh mun pht trin. Nh hnh di:

    Hnh 2.6

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    44/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    44

    Ti y, cu hi t ra l, nu ti mun thay i thit b pht trin

    trong project th phi lm project li t u. Cng vic tht mt

    cng v thiu t nh chuyn nghip, ta c th tin hnh la chn li

    thit b nh sau: Configure/ select Device. Ta c:

    Hnh 2.7

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    45/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    45

    Sau tin hnh la chn thit b trong phn Device m ti khoanh

    trn.

    phn ny ta cng c th thy rng MPLAB s bo cho ta bit rng

    thit b m ta chn c h tr ti u. Biu tng mu xanh tc l c

    h tr v ngc li mu l khng h tr. V d vi pic18f4550 h

    tr hu ht cc chng trnh np ch c PICkit1 l khng

    Tip theo bn n next. Ta c ca s la chn ngn ng lp trnh:

    Hnh 2.8

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    46/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    46

    La chn ngn ng lp trnh trong phn Active Toolsuite. Nu ta s

    dng C18 th la chn nh trn, hoc ta c th la chn loi ngn ng

    khc. Trong phn Toolsuite Contents ta c th kch chut vo tng

    phn v xem v t r ci t cc phn di Location xem c ging

    th mc ta ci khng. Nu khng ging ta c th chn li bng n

    Browse. Nhng theo ti iu ny l khng cn thit cho lm. v

    thng l phn mm s t cp nht th mc ci t chng trnh

    Sau ny, sau khi to xong project ta cng c th kim tra v sa li

    ng dn ca chng bng cch: project/set language Tool locations

    Hnh 2.9

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    47/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    47

    Tip theo n next ta s c ca s chn th mc lu project v

    nhp tn project ca ta vo:

    Hnh 2.10

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    48/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    48

    Chn th mc lu project bng Browse > nhp tn file, n Save.

    sau n next:

    Hnh 2.10

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    49/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    49

    y ta c th Add fi le to ra b c 1 hoc ta cng c th Add

    sau khi to xong project. Nu Add file y, ta t in hnh chn file

    phn tree_box bn tri, chn vo file cn add sau n Add, hoc ta

    cng c th xa b file add xong bng cch chn vo file bn phiri n Remove.

    1file ta ch cn phi add l file .lkr. file ny c tc dng bo

    cho trnh dch bit t chc b nh ca loi vi iu khin ta s dng.

    Vi mi thit b c 1 f ile . lkr tng ng. Ta chn file trong phn th

    mc: C:\ProgramFiles\Microchip\mplabc18\v3.38\bin\LKR

    Sau n next ta c ca s hon thnh to project:

    Hnh 2.11

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    50/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    50

    n finish hon thnh to project.

    Chng ta va hon thnh xong cch to 1 pro ject . Ok, t gi c ththoi mi lm cc iu m mnh mun. Thoi mi th hin kh nng

    lp trnh ca mnh nh!!!

    Test code bng simulator

    Chng trnh ca chng ta b li, hoc ta mun kim sot tng phn

    chng trnh Ta c th s dng cng c debug gii quyt vn

    ny.MPLAB c th tch hp c Debugger trong n. Tin hnh debugger

    c th thc hin trn phn cng hoc phn mm. Mnh thng s dng

    debug bng phn mm v l do ti tin..hjhj

    Hnh 2.11

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    51/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    51

    tin hnh chn cng c debugger: debugger/select Tool . Ta s

    c 1 lot cc cng c la chn cho debugger tng ng vi loi m ta

    c. V d ta c mch debugger pickit3 th sau khi cm mch picket3

    vo my tnh ta chn cng c debug l pickit3(debugger/select Tool/

    picket3), MPLAB s t kt ni vi phn cng v t a c th thc hin

    debugNu ta khng c mch phn cng s dng cho debugger th ta

    chn debug bng phn mm bng cch chn debugger/select Tool

    /MPLAB SIM.

    Tin hnh debug bng phn mm tng t nh vi debug cc trnh

    dch khc vi cc thao tc nh l set breakpoint, step over, step in,step out.Sau khi chn debugger/select Tool /MPLAB SIM ta c

    ca s (hnh 2.12):

    Ta c thanh cng c ginh cho debug vi cc chc nng sau (hnh

    2.13):

    Hnh 2.12

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    52/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    52

    chy tng dng lnh ta n step into (F7)

    quan st c cc gi tr thanh ghi v cc bin c trong chng

    trnh ra dng ca s watch: View/Watch (hnh 2.14) . Cch s dng ca

    s ny ti trnh by trong phn cc ca s m rng bn di.

    Mong mun ca ta trong khi debug chng trnh l kim tra tng

    on chng trnh. thc hin iu ny ta dng cc Breakpoint. Khi

    ta n Run th chng trnh chy ti dng c breakpoint s dng li.

    set cc Breakpoint ta click chut phi vo dng lnh ri chnset breakpoint (hnh 2.15) hoc double-click vo dng

    Hnh 2.13

    Hnh 2.14

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    53/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    53

    Vn gp phi tip theo l khi ta chy tng dng lnh bng step

    into m trong chng trnh c vng lp delay ( thc hin chc nng

    delay) th ta s phi n rt nhiu ln cho ti khi kt thc vng lp .

    iu thc s l bt tin v th cng. Vy ta thy c cng c

    step out s gii quyt vn ny. Khi ta trong vng lp delay th

    ta n step out s thot khi vng lp ny.

    M rng:

    Hnh 2.15

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    54/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    54

    MPLAB l mi trng pht trin tch hp. Chnh v th ta cng c

    th pht trin cc ng dng bng cc trnh d ch khc trn nn ca

    mi trng ny. Cng vic pht trin bng ngn ng khc ch khc

    so vi phn to project trn trong phn la chn ngn ng lp

    trnh trnh by.

    Ta c th la chn ngn ng lp trnh khc. Nh v d trn ti pht

    trin bng CCS. Bn cng c th tin hnh bng trnh dch khc m

    bn quen thuc.

    Lu : Tt nhin rng trnh dch m bn mun ph t t rin trongmi trng MPLAB phi c ci t trn my ca bn ri

    1.3. Ca s tin ch s dng trong MPLAB

    Mi trng lp trnh tch hp MPLAB cung cp cho chng ta nhiu

    window kim sot vic thc hin chng trnh, quan st qu trnh

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    55/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    55

    thc hin chng trnh v nht l khi thc hin debug ta c th dng

    cc window ny quan st gi tr cc bin, cc thanh ghi.

    Ca s disassembly listing

    Ca s hardware stack

    2. V d lp trnh Pic18 bng C18

    Phn ny mnh s trnh by cc v d n gin s dng C18 t rn

    mi trng MPLAB thc hin cc chng trnh c bn s dng cc

    module trong vi iu khin Pic18. Mc ch gip hiu v cch lm

    vic trn MPLAB, s dng C18 v iu khin cc module trong Pic18

    m Microchip tch hp sn.

    Ti gi s rng bn c kin thc c bn v phn cng v th

    khng di dng mt thi gian v sai mc ch ca ti liu ny ti s

    khng ni ti phn cng.

    Nu cha c kin thc v phn cng VK Pic18 th bn download

    ti y.

    Tip: xem chng trnh c thc hin ng nh mnh mong munhay khng ti s dng m phng bng Proteus. Chng trnh ny

    l chng trnh dng m phng thit k mch ph bin v khng

    kh s dng. Bn tin hnh download v vi ci t trong my.

    Nu c phn cng thc th cng tt, nhng theo ti l khng cn

    thit lm.

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    56/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    56

    2.1. I/O c bn v delay

    2.1.1. I/O

    y l chc nng c bn nht ca cc loi vi iu khin.

    s dng cc k hiu gi nh cng ta phi khai bo:

    #include (trong xxx l tn loi vi iu khin ta s

    dng. v d nu ta s dng loi vi iu khin p18f4550 th khai bo

    #include). Hoc c th khai bo cch khc nh sau:

    defined(__18F4550)

    #include

    Thit lp pin l in hay out: vi iu khin VK Pic ging nh

    tt c cc loi VK khc. pin no c cu hnh 0 th l

    pin out. Ngc li pin no c cu hnh 1 th l pin in.

    Loi port K hiu tng ng

    PortA TRISA

    PortB TRISB

    PortC TRISC

    V d: ta cu hnh in/out cho PortA

    TRISA=0; //A l cng out

    TRISA=0xf0 (hoc TRISA=0b11110000) //pinA0,..,A3 l out,

    pinA4,..,A7 l in

    Tng t thit lp cu hnh in/out vi cc Port khc Xut d liu trn cc Port

    Bng 2.1

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    57/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    57

    xut d liu trn cc cng ta phi cu hnh cng l out v gn

    cc gi tr ti cc k h iu cng tng ng:

    Loi port K hiu tng ng

    PortA PORTA

    PortB PORTB

    PortC PORTC

    c d liu trn cc cng

    c d liu trn cc cng th tng ng cng ta ph i cu hnh l

    cng vo v c gi tr tng ng vi k hiu cng

    V d c th v xut nhp d liu trn cc cng ti khng lmtrc tip y. tng minh hn ti s c trnh by chi tit

    phn v d pha d i.

    2.1.2. Delay

    Trong C18 h tr cc hm sn cc hm delay. s dng cc hm ny

    ta phi khai bo #include

    Hm Delay1TCY() = Nop() : hm ny delay 1 chu k dao ng

    thch anh. Ty theo thch anh tn s bao nhiu m delay by

    nhiu. V d ta s dng thch anh tn s f=4Mhz th hm ny s

    delay 1/(4.10^6)=0.25s Hm Delay10TCY() : hm ny delay 10 chu k dao ng thch

    anh

    Hm Delay10TCYx(unsigned char): hm ny delay bi s ca 10

    chu k dao ng thch anh

    Bng 2.2

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    58/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    58

    V d: Delay10TCYx(5) : delay 5*10*(1/f) = 10/f (giy)

    unsigned char: nm trong khong [0,255]

    Delay100TCYx(unsigned char): hm ny delay bi s ca 100chu k dao ng thch anh

    unsigned char : nm trong di [0,255]

    Delay1KTCYx(unsigned char): hm ny delay bi s ca 1000

    chu k dao ng thch anh

    unsigned char : nm trong di [0,255]

    Delay10KTCYx(unsigned char): hm ny delay bi s ca

    10.000 chu k dao ng thch anh

    unsigned char : nm trong di [0,255]

    Tt c cc hm delay u tr v gi tr Void

    y l phn u tin v th ti s trnh ny chi tit cch to project,

    add file, dch chng trnh v np chng trnh m phng trn

    proteus. T phn sau cc bc tin hnh tng t .

    2.1.3. V d

    Ti s dng pic18f4550 lm v d v m phng trn proteus:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    59/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    59

    Bn to file mi, sau nhp on m sau vo

    #include

    #include

    void main()

    {

    TRISB=0x00; //cau hinh PortB l cong out

    PORTB=0x88; //xuat d lieu PortB

    while(1)

    {

    PORTB=0X00; //xuat gia tri ra ngoai

    Delay100TCYx(250); //delay 0.25ms

    PORTB=0X01;

    Delay100TCYx(250);

    PORTB=0X02;

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    60/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    60

    Delay100TCYx(250); //delay 0.25ms

    PORTB=0X03;

    Delay100TCYx(250);

    }

    }

    Ri tin hnh lu vo th mc m bn mun trn my tnh ca

    mnh vi tn io.c

    To project nh ti trnh by trn vi tn ty . y ti

    ly tn l io

    Trong phn add file bn phi add file io.c va mi to trn v file

    18f4550_g.lkr (xem li phn add file trang 9). c nh sau:

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    61/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    61

    Sau tin hnh dch chng trnh. Ta c file io.hex.

    Np file ny vo trnh m phng protues

    Double-click vo vi iu khin trn proteus. Xut hin ca s np

    file io.hex

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    62/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    62

    Sau click vo phn ti khoanh trong dn ti th mc bn lu

    project v MPLAB dch ra f ile io.hex v lu .

    Sau khi np file xong bn n nt m phng nh bnh thng.

    V d rt n gin c nhim v cu hnh PortB v xut d liu,delay sau 1 khong thi gi an , xut d liu

    Cc bn c th download chng trnh full y:https://sites.google.com/site/drocket42/home

    mailto:[email protected]://sites.google.com/site/drocket42/homehttps://sites.google.com/site/drocket42/homemailto:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    63/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    63

    2.2. RESET

    2.2.1. C bn v RESET trong PIC18

    PIC18fxxx c cc loi RESET sau:

    Reset Power-on (POR)

    Mch reset bt ngun nh hnh di:

    Xung bt ngun c chip to ra bt c khi no VDD tng vt mc

    ngng. iu ny s cho php chip bt u ch khi to khi VDD

    p ng cc yu cu hot ng ( ngha l m bo cc tham s v

    in p, tn s, nhit ), nu iu kin ko m bo hot ng th

    reset ny s gi cho ti khi cc tham s ca iu kin hot ng c

    m bo.

    Khi c ngt ny xy ra th bit ORP c set thnh 0 v n s ko b

    thay i v cc ngt phn cng khc, chnh v th thot khi ngt

    ny th user phi reset bng phn mm i km vi ngt ny

    Reset MCLR trong khi hot ng bnh thng

    - Mch ny chcn khi ngun thp. diode gip tx nhanh khi ngun xung thp- R=1 gii hn dng vo tt C ko nh hng chn ny

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    64/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    64

    Vi iu khin c chn reset MCLR , nu ra mun reset loi ny th

    phi gi chn ny mc low. ( m bo chng nhiu, tc l khng

    reset khi c xung mc low m ko phi do ngi dng to ra Microchip

    tch hp sn module chng nhiu cho chn ny)

    Ta cng c th disable ngt ny bng cch set bit MCLRE=0 , khi

    chn ny b disable n s tr thnh u vo s

    Reset MCLR trong ch qun l ngun

    Reset Watchdog timer (WDT)

    Reset programmable Brown-out (BOR)

    PIC18 cung cp 1 mch BOR gip chng ta c th tit kim ngun.

    BOR c iu khin bng BORV1:BORV0 v BOREN1:BOREN0. Ta

    cu hnh cho BOR theo bng sau:

    Cu hnh BOR Trng thi

    ca

    SBOREN

    (RCON)

    Hot ng BORBOREN1 BOREN0

    0 0 Unavailable

    BOR disable; cho php BOR

    bng bng lp trnh li cc bit

    cu hnh

    0 1 Available

    BOR cho php bng phn mm;

    hot ng BOR c iu khinbng SBOREN

    1 0 Unavailable

    BOR cho php bng phn cng

    chy trong ch run v idle,

    disable trong ch sleep

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    65/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    65

    1 1 Unavailable

    BOR cho php bng phn cng;

    phi c disable bng lp trnh

    li cc bit cu hnh

    Reset bng lnh RESET

    Reset khi ngn xp y

    Rest khi ngn xp underflow

    2.2.2. V d

    V d ny ti gii thiu v x l RESET power-up v RESET bng

    chn MCLR. V y l 2 lo i RESET c dng ph bin

    * LED ch th:

    1 blink ---------->RESET bt ngun

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    66/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    66

    2 blinks ------->RESET MCLR

    3 blinks ------------> Brown out reset (BOR)

    4 blinks ------------> RESET WDT ( watch dog timer time out)

    Trong v d m phng bng proteus ti ch m phng RESET bt

    ngun v RESET MCLR. Khi bt u chy m phng n ch th s

    sng 1 ln (1 blink) c ngha l RESET bt ngun. Khi n RESET

    MCLR n ch th s nhy sng 2 ln.

    Code nh sau:

    /* FileName: reset_source.c

    * Dependencies: Header ( .h) fi les i f appl icable, see below

    * Processor: PIC18F

    * Compiler: MCC18 v3.30 or higher

    * Writer: Rocket42 */ #include

    #include "reset.h"

    /*Configuration settings:

    * Oscillator is configured as INTRC

    * watch dog timer is disabled or enabled (comment outrespective line)

    * Extended instruction mode is disabled

    * Low voltage programming is disabled

    */

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    67/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    67

    #pragma config XINST = OFF, LVP = OFF

    #pragma WDT = OFF

    //#pragma WDT = ON, WDTPS = 1024

    #define RESET 1

    //Function Prototypes

    void user_main(void);

    void Blink_LED(unsigned int number_of_blink);

    void Delay(void);

    //Reset flags

    unsigned char R_POR, R_MCLR, R_BOR, R_WDT;

    //main function

    void main(void){

    // Clear Reset flags

    R_POR = 0;

    R_MCLR = 0;

    R_BOR = 0;

    R_WDT = 0;

    // Configure PORTB as output

    LATB = 0x00;

    TRISB = 0x00;

    if(isPOR() == RESET){ //Reset source is POR

    Blink_LED(1);

    R_POR = 1;

    }

    if(isMCLR() == RESET){ //Reset source is MCLR

    Blink_LED(2);

    R_MCLR = 1;

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    68/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    68

    }

    #if def ined(BOR_ENABLED)

    if(isBOR() == RESET){ //Reset source is BOR

    Blink_LED(3);

    R_BOR = 1;

    }

    #endif

    #if defined(WDT_ENABLED)

    if(isWDTTO() == RESET){ //Reset source is WatchDeog

    timer time out

    Blink_LED(4);

    R_WDT = 1;

    }

    #endif

    StatusReset(); //Clear the Reset status

    user_main(); //call the "user_main" -- The User

    application program

    }

    void user_main(void)

    {

    while(1); //Any user application to be executed and wait untillreset happens

    }

    void Blink_LED(unsigned int number_of_blink)

    {

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    69/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    69

    unsigned int n=0;

    // ************ BLIN K LED *******************************

    for(n = 0; n < number_of_blink; n++){

    Delay(); // Turn on

    LATB = 1;

    Delay(); // Turn off

    LATB = 0;

    }

    }

    void Delay(void){

    unsigned int delay = 8000; // If faster oscillator is used, make

    this larger

    while(delay--);

    }

    Tip:

    - Ti s dng m phng bng PIC18f4550, nu bn s dng loi

    Pic18 khc th ch cn chn li thit b trong trnh dch MPLAB

    nh sau: configure/select device

    mailto:[email protected]:[email protected]
  • 7/22/2019 Ngn Ng Lp Trnh MPLAB C18

    70/70

    Nguyn Vn Hng [email protected] Hc vin kthut qun s

    Tin hnh la chn thit b mnh mun s dng trong m phng

    phn ti khoanh trn. Ri nhp OK th l hon thnh

    - Cc bn c th download chng trnh full y:

    https://sites.google.com/site/drocket42/home

    2.3. Sleep

    mailto:[email protected]://sites.google.com/site/drocket42/homehttps://sites.google.com/site/drocket42/homemailto:[email protected]