Huong Dan Lap Trinh Pic Tieng Viet

download Huong Dan Lap Trinh Pic Tieng Viet

of 31

Transcript of Huong Dan Lap Trinh Pic Tieng Viet

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    1/31

    I / _ GII THIEU:_ay la tai lieu hng dan s dung CCS lap trnh ngon ng C cho vi ieu khien PIC cua Microchip .Tac gia ten TRAN XUAN TRNG , SV K2001 ,H BK HCM . La thanh vien txt2203 tren dienan diendandientu.com . Moi ong gop y kien ve tai lieu xin vao muc Vi x ly-Vi ieu khien cuadien an hoac email en a ch : [email protected] . Rat cam n moi ong gop y kien cua cacban yeu thch lap trnh vi x ly oi vi tai lieu nay .

    II / _ VAI VAN E VE TAI LIEU NAY :_Tai lieu hng dan s dung phan mem CCS cac phien ban , lap trnh C cho VK . Tai lieu cunggiai thch cach thc hoat ong cua 1 so module cua VK e cac ban nam ro hn hoat ong VKnham s dung ham va viet chng trnh 1 cach chnh xac ._Tai lieu nay khong chu y thay the hoan toan HELP cua CCS , no ch la phan co ong , la hngdan viet 1 chng trnh bat au t au , gii thieu 1 so ham va cach hoat ong , 1 so van e khi laptrnh , . . . do o no khong ay u , ban nen oi chieu tai lieu nay vi HELP tieng Anh e nam rovan e , ong thi hoc ca tieng Anh de dang ._CCS co phan common questions nhng cau hoi thng gap va tra li , cha c dch aydu no rat quan trong , nhieu ban hay bo qua , khong e y . Ban nen xem no ._Tai lieu trnh bay ve cac van e sau :

    _ Chng 0 : Gii thieu s lc CCS . Viet 1 chng trnh C trong CCS nh the nao . Cong cumo phong .

    _ Chng 1 : S dung bien va ham , cac cau truc lenh , ch th tien x ly._ Chng 2 : Cac ham x ly so , x ly bit , delay .

    _ Chng 3 : X ly ADC , cac ham vao , ra trong C ._ Chng 4 : Truyen thong vi PC , x ly chuoi ._ Chng 5 : van e TIMER._ Chng 6 : Truyen thong I2C , SPI va PARALLEL ._ Chng 7 : Cac van e ve PWM , Capture va Compare ._ Chng 8 : Van e ngat ( interrupt ).

    _Trong moi chng se co cac hng dan s dung cac ham thch hp cho chu e o ._Nen oc chng 1 trc . Cac chng con lai oc lap nhau . Thch g oc nay ._Tai lieu nay viet en au a len mang cho moi ngi tham khao en o . Hau het se trnh bay sdung 1 cach c ban nhat , sau o se bo sung them VD,chng trnh, . . . them en au se thong baoen o .

    1

    mailto:[email protected]:[email protected]
  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    2/31

    2

    CHNG 0 :

    HNG DAN S DUNG CCS VIET CHNGTRNH C TRONG CCS

    I / _ GII THIEU CCS :_Chng trnh CCS dung cho tai lieu nay la PCW COMPILER version 3.07 (2001 ) hoac 3.222(2004) , bao gom : PCB , PCM va PCH . Phien ban mi nhat la 3.227 co nhieu ham mi va chcnang mi , cap nhat mi . Lap trnh cho cac ho PIC 12 bit , 14 bit va PIC 18 ._e viet 1 chng trnh C mi : chay CCS , vao New e tao 1 file C mi . Tren thanh toolbar :

    _Chon Microchip 12 bit e viet chng trnh cho PIC 12 bit . Microchip 14 bit e vietchng trnh cho PIC 14 bit . Microchip PIC18 e viet chng trnh cho PIC18 .

    _Chon Compiler e bien dch chng trnh ban ang viet._CCS la trnh bien dch dung ngon ng C lap trnh cho VK . ay la ngon ng lap trnh ay scmanh , giup ban nhanh chong trong viec viet chng trnh hn so vi ngon ng Assembly ._Tuy nhien C khong phai la van nang , co the thc hien moi th nh y muon . Trong 1 so trng

    hp , no co the sinh ma chay sai (tham khao cac cai tien cac version CCS tren web : info.CCS.comMat khac , no sinh ma khong theo y muon ( du khong sai , v du nh sinh nhieu ma lenh khong quantrong khi thc thi ham ngat ) lam cham toc o thc thi chng trnh neu ban oi hoi chng trnh xly vi toc o cao , v du nh ieu che PWM ._Nhng CCS C cho phep ban phoi hp ASSEMBLY cunh vi C , ieu nay cho phep chng trnhcua ban se tr nen rat uyen chuyen , ket hp c sc manh cua ca 2 ngon ng , du rang viec phoihp se lam cho viec viet chng trnh tr nen kho khan hn ._CCS cung cap cac cong cu tien ch giam sat hoat ong chng trnh nh : C/ASM list : cho phepxem ma ASM cua file ban bien dch , giup ban quan ly ma va nam c cac thc ma sinh ra va nochay nh the nao , la cong cu rat quan trong , ban co the g roi chng trnh va nam c hoat ongcua no ; SYMBOL hien th bo nh cap phat cho tng bien , giup quan ly bo nh cac bien chngtrnh ,. . . CallTree hien th phan bo bo nh ._ Co nhieu tien ch trong muc Tools , nhng do ban crack nen nhieu cai khong xai c .

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    3/31

    3

    II / _ CONG CU MO PHONG , TCH HP TRONG MPLAB :_Cong cu mo phong cho PIC 16Fxxx. . a nang nhat ch co the la PIC Simulator IDE 5x , ho tr 38loai PIC 16Fxxx . Co ca Oscilocope , INT ao , . . . va nhieu chc nang khac vi giao dien tuyet ep ,de dung . Hoat ong oc lap , lay file HEX e mo phong . Co dch ngc ra Assemble . Co bo lap

    trnh BASIC va Assemble rat hay va de dung , du kha n gian nhng u e viet cac chng trnhnho chat lng . Ban nen th qua ._ Mo phong vi PIC 18 , PIC 12 , va nhieu loai PIC 16 ma IDE tren khong ho tr ? Ban co the dungCCS tch hp MPLAB .

    III / _ CCS TCH HP TRONG MPLAB :_Ban co the soan ma CCS trong moi trng MPLAB va mo phong ma C ( khong phai Assemble ) ,tng t nh lap trnh va mo phong vi MPLAB C18 .

    _ Thiet lap moi trng CCS : vao MPLAB IDE , vo muc Project-> Set Language Tool Location . . .Hop thoai m ra , nhan vao dau + cua dong CCS C Compile ->Executable ,sau o chon Browser ethiet lap ng dan en file ccsc . exe trong th muc cai at CCS ( ten la PICC ) . Ban co the themng dan vao 4 dong cua Default Search Path . . . neu thay can ._ Tao 1 d an ( project ) CCS trong MPLAB : vao Project-> Project Wizard , chon VK lam viec , bc 2 : chon bo cong cu ( Active toolSuite ) la CCS C Compiler . . . co the khong can Add file thietb *.h v trong file ma ma ban se viet sau o co dong #include file nay roi th no t include vaothoi . the la ban a co moi trng lam viec CCS trong MLPAB . Khuyet iem la ban khong the dungcac tien ch cua CCS oc lap c ( C/asm list . . . ) . Tuy vay , ban co the soan ma t CCS oc lap, nem qua MPLAB , e dung c tnh nang mo phong C cua MPLAB ._ e mo phong : sau khi soan ma , chon Compile . Ban co the dung moi tien ch trong muc View emo phong . M Watch , chon cac bien C ma ban muon quan sat , thanh ghi ac biet muon xem . Sauo m Debugger->Select tool->MPLAB SIM . Tool bar mo phong xuat hien , chon animate e chaytng dong lenh C mo phong ._ Lu y : vao Debugger-> Setting . . . e thay oi cac thiet lap can thiet : OSC/TRACK : thay oitan so VK thch hp . ANIMATION / REALTIME UPDATE : e thay oi toc o mo phong vacap nhat Watch . Muc nay con dung e thay oi toc o mo phong cho file ma Assemble ( mac nhno chay nh RUA ay 1 s cho 1 lenh ) .

    II / _ VIET 1 CHNG TRNH TRONG CCS :_Sau ay la v du 1 chng trnh trong CCS :

    #include < 16F877 .h >#device PIC6f877 *=16 ADC=10#use delay(clock=20000000). . . .

    Int16 a,b;. . . .Void xu_ly_ADC ( ){ . . .

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    4/31

    4

    . . .

    }

    #INT_TIMER1Void xu_ly_ngat_timer ( ){ . . .

    . . .}

    Main ( ){ . . .

    . . .

    }

    _au tien la cac ch th tien x ly : # . . . co nhiem vu bao cho CCS can s dung nhng g trongchng trnh C nh dung VXL g , co dung giao tiep PC khong , ADC khong , DELAY khong , . . .

    _Cac khai bao bien ._Cac ham con ._ Cac ham phuc vu ngat theo sau bi 1 ch th tien x ly cho biet dung ngat nao._Chng trnh chnh .

    CHNG 1 :

    CCAACCHH SS DDUUNNGG BBIIEENN VVAA HHAAMM ,, CCAACC CCAAUU TTRRUUCC LLEENNHH ,,CCHH TTHH TTIIEENN XX LLYY

    I / _ KHAI BAO VA S DUNG BIEN , HANG , MANG :1 / _ Khai bao bien , hang ,mang :

    _Cac loai bien sau c ho tr :int1 so 1 bit = true hay false ( 0 hay 1)int8 so nguyen 1 byte ( 8 bit)int16 so nguyen 16 bitint32 so nguyen 32 bitchar ky t 8 bitfloat so thc 32 bitshort mac nh nh kieu int1

    byte mac nh nh kieu int8int mac nh nh kieu int8long mac nh nh kieu int16

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    5/31

    5

    _Them signed hoac unsigned pha trc e ch o la so co dau hay khong dau .Khai bao nh trenmac nh la khong dau . 4 khai bao cuoi khong nen dung v de nham lan . Thay vao o nen dung 4khai bao au .

    VD :Signed int8 a ; // so a la 8 bit dau ( bit 7 la bit dau ).Signed int16 b , c , d ;Signed int32 , . . ._Pham vi bien :

    Int8 :0 , 255 signed int8 : -128 , 127Int16 : 0 ,2^15-1 signed int16 : -2^15 , 2^15-1Int32 : 0 , 2^32-1 signed int32 : -2^31 , 2^31-1

    _Khai bao hang : VD :Int8 const a=231 ;

    _Khai bao 1 mang hang so :VD : Int8 const a[5] = { 3,5,6,8,6 } ; //5 phan t , ch so mang bat au t 0 : a[0]=3_Mot mang hang so co kch thc toi a tuy thuoc loai VK:*NeuVK la PIC 14 ( VD :16F877 ) : ban ch c khai bao 1 mang hang so co kch thc toi a la256 byte .Cac khai bao sau la hp le :Int8 const a[5]={ . . .}; // s dung 5 byte , dau . . . e ban ien so vaoInt8 const a[256]={ . . .}; // 256 phan t x 1 byte = 256 byte

    Int16 const a[12] = { . . . }; // 12 x 2= 24 byteInt16 const a[128] = { . . . }; // 128 x 2= 256 byteInt16 const a[200] = { . . . }; // 200 x 2 =400 byte : khong hp le*Neu VK la PIC 18 : khai bao mang hang so thoai mai , khong gii han kch thc ._Lu y : neu anh khong u so phan t vao trong ngoac kep nh a khai bao , cac phan t con laise la 0 . Truy xuat gia tr vt qua ch so mang khai bao se lam chng trnh chay vo tan ._Mang hang so thng dung lam bang tra (v du bang tra sin ) , viet de dang va nhanh chong , gonhn so vi khi dung ASM e viet ._Khai bao 1 bien mang : kch thc tuy thuoc khai bao con tro trong #device va loai VDK:*PIC 14 : Neu ban khai bao con tro 8 bit : VD # device *=8 : khong gian bo nh ch co 256 bytechotat ca cac bien chng trnh bat chap VK cua ban co hn 256 byte RAM (Vd : 368 , . . .) va bienmang co kch thc toi a tuy thuoc o phan manh bo nh , vi 16F877 co 368 byte ram , thng thkch thc khong qua 60 byte ,co khi di 40 byte , neu khai bao ln hn se gap loi vo duyen : notenough ram for all variable trong khi thc s VDK con rat nhieu RAM . Neu khai bao con tro 16 bit: VD : #device *=16 , khong gian bo nh la ay u ( tr i 1 t RAM do CCS chiem lam bien tam ).VD : vi 16F877 ban dung u 368 byte RAM . Nhng kch thc mang cung khong qua 60 byte .* PIC 18 : kch thc mang khong gii han, xai het RAM th thoi . Vi khai bao con tro 8 bit , banch c xai toi a 256 byte RAM , neu khai bao con tro 16 bit , ban xai tron bo nh RAM thc s ._VD Khai bao bien mang : int16 a[125] ; // bien mang 126 phan t , kch thc 252 byte ram .

    2 / _ Cach s dung bien :_Khi s dung cac phep toan can lu y : s tran so , tnh toan vi so am , s chuyen kieu va ep kieu .

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    6/31

    6

    A ) _Mot vai v du ve tran so , lam tron :_VD :Int8 a=275; // a =275-256=19Int8 const a=275 //a=19Int8 a=40 , b=7 , c;C=a * b ; //c=280-256=24

    C=a / b ; //c=5

    _Ban co the ep kieu , thng la tiet kiem ram , hay muon tiet kiem thi gian tnh , . . .. VD :Int8 a =8 , b=200;Int16 c ;C= ( int16) a * b ;

    // c= 1600 , a chuyen sang 16 bit , 16bit*8bit b t ong chuyen sang 16 bit , ket qua la 16 bit trongc , lu y bien a , b van la 8 bit ._8bit * 8bit phep nhan la 8 bit , KQ la 8 bit_16bit * 8 bit phep nhan la 16 bit , KQ la 16 bit_32bit * 16 bit phep nhan la 32 bit , KQ la 32 bit_16bit * 16 bit phep nhan la 16 bit , KQ la 16 bit. . . v . v . . ._Co the ep kieu ket qua : VD : 16b*8b16bit , neu gan vao bien 8 bit th KQ se cat bo 8 bit cao .

    II / _ CAC CAU TRUC LENH : ( statement )_Gom cac lenh nh while . . do , case , . . .STATEMENTS

    STATEMENT EXAMPLE

    if (expr) stmt; [else stmt;] if (x==25)x=1;

    elsex=x+1;

    while (expr) stmt; while (get_rtcc()!=0)putc(n);

    do stmt while (expr); do {putc(c=getc());

    } while (c!=0);

    for (expr1;expr2;expr3) stmt; for (i=1;i

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    7/31

    7

    ; ;

    {[stmt]}

    Zero or more

    {a=1;b=1;}

    Lu y : cac muc trong [ ] la co the co hoac khong .

    _while (expr) stmt : xet ieu kien trc roi thc thi bieu thc sau .

    _do stmt while (expr) : thc thi bieu thc roi mi xet ieu kien sau ._Return : dung cho ham co tra ve tr , hoac khong tra ve tr cung c , khi o ch can dung: return; ( ngha la thoat khoi ham tai o ) ._Break : ngat ngang ( thoat khoi ) vong lap while. _Continue : quay tr ve au vong lap while .

    III / _ CH TH TIEN X LY :_Xem chi tiet tat ca phan HELP , muc pre_processor . ay se gii thieu 1 so ch th thng dungnhat :

    1 /_ #ASM va #ENDASM :_Cho phep at 1 oan ma ASM gia 2 ch th nay , Ch at trong ham . CCS nh ngha san 1 bien 8bit _RETURN_ e ban gan gia tr tra ve cho ham t oan ma Assembly._C u manh e thay the Assmemly . V vay nen han che long ma Assembly vao v thng gay raxao tron dan en sau khi bien dch ma chay sai , tr phi ban nam ro Assembly va oc hieu maAssembly sinh ra thong qua muc C/Asm list ._Khi s dung cac bien khong bank hien tai , CCS sinh them ma chuyen bank t ong cho cac bieno . Neu s dung #ASM ASIS th CCS khong sinh them ma chuyen bank t ong , ban phai t themvao trong ma ASM ._Lu y : ma Assembly theo ung ma tap lenh VDK , khong phai ma kieu MPLAB ._VD :int find_parity (int data) {int count;#asmmovlw 0x8movwf countmovlw 0loop:xorwf data,wrrf data,fdecfsz count,fgoto loop

    movwf _return_#endasm}

    2 / _ #INCLUDE :_Cu phap : #include

    Hay #include filenameFilename : ten file cho thiet b *.h , *.c . Neu ch nh file ng dan khac th them ng dan vao. Luon phai co e khai bao chng trnh viet cho VK nao , va luon at dong au tien ._VD :

    #include // chng trnh s dung cho VK 16F877

    #include < C:\INCLUDES\COMLIB\MYRS232.C >

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    8/31

    8

    3 / _ #BIT , #BYTE , #LOCATE va # DEFINE:

    _ #BIT id = x . yVi id : ten bien x : bien C ( 8,16,32,bit) hay hang so a ch thanh ghi.y : v tr bit trong x tao bien 1 bit at byte x v tr bit y, tien dung kiem tra hay gan tr cho bit thanh ghi . iem khac

    biet so vi dung bien 1 bit t khai bao int1 la : int1 ton 1 bit bo nh , at thanh ghi a muc chnao o do CCS t chon , con #BIT th khong ton them bo nh do id ch la danh nh ai dien cho bitch nh bien x , thay oi gia tr id ( 0 / 1 ) se thay oi gia tr bit tng ng y -> thay oi tr x._VD:#bit TMR1Flag = 0xb.2 //bit c ngat timer1 a ch 0xb.2 (PIC16F877)Khi o TMR1Flag = 0 xoa c ngat timer1Int16 a=35; //a=00000000 00100011#bit b= a.11 //b=0 , neu b=a.0 th b ch v tr LSB ( bit thap nhat , ben trai)Sau o : b=1; //a=00001000 00100011 = 2083

    _Lu y khong dung c : if ( 0xb.2 ) ma phai khai bao nh tren roi dung : if(TMR1Flag)

    _#BYTE id = xX: a ch id : ten bien CGan ten bien id cho a ch (thanh ghi ) x , sau o muon gan hay kiem tra a ch x ch can dung id .Khong ton them bo nh , ten id thng dung ten gi nh chc nang thanh ghi a ch o . Lu yrang gia tr thanh ghi co the thay oi bat ky luc nao do hoat ong chng trnh nen gia tr id cung tthay oi theo gia tr thanh ghi o . Khong nen dung id cho thanh ghi a muc ch nh 1 cach dungbien int8 v CCS co the dung cac thanh ghi nay bat ky luc nao cho chng trnh , neu muon dung

    rieng , hay dung #LOCATE._VD:#byte port_b = 0xc6; // 16F877 :0xc6 la a ch portbMuon port b co gia tr 120 th : port_b=120;#byte status = 0xc3;

    _ # LOCATE id = x_Lam viec nh #byte nhng co them chc nang bao ve khong cho CCS s dung a ch o vao mucch khac . VD: # LOCATE temp = 0xc20 // 0xc20 :thanh ghi a muc chCach sau tng t :Int8 temp ;#locate temp = 0xc20_ S dung #LOCATE e gan bien cho 1 day a ch ke nhau ( cap thanh ghi ) se tien li hn thay vphai dung 2 bien vi #byte .VD : CCP1 co gia tr la cap thanh ghi 0x15 ( byte thap ) va 0x16 ( byte cao ) . e gan tr cho CCP1 :Int16 CCP1;#locate CCP1= 0x15 // byte thap cua CCP1 0x15 , byte cao cua CCP1 0x16Gan tr cho CCP1 se t ong gan vao ca 2 thanh ghiCCP1 = 1133 ; // = 00000100 01101101 0x15 = 00000100 , 0x16 = 01101101

    _# DEFINE id textText : chuoi hay so . Dung nh ngha gia tr .

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    9/31

    9

    VD : #define a 12345

    4 / _ # DEVICE :# DEVICE chip optionchip : ten VK s dung , khong dung tham so nay neu a khai bao ten chip # include .option : toan t tieu chuan theo tng chip:

    * = 5 dung pointer 5 bit ( tat ca PIC )* = 8 dung pointer 8 bit ( PIC14 va PIC18 )* = 16 dung pointer 16 bit ( PIC14 ,PIC 18)ADC = x s dung ADC x bit ( 8 , 10 , . . . bit tuy chip ) , khi dung ham read_adc( ) , se tra

    ve gia tr x bit .ICD = true : tao ma tng thch debug phan cng MicrochipHIGH_INTS = TRUE : cho phep dung ngat u tien cao

    _Khai bao pointer 8 bit , ban s dung c toi a 256 byte RAM cho tat ca bien chng trnh ._Khai bao pointer 16 bit , ban s dung c het so RAM co cua VDK ._Ch nen dung duy nhat 1 khai bao #device cho ca pointer va ADC .VD :#device * = 16 ADC = 10

    5 / _ # ORG :# orgstart , end# orgsegment#orgstart , end { }

    Start , end: bat au va ket thuc vung ROM danh rieng cho ham theo sau , hoac e rieng khong dung.

    VD :Org 0x30 , 0x1FVoid xu_ly( ){

    } // ham nay bat au a ch 0x30

    org 0x1E00anotherfunc( ){

    } //ham nay bat au tuy y 0x1E00 en 0x1F00

    Org 0x30 , 0x1F { }

    // khong co g ca at trong vung ROM nay_Thng th khong dung ORG .

    6 / _ # USE :# USE delay( clock = speed )Speed : gia tr OSC ma ban dung . VD: dung thach anh dao ong 40Mhz th :#use delay( clock = 40000000)_Ch khi co ch th nay th trong chng trnh ban mi c dung ham delay_us ( ) va delay_ms( ) .

    #USE fast_io ( port)Port : la ten port :t A-G ( tuy chip )

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    10/31

    10

    _Dung cai nay th trong chng trnh khi dung cac lenh io nh output_low() , . . . no se set ch vi 1lenh , nhanh hn so vi khi khong dung ch th nay._Trong ham main( ) ban phai dung ham set_tris_x( ) e ch ro chan vao ra th ch th tren mi cohieu lc , khong th chng trnh se chay sai ._Khong can dung neu khong co yeu cau g ac biet .VD : # use fast_io( A )

    #USE I2C ( options )_Thiet lap giao tiep I2C.Option bao gom cac thong so sau, cach nhau bi dau phay :Master : chip che o masterSlave : chip che o slaveSCL = pin : ch nh chan SCLSDA = pin : ch nh chan SDAADDRESS =x : ch nh a ch che o slaveFAST : ch nh FAST I2CSLOW : ch nh SLOW I2CRESTART_WDT : restart WDT trong khi ch I2C_READ( )FORCE_HW : s dung chuc nang phan cng I2C ( neu chip ho tr )NOFLOAT_HIGH : khong cho phep tn hieu float high ( ??? ) , tn hieu c lai t thap len cao.SMBUS : bus dung khong phai bus I2C , nhng la cai g o tng t ._VD :#use I2C ( master , sda=pin_B0 , scl = pin_B1 )#use I2C (slave , sda= pin_C4 , scl= pin_C3 , address = 0xa00 , FORCE_HW )

    #USE RS232 ( options )_Thiet lap giao tiep RS232 cho chip ( co hieu lc sau khi nap chng trnh cho chip , khong phaigiao tiep RS232 ang s dung e nap chip ) .Option bao gom :BAUD = x : thiet lap toc o baud rate : 19200 , 38400 , 9600 , . . .PARITY = x : x= N ,E hay O , vi N : khong dung bit chan le .XMIT = pin : set chan transmit ( chuyen data)RCV = pin : set chan receive ( nhan data )_Cac thong so tren hay dung nhat , cac tham so khac se bo sung sau.

    VD :#use rs232(baud=19200,parity=n,xmit=pin_C6,rcv=pin_C7)

    7 / _ Mot so ch th tien x ly khac :#CASE : cho phep phan biet ch hoa / thng trong ten bien , danh cho nhng ai quen lap trnh C .

    #OPT n :vi n=0 9 : ch nh cap o toi u ma , khong can dung th mac nh la 9 ( very toi u ) .

    #PRIORITY ints : vi ints la danh sach cac ngat theo th t u tien thc hien khi co nhieu ngat xay

    ra ong thi , ngat ng au se la ngat u tien nhat , dung ngat nao a ngat o vo . Ch can dungneu dung hn 1 ngat . Xem cu the phan ngat .VD : #priority int_CCP1 , int_timer1 // ngat CCP1 u tien nhat

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    11/31

    11

    MOT SO VAN E QUAN TRONG KHAC xem chi tiet trong phan HELP :_Bieu thc : xem HELP->Expressions , trong o : bieu th so trong C:123 : so decimal 0x3 , 0xB1 : so hex 0b100110 : so binary

    a : ky tabcd : chuoi , ky t null c them pha sau_Cac toan t C : xem Operators>= , < = , = = , != ( khong bang )&& : and || : or ! : not ( ao cua bit , khong phai ao cua byte )>>n : dch trai n bit

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    12/31

    12

    _Dch phai (trai ) 1 bit vao 1 mang hay 1 cau truc . a ch co the la a ch mang hay a ch tro ticau truc ( kieu nh &data) . Bit 0 byte thap nhat la LSB .

    2 / Rotate_right () , rotate_left ()_Noi chung 4 ham nay t s dung .

    3 /Bit_clear ( var , bit )Bit_set ( var , bit )

    _Bit_clear ( ) dung xoa ( set = 0 ) bit c ch nh bi v tr bit trong bien var ._Bit_set ( ) dung set=1 bit c ch nh bi v tr bit trong bien var ._var : bien 8 , 16 , 32 bit bat ky ._bit : v tr clear ( set ) : t 0-7 ( bien 8 bit) , 0-15 ( bien 16 bit ) , 0-31 (bien 32 bit ) ._Ham khong tra ve tr .VD :

    Int x;X=11 ; //x=1011Bit_clear ( x ,1 ) ; // x= 1001b = 9

    4 /Bit_test ( var , bit ) :_Dung kiem tra v tr bit trong bien var ._Ham tra ve 0 hay 1 la gia tr bit o trong var ._var : bien 8, 16 ,32 bit ._bit : v tr bit trong var ._Gia s ban co bien x 32 bit em t 0 len va muon kiem tra xem no co ln hn 4096 khong ( 4096=2^12 =1000000000000b) :If ( x >= 4096) . . . // phep kiem tra nay mat ~5 usTrong 1 vong lap , viec kiem tra thng xuyen nh vay se lam mat 1 thi gian ang ke . e toi u ,ch can dung : if ( bit_test ( x, 12 ) ch mat ~ 0.4 us . ( 20 Mhz thach anh ) ._Kiem tra em len ti nhng gia tr ac biet ( 2^ i) th dung ham nay rat tien li.

    5 /Swap ( var ) :_var : bien 1 byte_Ham nay trao v tr 4 bit tren vi 4 bit di cua var , tng ng var =( var>>4 ) | ( var

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    13/31

    13

    _Tra ve gia tr 16 bit ket hp t 2 bien 8 bit varhigh va varlow . Byte cao la varhigh , thap la varlow.

    8 /make32 ( var1 , var2 , var3 , var4 ) :_Tra ve gia tr 32 bit ket hp t cac gia tr 8 bit hay 16 bit t var1 ti var4 . Trong o var2 en var4co the co hoac khong . Gia tr var1 se la MSB , ke tiep la var2 , . . .Neu tong so bit ket hp t hn 32

    bit th 0 c them vao MSB cho u 32 bit .VD:Int a=0x01 , b=0x02 , c=0x03 , d=0x04 ; // cac gia tr hexInt32 e ;e = make32 ( a , b , c , d ); // e = 0x01020304e = make32 ( a , b , c , 5 ) ; // e = 0x01020305e = make32 ( a, b, 8 ); // e = 0x00010208e = make32 ( a ,0x1237 ) ; // e = 0x00011237

    III / CAC HAM DELAY :_e s dung cac ham delay , can co khai bao tien x ly au file , VD : s dung OSC 20 Mhz , bancan khai bao : #use delay ( clock = 20000000 )_Ham delay khong s dung bat ky timer nao . Chung thc ra la 1 nhom lenh ASM e khi thc thi tau ti cuoi th xong khoang thi gian ma ban quy nh . Tuy thi gian delay yeu cau dai ngan maCCS sinh ma phu hp . co khi la vai lenh NOP cho thi gian rat nho . Hay 1 vong lap NOP . Hoacgoi ti 1 ham phc tap trong trng hp delay dai . Cac lenh noi chung la v van sao cho u thigian quy nh la c . Neu trong trong thi gian delay lai xay ra ngat th thi gian thc thi ngatkhong tnh vao thi gian delay , xong ngat no quay ve chay tiep cac dong ma cho ti khi xong ham

    delay . Do o thi gian delay se khong ung ._Co 3 ham phuc vu :

    1 / delay_cycles (count )Count : hang so t 0 255 , la so chu ky lenh .1 chu ky lenh bang 4 chu ky may ._Ham khong tra ve tr . Ham dung delay 1 so chu ky lenh cho trc .VD : delay_cycles ( 25 ) ; // vi OSC = 20 Mhz , ham nay delay 5 us

    2 / delay_us ( time )Time : la bien so th = 0 255 , time la 1 hang so th = 0 -65535 .

    _Ham khong tra ve tr ._Ham nay cho phep delay khoang thi gian dai hn theo n v us ._Quan sat trong C / asm list ban se thay vi time dai ngan khac nhau , CSS sinh ma khac nhau .

    3 / delay_ms (time )Time = 0-255 neu la bien so hay = 0-65535 neu la hang so ._Ham khong tra ve tr ._ Ham nay cho phep delay dai hn na .VD :Int a = 215;

    Delay_us ( a ) ; // delay 215 usDelay_us ( 4356 ) ; // delay 4356 usDelay_ms ( 2500 ) ; // delay 2 . 5 s

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    14/31

    14

    CHNG 3 :

    XX LLYY AADDCC ,, CCAACC HHAAMM II //OO TTRROONNGG CC

    I / _ X LY ADC :_PIC co nhieu chan phuc vu x ly ADC vi nhieu cach thc khac nhau . e dung ADC , ban phaico khai bao #DEVICE cho biet dung ADC may bit ( tuy chip ho tr , thng la 8 hay 10 bit hoachn) . Ban can lu y la: 1 VDK ho tr ADC 10 bit th gia tr vao luon la 10 bit , nhng chia cho 4 thcon 8 bit . Do o 1 bien tr chiet ap cap cho ngo vao ADC ma ban chon che o 10 bit th se rat nhayso vi che o 8 bit ( v 2 bit cuoi co thay oi cung khong anh hng gia tr 8 bit cao va do o ket qua8 bit ADC t thay oi ) , neu chng trnh co che o kiem tra ADC e cap nhat tnh toan , hay dungngat ADC , th no se chay hoai thoi . Dung ADC 8 bit se han che ieu nay . Do o ma CCS cungcap chon la ADC 8 hay 10 bit tuy muc ch s dung .

    Cau hnh bo ADC :_Thong dung nhat khi dung ADC la s dung 1 bien tr , ieu chnh bi 1 nut van , qua o thu c 1ien ap nho hn ien ap tham chieu ( Vref ap max ) , a vao chan bien oi ADC , ket qua cho 1gia tr so ADC 8 bit ( 0-255 ) hay ADC 10 bit (0-1023 ) . Thng th ap Vref lay bang Vdd ( 5V ) (??)_Tren cac PIC co ngo AVdd va AVss ( PIC 18 ) , thng th ban luon noi AVdd ti Vdd , AVss tiVss e am bao hoat ong cho lap trnh qua ICD 2 .Cac ham sau phuc vu ADC :

    1 / Setup_ADC ( mode ) :

    _Khong tra ve tr . Dung xac nh cach thc hoat ong bo bien oi ADC . Tham so mode tuy thuocfile thiet b *.h co ten tng ng ten chip ban ang dung , nam trong th muc DEVICES cua CCS .Muon biet co bao nhieu tham so co the dung cho chip o , ban m file tng ng oc , tm ti chocac nh ngha cho chc nang ADC dung cho chip o tng ng vi ham nay . Sau ay la cac gia trmode cua 16F877 , ( 1 so khac co the khong co hoac co them nh 16F877A co them 1 so th laADC_CLOCK_DIV_2/4/8/16/32/64 . . .) :

    ADC_OFF : tat hoat ong ADC ( tiet kiem ien , danh chan cho hoat ong khac ) .ADC_CLOCK_INTERNAL : thi gian lay mau bang xung clock IC ( mat 2-6 us ) thng la

    chung cho cac chip .ADC_CLOCK_DIV_2 : thi gian lay mau bang xung clock / 2 ( mat 0.4 us tren thachanh 20MHz )ADC_CLOCK_DIV_8 : thi gian lay mau bang xung clock / 8 ( 1.6 us )ADC_CLOCK_DIV_32 : thi gian lay mau bang xung clock / 32 ( 6.4 us )

    2 / Setup_ADC_ports ( value)_Xac nh chan lay tn hieu analog va ien the chuan s dung . Tuy thuoc bo tr chan tren chip , so

    chan va chan nao dung cho ADC va so chc nang ADC moi chip ma value co the co nhng gia trkhac nhau. Xem file tng ng trong th muc DEVICES e biet so chc nang tng ng chip o .e tng thch chng trnh viet cho phien ban cu , 1 so tham so co 2 ten khac nhau ( nhng cung

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    15/31

    15

    chc nang do nh ngha cung a ch ) , ay dung phien ban 3.227 .Lu y : Vref : ap chuan ,Vdd : ap nguon

    Sau ay la cac gia tr cho value ( ch dung 1 trong cac gia tr ) cua 16F877 :ALL_ANALOGS : dung tat ca chan sau lam analog : A0 A1 A2 A3 A5 E0 E1 E2(Vref=Vdd)

    NO_ANALOG : khong dung analog , cac chan o se la chan I /O .AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF : A0 A1 A2 A5 E0 E1 E2 VRefh=A3AN0_AN1_AN2_AN3_AN4 : A0 A1 A2 A3 A5( ten th giong nhau cho tat ca thiet b nhng 16F877 ch co portA co 5 chan nen A0 , A1 , A2 , A5c dung , A6 , A7 khong co )AN0_AN1_AN3 : A0 A1 A3 , Vref = VddAN0_AN1_VSS_VREF : A0 A1 VRefh = A3AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF : A0 A1 A5 E0 E1 E2 VRefh=A3 ,VRefl=A2 .AN0_AN1_AN2_AN3_AN4_AN5 : A0 A1 A2 A3 A5 E0AN0_AN1_AN2_AN4_AN5_VSS_VREF : A0 A1 A2 A5 E0 VRefh=A3AN0_AN1_AN4_AN5_VREF_VREF : A0 A1 A5 E0 VRefh=A3 VRefl=A2AN0_AN1_AN4_VREF_VREF : A0 A1 A5 VRefh=A3 VRefl=A2AN0_AN1_VREF_VREF : A0 A1 VRefh=A3 VRefl=A2AN0 : A0AN0_VREF_VREF : A0 VRefh=A3 VRefl=A2

    VD : setup_adc_ports (AN0_AN1_AN3 ) ; // A0 , A1 , A3 nhan analog , ap nguon +5V capcho IC se la ien ap chuan .

    3 / Set_ADC_channel ( channel ) :_Chon chan e oc vao gia tr analog bang lenh Read_ADC ( ) . Gia tr channel tuy so chan chcnang ADC moi chip .Vi 16F877 , channel co gia tr t 0 -7 :0-chan A0 1-chan A1 2-chan A2 3-chan A3 4-chan A55-chan E0 6-chan E1 7-chan E2_Ham khong tra ve tr . Nen delay 10 us sau ham nay roi mi dung ham read_ADC ( ) e bao amket qua ung . Ham ch hoat ong vi A /D phan cng tren chip.

    4 / Read_ADC (mode) :_Dung oc gia tr ADC t thanh ghi (/ cap thanh ghi ) cha ket qua bien oi ADC . Lu y ham nayse hoi vong c cho ti khi c nay bao a hoan thanh bien oi ADC ( se mat vai us ) th xong ham ._Neu gia tr ADC la 8 bit nh khai bao trong ch th #DEVICE , gia tr tra ve cua ham la 8 bit ,ngc lai la 16 bit neu khai bao #DEVICE s dung ADC 10 bit tr len ._Khi dung ham nay , no se lay ADC t chan ban chon trong ham Set_ADC_channel( ) trc o .Ngha la moi lan ch oc 1 kenh Muon oi sang oc chan nao , dung ham set_ADC_channel( ) laychan o . Neu khong co oi chan , dung read_ADC( ) bao nhieu lan cung c .

    _mode co the co hoac khong , gom co :

    ADC_START_AND_READ : gia tr mac nhADC_START_ONLY : bat au chuyen oi va tra veADC_READ_ONLY : oc ket qua chuyen oi lan cuoi

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    16/31

    #DEVCE 8 bit 10 bit 11 bit 16 bit

    ADC=8 0-255 0-255 00-255 00-255

    ADC=10 x 0-1023 x x

    ADC=11 x x 0-2047 x

    ADC=16 0-65280 0-65472 0-65504 0-65535

    _16F877 ch ho tr ADC 8 va 10 bit .VD :setup_adc( ADC_CLOCK_INTERNAL );setup_adc_ports( ALL_ANALOG );set_adc_channel(1);while ( input(PIN_B0) ){

    delay_ms( 5000 );value = read_adc();printf("A/D value = %2x\n\r", value);

    }read_adc(ADC_START_ONLY);sleep();value=read_adc(ADC_READ_ONLY);

    _Lu y : tren PIC 18 , cau truc ADC tng oi phc tap , a nang hn nh la cho phep lay 2 maucung luc , . . . cung s dung vi cac ham tren , co nhieu thong so trong file *.h , se e cap sau .

    5 / _ V du :_Chng trnh sau lay ADC 8 bit , oc va xuat ra day led port B , va xuat ra man hnh may tnh ._Ket noi chan tren 16F877 : RA0 la chan lay Analog vao , ap chuan la nguon +5V , mass=0 V

    _Hnh sau trch trong tai lieu thay Nguyen Tan Tien viet T6-2002 .

    5V

    SCO-060

    8

    OUT

    0.1uF

    U1

    PIC16F877

    234567

    3334353637383940

    15161718 23

    242526

    3132

    1

    1314

    1112

    89

    10

    1920 21

    22

    2728

    2930

    RA0RA1RA2RA3RA4RA5

    RB0RB1RB2RB3RB4RB5RB6RB7

    RC0RC1RC2RC3 RC4

    RC5RC6RC7

    GNDVDD

    MCLR

    OSC1OSC2

    VDDGND

    RE0RE1RE2

    RD0RD1 RD2

    RD3

    RD4RD5

    RD6RD7

    0.1uF+

    470uF-25V

    10K

    J1

    to RS232

    1234

    Analog Input

    1 3

    2

    1 2

    R 330

    Digital OutputReset Button

    Osillator20MHz

    10K

    LED

    #include #use delay( clock=20000000 )

    #device *= 16 ADC = 8 // s dung ADC 8 bit , gia tr ADC vao t 0-255#use rs232(baud=19200,parity=n,xmit=pin_C6,rcv=pin_C7)Int8 adc ;

    16

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    17/31

    17

    Main( ){

    Setup_ADC ( ADC_internal ) ;Setup_ADC_ports (AN0);Set_ADC_channel ( 0 ) ;Delay_us (10 ); // delay 10 us

    While (true ){ adc = read_adc ( ) ;Output_B ( adc ) ; // xuat ra port B gia tri bien adcPrintf( gia tri adc la : %u , adc ) ; // in ra man hinh

    }}

    // gia tr bien adc t 0-255 , dung chng trnh Serial port Monitor trong muc Tools cua CCS egiam sat gia tr . Nh thiet lap toc o la 19200 nh khai bao tren .

    II / _ CAC HAM VAO RA TRONG C :_Bao gom cac ham sau :Output_low() Output_high()Output_float() Output_bit()Input() Ouput_X()Input_X() port_b_pullups()Set_tris_X()

    1 /Output_low ( pin ) , Output_high (pin ) :_Dung thiet lap mc 0 ( low, 0V ) hay m c 1 ( high , 5V ) cho chan IC , pin ch v tr chan ._Ham nay se at pin lam ngo ra , xem ma asm e biet cu the ._Ham nay dai 2-4 chu ky may . Cung co the xuat xung dung set_tris_X() va #use fast_io.VD : chng trnh sau xuat xung vuong chu ky 500ms , duty =50% ra chan B0 ,noi B0 vi 1 led selam nhap nhay led .#include #use delay( clock=20000000)Main(){ while(1)

    { output_high(pin_B0) ;Delay_ms(250) ; // delay 250msOutput_low (pin_B0);Delay_ms (250 );

    }}

    2 /Output_bit ( pin , value ) :_pin : ten chan value : gia tr 0 hay 1

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    18/31

    18

    _Ham nay cung xuat gia tr 0 / 1 tren pin , tng t 2 ham tren . Thng dung no khi gia tr ra tuythuoc gia tr bien 1 bit nao o , hay muon xuat ao cua gia tr ngo ra trc o .VD :Khai bao int1 x; // x mac nh = 0Trong ham main :Main()

    { while (1 ){ output_bit( pin_B0 , !x ) ;

    Delay_ms(250 );}

    }

    Chng trnh tren cung xuat xung vuong chu ky 500ms ,duty =50%

    3 / Output_float ( pin ) :_Ham nay set pin nh ngo vao , cho phep pin mc cao nh 1 cc thu h (This will allow the pin tofloat high to represent a high on an open collector type of connection , dch nh vay khong biet ung

    khong na ? , chac la thiet lap nh ngo vao tong tr cao th phai ) .

    4 / Input (pin ) :_Ham nay tra ve gia tr 0 hay 1 la trang thai cua chan IC . Gia tr la 1 bit

    5 / Output_X ( value ) :_X la ten port co tren chip . Value la gia tr 1 byte ._Ham nay xuat gia tr 1 byte ra port . Tat ca chan cua port o eu la ngo ra .VD :Output_B ( 212 ) ; // xuat gia tr 11010100 ra port B

    6 / Input_X ( ) :_X : la ten port ( a, b ,c ,d e ) ._Ham nay tra ve gia tr 8 bit la gia tr ang hien hu cua port o .VD : m=input_E();

    7 / Port_B_pullups ( value ) :_Ham nay thiet lap ngo vao port B pullup ( ien tr keo len ?) . Value =1 se kch hoat tnh nang nayva value =0 se ngng ._Ch cac chip co port B co tnh nang nay mi dung ham nay .

    8 / Set_tris_X ( value ) :_Ham nay nh ngha chan IO cho 1 port la ngo vao hay ngo ra. Ch c dung vi #use fast_IO . Sdung #byte e tao bien ch en port va thao tac tren bien nay chnh la thao tac tren port ._Value la gia tr 8 bit . Moi bit ai dien 1 chan va bit=0 se set chan o la ngo vao , bit= 1 set chano la ngo ra .VD : chng trnh sau cho phep thao tac tren portB 1 cach de dang:#include < 16F877.h >#use delay(clock=20000000)

    #use Fast_IO( B )#byte portB = 0x6 // 16F877 co port b a ch 6h#bit B0 = portB. 0 // bien B0 ch en chan B0#bit B1=portB.1 // bien B1 ch en chan B1

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    19/31

    19

    #bit B2=portB.2 // bien B2 ch en chan B2#bit B3=portB.3 // bien B3 ch en chan B3#bit B4=portB.4 // bien B4 ch en chan B4#bit B5=portB.5 // bien B5 ch en chan B5#bit B6=portB.6 // bien B6 ch en chan B6#bit B7=portB.7 // bien B7 ch en chan B7

    Main(){ set_tris_B ( 126 ) ; //portB=01111110 b

    // B0 la ngo vao , thng lam ngat ngoai//B1 . . . B6 la ngo ra , Vd lam 6 ngo ra ieu che PWM//B7 la ngo vao , Vd la nhan tn hieu cho phep chang han

    if ( B7 ) //neu ngo vao chan B7 la 1 th xuat 3 cap xung oi nghch{ B1 = 1 ;

    B2 = 0 ;B3 = 1 ;B4 = 0 ;B5 = 1 ;B6 = 0 ;

    }Else B1=B2=B3=B4=B5=B6= 0;

    }

    _Lu y :_Set_tris_B (0 ) : port B =00000000 : tat ca chan portB la ngo ra

    _set_tris_B ( 1 ) : portB = 00000001 : ch B0 la ngo vao , con lai la ngo ra_set_tris_B ( 255 ) : portB=11111111: tat ca chan portB la ngo vao toi cung tng nham lan khi ngh set_tris_B(1) la set tat ca la ngo vao , rat tai hai . Ban nen

    dung gia tr dang nh phan cho de . VD : set_tris_B ( 00110001b ) ;

    _en ay la ban co the viet nhieu chng trnh thu v roi o. Vd nh la dung ADC e ieu chnhtoc o nhap nhay cua day en led , truyen gia tr 8 bit t chip nay sang chip khac , . . ._Chng trnh VD sau dung ADC qua chan A0 e ieu chnh toc o nhap nhay day en led noi vaoport B , co the dung fast_io hay ham output_B () e xuat gia tr eu c . chng trnh dung ham .Neu ngo vao chan C0 =0 th tiep tuc nhan ADC va xuat ra portB, C0=1 th khong xuat#include #device *=16 ADC= 8#use delay( clock =20000000)Int8 ADC_delay ;

    Void hieu_chinh ( ){ ADC_delay = read_adc ( 0 ) ;

    Output_B ( 0) ; //portB=00000000Delay_ms ( ADC_delay );

    Output_B ( 255 ) ; // portB= 11111111Delay_ms ( ADC_delay );}

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    20/31

    20

    Main(){

    setup_adc_ports(AN0_AN1_AN3); // A0 , A1 va A3 la chan analog , ta ch can dung A0 laytn hieu

    setup_adc(adc_clock_internal);set_adc_channel ( 0 ); // chon oc ADC t chan A0

    while(1){ hieu_chinh ( ) ;If ( input ( pin_C0 ){ output_B (0 );

    Break ; // thoat khoi vong lap while nho}

    } //while} // main

    CHNG 4 :

    TTRRUUYYEENN TTHHOONNGG VVII PPCC QQUUAA CCOONNGG CCOOMM--RRSS223322-- XX LLYY CCHHUUOOII

    _Chng nay se giup ban viet chng trnh co s dung giao tiep PC . ieu nay rat can thiet khi banmuon VK khi hoat ong co the truyen d lieu cho PC x ly , hoac nhan gia tr t PC e x ly vaieu khien ( dung PC ieu khien ong c , nhiet o , hay bien PC thanh dung cu o cac ai lngien , Oscilocope , . . .) ._Viet chng trnh lap trnh cho VK e giao tiep may tnh la cong viec rat phc tap khi viet bangASM , rat kho hieu oi vi nhng ngi mi bat au lap trnh . ac biet la khi viet cho nhng conVK khong ho tr t phan cng ( 8951 th phai (?) ) . That may la phan ln PIC hien nay eu ho trphan nay nen viec lap trnh co de dang hn . Nhng neu chng trnh cua ban yeu cau truyen haynhan nhieu loai d lieu ( so 8 , 16 ,32 bit , dng , am , chuoi , . . .) th viec viet chng trnh x ly

    va phan loai chung la ieu kinh d .

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    21/31

    21

    _Nhng neu lap trnh ASM cho van e nay roi th ban se thay sao de dang qua vay khi giai quyetvan e nay vi C khi dung CCS . Rat n gian ! CCS cung cap rat nhieu ham phuc vu cho giao tiepqua RS232 ( cong COM ) va vo so ham x ly chuoi . Chng nay se giai quyet ieu o ._Mot yeu to quan trong la khi nao th VK biet PC truyen data co the lap trnh bat tay bang phanmem hay n gian la dung ngat . Cac v du ve ngat , xem phan ngat .

    I / _TRUYEN THONG VI PC QUA CONG COM :_e s dung giao thc nay , phai co 2 khai bao nh VD sau :#use delay (clock = 40000000 ) // VDK ang dung OSC 40Mhz#use rs232 (baud=19200 , parity=n , xmit=pin_C6 , rcv=pin_C7 )

    // baud= 19200 , khong chan le , chan truyen C6 , chan nhan C7_Cac ham lien quan :Printf ( )Getc ( ) putc ( )Getch ( ) putchar ( )

    Getchar ( ) fputc ( )Fgetc ( ) puts ( )Gets ( ) fputs ( )Fgets ( )Kbhit ( )Assert ( ) mi tren CCS 3.222Perror ( ) mi tren CCS 3.222Set_uart_speed ( )Setup_uart ( )

    _Tat ca cac ham tren oi hoi phai khai bao ch th tien x ly #use RS232 ( . . . . .) ._Ham perror ( ) oi hoi them #include . Ham assert() oi hoi them #include .

    1 /printf ( string )Printf ( cstring , values . . . )

    _Dung xuat chuoi theo chuan RS232 ra PC ._string la 1 chuoi hang hay 1 mang ky t ( ket thuc bi ky t null ) ._value la danh sach cac bien , cach nhau bi dau phay .

    _Ban phai khai bao dang format cua value theo kieu %wt .Trong o w co the co hoac khong , cogia tr t 1-9 ch ro co bao nhieu ky t c xuat ra ( mac nh khong co th co bao nhieu ra baynhieu ), hoac 01-09 se chen them 0 cho u ky t hoac 1.1-1.9 cho trng hp so thc . con t la kieugia tr ._ t co the la :C : 1 ky tS : chuoi hoac ky tU : so 8 bit khong daux : so 8 bit kieu hex ( ky t viet thng ,VD : 1ef )X : so 8 bit kieu hex ( ky t viet hoa ,VD : 1EF )D : so 8 bit co daue : so thc co luy tha VD : e12f : so thc

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    22/31

    22

    Lx : so hex 16 /32 bit ( ky t viet thng )LX : hex 16 /32 bit ( ky t viet hoa )Lu : so thap phan khong dauLd : so thap phan co dau% : ky hieu %VD :

    Specifier Value=0x12 Value=0xfe%03u 018 254

    %u 18 254

    %2u 18 *

    %5 18 254

    %d 18 -2

    %x 12 Fe

    %X 12 FE

    %4X 0012 00FE

    * Result is undefined - Assume garbage.

    VD :Int k =6 ;Printf ( hello );Printf ( %u , k );

    2 /KBHIT ( ) :_Thng th chung ta dung RC6 va RC7 cho RX va TX trong giao tiep cong COM , VDK PIC trangb phan cng phuc vu viec nay vi thanh ghi gi va nhan va cac bit bao hieu tng ng . Do o khidung RS232 ho tr t phan cng th KHBIT ( ) tra ve TRUE neu 1 ky t a c nhan ( trong boem phan cng ) va san sang cho viec oc , va tra ve 0 neu cha san sang ._Ham nay co the dung hoi vong xem khi nao co data nhan t RS232 e oc .

    CHNG 6 :

    GGIIAAOO TTIIEEPP SSPPII II22CC VVAA PPAARRAALLLLEELL

    I / GIAO TIEP SPI :_ay la giao tiep de dung nhat , n gian nhat , toc o cao nhat trong nhom . hoat ong theo c chehand-shaking , bat tay . Gia s co 2 VDK , th 1 la master , 1 la slave . Khi master truyen 1 byte choslave , no phat 8 xung clock qua ng clock noi ti slave , ong thi truyen 8 bit data t chan SDO

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    23/31

    23

    ti chan SDI cua slave . Khong kiem tra chan le , loi . Do o Vdu neu ang truyen c 3 bit mamaster reset hay h day clock th data b mat , slave se khong nhan u 8 bit va do o neu tiep tucnhan no se lay 5 bit byte ke tiep a vao thanh ghi nhan e u 8 bit ( va e kch ngat ) . T o tri la moi gia tr nhan la sai bet tr phi cham dt va sau o thiet lap lai giao tiep nay ( ca hai ) ._Giao tiep nay can t nhat 2 day tr len . Neu 1 VDK ch can gi data th ch can day clock va SDO.VDK nhan se dung SDI va day clock . Day clock la noi chung .

    _Neu co gi va nhan ca 2 VDK th : day clock chung , master co SDO noi ti SDI cua slave , SDOcua slave noi ti SDI cua master ._Neu master can truyen data cho nhieu slave tr len th SDO master noi ti cac SDI cua slave ._Chan SS la slave select ._SPI hoat ong t phan cng , v no co san thanh ghi gi va nhan , nhan u gia tr th co c ngatphuc vu ._Danh sach cac ham :

    1 / Setup_spi (mode )Setup_spi2 (mode )

    _Dung thiet lap giao tiep SPI . Ham th 2 dung vi VDK co 2 bo SPI ._Tham so mode :la cac hang so sau , co the OR gia cac nhombi dau |

    SPI_MASTER , SPI_SLAVE , SPI_SS_DISABLED SPI_L_TO_H , SPI_H_TO_LSPI_CLK_DIV_4 , SPI_CLK_DIV_16 , SPI_CLK_DIV_64 , SPI_CLK_T2

    _Nhom 1 xac nh VDK la master hay slave ,slave select_Nhom 2 xac nh clock canh len hay xuong ._Nhom 3 xac nh tan so xung clock , SPI_CLK_DIV_4 nga la tan so = FOSC / 4 , tng ng 1 chuky lenh / xung ._Ham khong tra ve tr .

    _Ngoai ra ,tuy VDK ma co them 1 so tham so khac , xem file * .h .

    2 / Spi_read ( data )Spi_read2 ( data )

    _data co the co them va la so 8 bit . Ham th 2 cho bo SPI th 2 ._Ham tra ve gia tr 8 bit value = spi_read ( )_Ham tra ve gia tr oc bi SPI . Neu value phu hp SPI_read ( ) th data se c phat xung ngoaiva data nhan c se c tra ve . Neu khong co data san sang , spi_read ( ) se i data ._Ham ch dung cho SPI hardware ( SPI phan cng ) .

    3 / spi_write ( value )Spi_write2 ( value )

    _Ham khong tra ve tr . value la gia tr 8 bit ._Ham nay gi value ( 1 byte ) ti SPI , ong thi tao 8 xung clock ._ Ham ch dung cho SPI hardware ( SPI phan cng ) .

    4 / spi_data_is_in ( )Spi_data_is_in2 ( )

    _Ham tra ve TRUE ( 1 ) neu data nhan c ay u ( 8 bit ) t SPI , tra ve false neu cha nhan u .

    _Ham nay dung kiem tra xem gia tr nhan ve SPI a u 1 byte cha e dung ham spi_read ( ) ocdata vao bien .

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    24/31

    CHNG 7 :

    MMOODDUULLEE PPWWMM //CCAAPPTTUURREE //CCOOMMPPAARREE

    I / _TONG QUAT PHAN CNG :_Module nay co mat hau het cac dong PIC 16 va PIC 18 , va thng ch co 2 chan cho module nay

    , ky hieu la CCP1 / CCP2 . Can phan biet vi module PWM chuyen dung tren PIC 18 va dsPIC vonco 6 ti 8 chan PWMx , cung phuc vu cho ieu che o rong xung nhng chuyen dung cho ieu khienong c AC . Mot so PIC 14 va PIC 18 co module ECCP cung dung module CCP nay nhng laichuyen dung cho ieu khien bo bien oi ap DC->DC , dung cho ieu khien ong c DC . aycha e cap en ECCP . Ch e cap CCP , va thng ch co 2 chan la CCP1 va CCP2 ._Module co 3 chc nang va khi hoat ong ta ch dung c 1 chc nang ng vi 1 chan . Ngoai raneu khong dung th co the set no thanh chan I /O ._Moi module cha 1 thanh ghi 16 bit , la ket hp cua 2 thanh ghi 8 bit : CCPR1L(byte thap ) vaCCPR1H ( byte cao ) cua CCP1 , CCPR2L va CCPR2H cua CCP2 ._Moi chc nang cua CCPx eu oi hoi 1 bo em e hoat ong : Capture / Compare oi hoi Timer1 ,

    con PWM oi hoi Timer2 .

    Bang tren ( trong datasheet PIC16F877 ) cho thay : neu ca 2 module dung cung chc nang Capture

    th se dung chung bo em timer1 , ngha la moi hoat ong va ieu chnh Timer1 eu anh hng tica 2 module . Tng t neu dung cung chc nang PWM se dung chung Timer2 . Con neu 1 modulela Capture , module kia la Compare th phai lu y la chc nang compare co the clear Timer1 , va doo cung anh hng chc nang con lai . Con 2 TH cuoi th khong co van e g ._ che o Capture : moi khi co canh len cua xung vao chan CCPx th gia tr Timer1 (16 bit )se ccopy vao thanh ghi CCP ( 16 bit ) ._ che o Compare : khi gia tr nap CCP bang gia tr em Timer1 th cac s kien c ch nhtrc xay ra :chan CCPx c lai ra mc thap / cao / khong co g nhng co ngat hay bien oi AD ._Che o PWM ( pulse width modulation ieu che o rong xung ) : xuat xung vuong bang phan

    cng ._Ban s dung ham setup_ccpX() e xac nh chc nang muon dung tren module CCP . tham so cuthe co the tra trong HELP , hoac xem tng TH cu the di ay .

    II / _CHE O CAPTURE :_Dung e xac nh toc o quay cua motor . Gia s ta co 1 thiet b o toc o quay ( cam bien Hall )ma moi khi motor quay 1 vong th thiet b phat 1 xung vuong ( canh len roi canh xuong hay xungmc 1 , hay canh xuong roi canh len tc la xung mc 0 ) . ay ta gia thiet xung mc 1 . Xung naydan vao module capture ( co the qua cach ly an toan ) va gia thiet ta chon che o bat canh len .Ngha la c moi 1 canh len cua xung vao , gia tr cua timer1 copy vao CCP . V motor khong phaiquay eu nen ta thng chon so lan capture la vai chuc lan . ( hnh nh la vay ??? )

    24

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    25/31

    _Viec Capture thng i kem 1 cai ham ngat . Cach thc chng trnh hoat ong nh sau : xung vaoCapture se kch ngat , trong ham ngat ,ta lay gia tr CCPx tnh ra c thi gian cho 1 vong quay,cong don no vao 1 bien e tnh thi gian tong , set Timer1 ve 0 , tang gia tr bien em vong len 1 ,

    roi thoat ngat . Vi 1 ong c ang chay khoang 1200vong / phut , tuy thuoc vao tan suat cap nhatgia tr so vong quay ( e hien th ra LED 7 oan hay LCD ) ban can o 1 so lng vong nhat nhe am bao chnh xac , VD o 1500 vong , tc la bien em phai em ti 1500 , tnh tong thi giano , VD la 80 s , th toc o ong c = ( 1500 / 80 ) * 60 = 1125 vong / phut ._Hay quen module nay i neu ban dung 1 encoder e o toc , von phat ra ti 500-2000 xung / vong.Ngha la can chng o lan ngat e ch o 1 vong VDK se phai dung toan bo thi gian hoat onge em , co khi khong kp . Viec chng trnh chnh khong the chay v ngat c xay ra lien tuc goi latran , no se chang lam c g ca . e giai quyet , ngi ta dung module QEI hay IC3 von ch cotren PIC 18 nh 18F4431 .

    _Capture con dung e o o rong xung . S dung CCP1 lay canh len , CCP2 lay canh xuong cuacung 1 xung ,tc la 2 CCP noi nhau . 1 xung vuong i vao kch CCP1 trc ( canh len ), thu c giatr timer luc , canh xuong cua xung kch CCP2 thu c gia tr timer luc xuong canh . Lay 2 gia trtr nhau c o rong xung . ch can 1 ngat CCP2 la u .

    III / _CHE O COMPARE :_Hoat ong : khi timer1 em len ti khi bang gia tr ma ta tr trong CCPx, th chan CCPx se xuat ramc cao / thap / hay khong co nhng co ngat ._ng dung : khong ro . Ban nao biet bo sung .

    IV / _CHE O PWM :_Xuat chuoi xung vuong , o rong hieu chnh c de dang . Thng dung e ieu chnh ien apDC . Xung ra se ong cat 1 linh kien nh la SCR, vi o rong xung xac nh se tao ra 1 ien aptrung bnh xac nh . Thay oi o rong xung se thay oi ien ap nay , do o co the dung ieu khienong c DC nho ( ? ? ?) .

    V / _DANH SACH HAM:_ CCS luon tao san cac ten danh nh C nh la cac bien tro ti CCP1 va CCP2 la : CCP_1 ( 16 bit ), CCP_2 (16 bit ) , CCP_1_HIGH ( byte cao cua CCP1 ) , CCP_1_LOW , CCP_2_HIGH ,

    25

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    26/31

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    27/31

    27

    CHNG 8 :

    LLAAMM VVIIEECC VVII NNGGAATT

    I / C CHE HOAT ONG CUA NGAT :1 / _ Ngat 1 cap :_Tren PIC 14 , 12 ,10 ,tat ca cac ngat ch co 1 cap u tien . Ngha la ngat nao ang c phuc vu thkhong the b ngat bi 1 ngat khac xay ra . C che sinh ma cho ngat cua CCS nh sau : nhay en ach ngat , thng la 004h , sao lu thanh ghi W, STATUS , PCLATCH , FSR, va nhieu th v vankhac, sau o no mi hoi vong xem c ngat nao xay ra th nhay en ham phuc vu ngat o . thchien xong th phuc hoi tat ca thanh ghi tren , roi mi RETFIE thoat ngat . So chu ky thc thi tcho ngat en khi nhay vao ham ngat c 20 chu ky lenh !, nhay ra cung c o ._ieu g xay ra neu chng trnh dung nhieu ngat va khi co ngat th co 2 ngat tr len xay ra ongthi ? Ngha la : 2 ngat xay ra cung luc , hay khi ngat A kch hoat va CCS ang lu cac thanh ghi (

    cha ti hoi vong c ngat ) th ngat B xay ra , d nhien ngat B khong the kch vector ngat nhay ti004h v bit cho phep ngat toan cuc ( GIE ) b khoa t ong khi co ngat , ch co c ngat B bat ma thoi.Sau khi lu cac thanh ghi , chng trnh kiem tra c ngat , ro rang la neu bit nao c kiem tra trcth phuc vu trc , du no xay ra sau . e tranh phuc vu khong ung cho , ban dung #priority e xacnh u tien ngat ( xem phan ch th tien x ly ) . Ngat u tien nhat se luon c hoi vong trc .Saukhi xac nh c ngat can phuc vu , no se thc thi ham ngat tng ng .Xong th xoa c ngat o vathoat ngat . Phuc vu ngat nao xong th ch xoa c ngat o .Neu A u tien hn B th sau khi lam A ,chng trnh xoa c ngat A , nhng c B khong xoa ( v au co phuc vu ) , nen khi thoat ra ngat A ,no se lai ngat tiep ( v c B a bat ), lai hoi vong c ngat t au : neu c A cha bat th xet B, luc

    nay B bat nen phuc vu B , xong th xoa c B va thoat ngat ._Mot chng trnh dung nhieu ngat phai lu y ieu nay , tranh trng hp : ngat xay ra lien tuc (tranngat ) , 1 ngat b ap ng tre , ngat khong ung , . . .

    2 / _ Ngat 2 cap :_Ch co tren PIC 18 ( va dsPIC ) . Co 2 khai niem : ngat u tien thap (low priority) va ngat u tiencao ( high priority ) . 2 vector thc thi ngat tng ng thng la 0008h (high) va 0018h ( low ) . Motngat thap ang c phuc vu se b ngng va phuc vu ngat cao 0008h neu ngat cao xay ra . Ngclai , ngat cao ang xay ra th khong bao gi b ngat bi ngat thap ._Neu viet ham ngat bnh thng , khong oi hoi u tien g th CCS sinh ma e tat ca ham ngat eu

    la ngat u tien cao . Quy trnh thc hien ngat se nh ngat 1 cap tren . #priority van c dung . Sochu ky thc thi t 0008h en khi nhay vao thc thi ham ngat khoang 30 chu ky , xong ham ngat tikhi ket thuc ngat cung mat khoang 30 chu ky lenh ._e s dung ngat 2 cap , khai bao #device phai co high_ints=true . Va ham ngat nao muon u tiencao th them FAST theo sau ch th tien x ly ham o . Lu y : ch co duy nhat 1 ngat c u tiencao , ay co le la han che cua CCS , do cach thc sinh ma .VD : #int_timer1 FAST

    Void xu_ly ( ){ . . .

    }

    _C che sinh ma nh sau : co ngat thap th nhay ti 0018h , sao lu W, STATUS , FSR0/1/2 ,. . . roimi hoi vong c ngat thap . chay xong ham ngat th phuc hoi tat ca va RETFIE 0 . Rieng ngat

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    28/31

    28

    cao khong sinh ma sao lu g ca ma nhay thang vao ham ngat chay luon . Vay th trat lat roi ? Machay sai chang ?_Thc ra khong phai vay . PIC 18 va dsPIC co c che lu sieu toc la FAST STACK REGISTER( xem datasheet ky nhe ) . Khi xay ra ngat bat ky , W, S , BSR t ong lu vao thanh ghi tren , PCcounter lu vao stack . xong ngat th pop ra . Van e cho : khi ngat thap xay ra , FAST STACKREGISTER t ong lu W ,S , BSR , PC -> stack . Trong khi thc hien ham phuc vu ngat th trng

    hp W, S , BSR thay oi la co the ( v vay mi sao lu ch ) . nhng neu xay ra ngat cao vao thiiem o ? FAST STACK REGISTER se b ghi e mat data . Do o , c che sinh ma cua CCS canphai luon ung , ngha la : luon t sao lu rieng W ,S , BSR, va cac thanh ghi FSR na , khi thc thingat thap . Con ngat cao khi chay xong se RETFIE 1 t ong phuc hoi W, S , BSR t FASTSTACK REGISTER . Co 2 trng hp : 1 la ch co ngat cao , th khong co van e g . 2 la ngat caongat 1 ngat thap ang chay . Phan tch se thay rang cho du b ngat trong khi ang sao lu ,hay chakp sao lu , hay a sao lu vao cac bien rieng roi , cuoi cung chng trnh cung quay ra ung a chban au vi cac thanh ghi W, S , BSR nh cu ._Tuan thu nguyen tac ngat cao thc thi tc thi nen CCS ch cho 1 ngat cao duy nhat bat ky hoatong , nen khong sinh ma hoi vong , sao lu them g ca . neu ban muon co nhieu ngat u tien cao ,th phai t viet ma rieng thoi ( khi co ngat cao th hoi vong cac c ngat , dung lenh ORG chiem oanma t 0008h tr i e viet ma x ly rieng , trong chng trnh khong c viet bat ky ham ngat naoke ca ngat thap ma ch viet ham bnh thng , . . . noi chung la t x ly het moi van e ngat , phctap lam ay ) .

    II / KHAI BAO NGAT :_Moi dong VDK co so lng ngat khac nhau : PIC 14 co 14 ngat , PIC 18 co 35 ngat ._Muon biet CCS ho tr nhng ngat nao cho VDK cua ban , m file *.h tng ng , cuoi file ladanh sach cac ngat ma CCS ho tr no . Cach khac la vao CCS -> View -> Valid interrupts , chon

    VDK muon xem , no se hien th danh sach ngat co the co cho VDK o ._Sau ay la danh sach 1 so ngat vi chc nang tng ng :#INT_GLOBAL : ngat chung , ngha la khi co ngat xay ra , ham theo sau ch th nay c thcthi , ban se khong c khai bao them ch th ngat nao khac khi s dung ch th nay . CCS khong sinhbat ky ma lu nao , ham ngat bat au ngay tai vector ngat . Neu bat nhieu c cho phep ngat , co theban se phai hoi vong e xac nh ngat nao . Dung ch th nay tng ng viet ham ngat 1 cach thucong ma thoi , nh la viet ham ngat vi ASM vay .#INT_AD : chuyen oi A /D a hoan tat , thng th khong nen dung#INT_ADOF : I dont know

    #INT_BUSCOL : xung ot bus#INT_BUTTON : nut nhan ( khong biet hoat ong the nao )#INT_CCP1 : co Capture hay compare tren CCP1#INT_CCP2 : co Capture hay compare tren CCP2#INT_COMP : kiem tra bang nhau tren Comparator#INT_EEPROM : hoan thanh ghi EEPROM#INT_EXT : ngat ngoai#INT_EXT1 : ngat ngoai 1#INT_EXT2 : ngat ngoai 2#INT_I2C : co hoat ong I 2C

    #INT_LCD : co hoat ong LCD#INT_LOWVOLT : phat hien ap thap#INT_PSP : co data vao cong Parallel slave

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    29/31

    29

    #INT_RB : bat ky thay oi nao tren chan B4 en B7#INT_RC : bat ky thay oi nao tren chan C4 en C7#INT_RDA : data nhan t RS 232 san sang#INT_RTCC : tran Timer 0#INT_SSP : co hoat ong SPI hay I 2C#INT_TBE : bo em chuyen RS 232 trong

    #INT_TIMER0 : mot ten khac cua #INT_RTCC#INT_TIMER1 : tran Timer 1#INT_TIMER2 : tran Timer 2#INT_TIMER3 : tran Timer 3#INT_TIMER5 : tran Timer 5#INT_OSCF : loi OSC#INT_PWMTB : ngat cua PWM time base#INT_IC3DR : ngat oi hng ( direct ) cua IC 3#INT_IC2QEI : ngat cua QEI#INT_IC1 : ngat IC 1_Ham i kem phuc vu ngat khong can tham so v khong co tac dung ._S dung NOCLEAR sau #int_xxx e CCS khong xoa c ngat cua ham o ._e cho phep ngat o hoat ong phai dung lenh enable_interrupts ( int_xxxx) va enable_interrupts (global ) ._Khoa FAST theo sau #int_xxxx e cho ngat o la u tien cao , ch c 1 ngat thoi , ch co PIC18 va dsPIC .VD : #int_timer0 FAST NOCLEAR

    III / CAC HAM THIET LAP HOAT ONG NGAT :1 / enable_interrupts ( level )_level la ten cac ngat a cho tren hay la GLOBAL e cho phep ngat cap toan cuc ._Moi ngat cua VDK eu co 1 bit c ngat , 1 bit cho phep ngat . Khi co ngat th bit c ngat b set =1,nhng ngat co hoat ong c hay khong tuy thuoc bit cho phep ngat . enable_interrupts (int_xxx )se bat bit cho phep ngat . Nhng tat ca cac ngat eu khong the thc thi neu bit cho phep ngat toancuc = 0 , enable_interrupts( global ) se bat bit nay .VD : e cho phep ngat timer0 va timer1 hoat ong:enable_interrupts (int_timer0);

    enable_interrupts (int_timer1 ) ;enable_interrupts ( global ); // ch can dung 1 lan tr phi muon co thay oi ac biet

    2 / disable_interrupts ( level )_level giong nh tren ._Ham nay vo hieu 1 ngat bang cach set bit cho phep ngat = 0 ._disable_interrupts ( global ) set bit cho phep ngat toan cuc =0 , cam tat ca cac ngat ._Khong dung ham nay trong ham phuc vu ngat v khong co tac dung , c ngat luon b xoa t ong .

    3 / clear_interupt ( level )

    _level khong co GLOBAL ._Ham nay xoa c ngat cua ngat c ch nh bi level .

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    30/31

    4 / ext_int_edge ( source , edge )_Ham nay thiet lap nguon ngat ngoai EXTx la canh len hay canh xuong ._source : nguon ngat . Tren PIC 18 co 3 nguon ngat tren 3 chan EXT0 , EXT1 , EXT2 ng visource = 0 ,1 , 2 . Cac PIC khac ch co 1 nguon EXT nen source = 0 ._edge : chon canh kch ngat , edge = L_TO_H neu chon canh len ( t mc thap chuyen len mccao ) hay H_TO_L neu chon canh xuong .

    IV / CAC CHNG TRNH VD VE NGAT :

    1 / _ #INT_RB :_Sau ay la 1 chng trnh ien hnh ve s dung ngat khi co s thay oi tren chan B4-B7 ._Mo ta : moi khi nhan nut bat ky tren B4-B7 , se kch ngat RB , ham phuc vu ngat co ten RB_LEDc thc thi , ham nay n gian la xuat ra LED v tr tng ng nhng tren portD t D4 D7 .

    _VDK la 16F877 .5V

    1 2

    U1

    PIC16F877

    234567

    3334353637383940

    15161718 23

    242526

    3132

    1

    1314

    1112

    89

    10

    1920 21

    22

    27282930

    RA0RA1RA2RA3RA4RA5

    RB0RB1RB2RB3RB4RB5RB6RB7

    RC0RC1

    RC2RC3 RC4

    RC5

    RC6RC7

    GNDVDD

    MCLR

    OSC1OSC2

    VDDGND

    RE0RE1RE2

    RD0RD1 RD2

    RD3

    RD4RD5RD6RD7

    1 21 2

    10K

    SCO-060

    8

    OUT

    1 2

    J1

    to RS232

    12

    34

    1

    2

    R 330

    ResetButton

    Osillator20MHz

    LED

    Buttons

    #include < 16F877.h >#device PIC16F877 *=16#use delay (clock = 20000000 ) //them khai bao nay neu ctrnh co dung ham delay,OSC=20 Mhz#byte portb = 0x06 //tao ten danh nh portb thay the a ch portB la 06h#byte portd = 0x08 //tao ten danh nh portd thay the a ch portD la 08h

    #INT_RBVoid RB_LED ( ) // ham phuc vu ngat{

    portd=portb;}

    void main ( ){ set_tris_b ( 0xF0 ) ; // portB = 11110000 , B4-B7 la ngo vao , B0-B3 la ngo ra

    set_tris_d ( 0x00 ) ; // portD = 00000000 , D0-D7 eu la ngo raenable_interrupts ( INT_RB ) ; // cho phep ngat RBenable_interrupts ( GLOBAL ) ; // cho phep ngat toan cuc

    // do chng trnh khong lam g khac ngoai viec ch ngat nen vong while nay trong khong30

  • 8/14/2019 Huong Dan Lap Trinh Pic Tieng Viet

    31/31

    while( true ){ //co the them ma x ly ay . . .}

    } //main