Giao Trinh Hop Ngu

download Giao Trinh Hop Ngu

of 124

Transcript of Giao Trinh Hop Ngu

CHNG 1: CU TRC VI IU KHIN PIC 16F 1. Cu trc chung:

Hnh 1: Cu trc chung ca vi iu khin Cu to ca vi iu khin c th chia lm 2 phn c bn nh sau: Phn li: gm b iu khin trung tm c chc nng chy chng trnh (gm cc cu lnh) c np vo trong b nh chng trnh (program memory) trc . Phn ngoi vi: gm c cc timer, b bin i tng t s ADC v cc modun khc

Phn li ca vi iu khin chu trch nhim chy chng trnh trong vi iu khin v qun l ton b cc hot ng khc bao gm hot ng ca ngoi vi. Vi iu khin chy chng trnh gm cc lnh trong b nh chng trnh, a ch ca lnh nm trong thanh ghi b m chng trnh PC, lc khi ng PC=0, sau khi thc hin mt lnh PC=PC+1 do vi iu khin chy lnh k tip trong chng trnh. Lnh vi iu khin trong b nh thc ra c m ha mi lnh thnh 14 bit. Qu trnh thc hin mt lnh gm cc bc: - Lnh trong b nh chng trnh c a vo thanh ghi lnh (a ch ca lnh nm trong thanh ghi PC). Sau lnh a vo b gii m v iu khin gii m lnh. Trn c s , vi iu khin bit lnh l lnh g, thao tc vi d liu no, php thao tc v.v.v Trn c s , nu lnh thao tc vi d liu cha trong cc thanh ghi trong RAM, b iu khin iu khin c d liu trong RAM a vo b x l s hc v logic ALU, cc php ton s c thc hin qua trung gian l thanh ghi lm vic W, qu trnh s kt thc khi kt qu tr d liu v cho chng trnh, tip theo PC tng ln 1 n v, vi iu khin nhy n lnh k tip, tip tc 1 chu k thc hin lnh

CHNG 2: B NH VI IU KHIN PIC 16F877A B nh vi iu khin PIC chia lm 3 phn: B nh chng trnh-FLASH: cha ni dung ca chng trnh chy trong vi iu khin. B m chng trnh PC (Program counter) s thc hin cc lnh cha trong b nh chng trnh ny theo th t t trn xung. B nh d liu tm thi- RAM : Gm 2 phn: cc thanh ghi c bit-SFR (Special Function Register) - y l cc thanh ghi chc nng th hin hoc trng thi, iu khin ca cc khi bn trong vi iu khin PIC (cc thanh ghi trng thi cc chn vi iu khin nh PORTA v.v, Cc thanh ghi Status v.vv, TMR0 cho timer v.v ). Cc thanh ghi mc ch chung GPR (general purpose register) l ni lu cc gi tr tm thi, ni m cc bin chng trnh nm y B nh d liu khng mt ni dung- EEPROM cho php cha cc d liu v d liu ny khng mt ni dung khi mt in (phn ny xem nh thit b ngoi vi) 2.1 B nh chng trnh: B nh chng trnh l ni cha cc lnh c m ha. Qu trnh m ha c thc hin trong khu dch chng trnh trn my tnh ra file hex v np chng trnh vo b nh chng trnh. Mi mt lnh c m ha c cha trong 1 thanh ghi 14 bit trong b nh chng trnh Nh vy khi hnh dung v b nh chng trnh ta c hnh nh sau: Bit 13 0 0 ---1 0 Bit 12 0 0 ----1 1 Bit 11 0 0 ---1 1 Bit 10 1 1 ---1 1 Bit 9 1 0 ---1 0 Bit 8 1 1 ---1 1 Bit 7 0 1 ---0 0 Bit 6 1 0 ---0 1 Bit 5 0 1 ---1 0 Bit 4 1 1 ---1 1 Bit 3 1 1 ---1 0 Bit 2 0 1 ---0 1 Bit 1 1 1 ---1 0 Bit 0 0 0 ---1 1

Chng trnh ca vi iu khin chy theo th t t a ch thp n a ch cao, a ch lnh l ni dung ca thanh ghi b m chng trnh PC (Program Counter). i vi pic16f877a, thanh ghi PC c di 13 bit.

Nu dng 2 bit a ch ta phn bit c 4 a ch: 00,01,10,11 Nu dng 3 bit a ch ta phn bit c 8 a ch: 000,001,010,011,100,101,110,111 ----Suy ra, PC dng 13 bit a ch ta phn bit c 2^13= 2^3 x 2^10=8K a ch Khi bt ngun cho vi iu khin (hay n nt reset chng trnh), PC c xa v 0 Sau khi thc hin xong 1 lnh ni dung ca PC tng ln 1 n v: PC=PC+1 (tr 1 s lnh c bit nh gi chng trnh con, goto v.v.v) Do vi iu khin s thc hin lnh ti a ch cha trong thanh ghi PC nn theo phn tch trn c th ni, vi iu khin thc hin lnh tun t t a ch thp n a ch cao 2.1.1 M ha v gii m lnh: Nh ni trn, khi chng trnh nm trong b nh (tc l c np vo), cc lnh c m ha thnh s nh phn 14 bit cha trong cc thanh ghi ca b nh chng trnh. Vic m ha ny phi tun theo qui lut ca tng loi vi iu khin m c th i vi PIC16F877a th vic m ha phi tun theo qui lut ca nh sn xut microchip qui nh trong qu trnh thc hin 1 lnh, b iu khin bn trong ca vi iu khin PIC c th gii m ( hiu) v thc thi lnh c. tin cho vic theo di, ta a ra bng tng hp cc lnh vi iu khin 16f877a nh sau:

Bng 1: Tp hp tc c cc lnh Ton b tp lnh chia lm 3 dng: Lnh thao tc theo tng byte (Byte-Oriented) Lnh thao tc theo tng bit (Bit-Oriented) Lnh thao tc vi hng s

Trong vi iu khin pic16f877a khng c lnh thc hin tng tc gia 2 thanh ghi, hay gia thanh ghi v mt s (ch y, thanh ghi l thanh ghi nm trong b nh RAM, v d nh PORTA hoc thanh ghi c a ch 0x21 ) gii quyt vn trn, trong vi iu khin pic 16f877a c thanh ghi c bit lm chc nng trung gian cho cc thao tc trn gi l thanh ghi lm vic W (work register) d hiu: Gi s ta c 2 bin a,b (tt nhin l c khai bo v cp pht trong b nh RAM)

Ta mun thc hin php ton: a=a+b Trong PIC khng c lnh thc hin gia 2 thanh ghi a v b. thc hin lnh ny ta phi qua cc bc: W=0 W= w+b (sau lnh ny w=b) a=w+a (sau ln ny a=w+a=b+a) Cc lnh thc hin chui php ton trn nh sau: CLRW ADDWF b,0 ADDWF a,1 Phn c th v lnh s c gii thiu sau, ta tr li vn m ha lnh Cu trc mt lnh: Cu trc mt lnh ph thuc vo 3 dng thao tc theo byte, theo bit , thao tc vi hng s Cc lnh thao tc theo byte Cu trc lnh: o M lnh thanhghi,d y l cc tc ng gia thanh ghi trong RAM v thanh ghi lm vic W, d ch hng kt qu c lu tr. d=0 kt qu cha trong w, d=1 kt qu cha trong thanh ghi V d: cng thanh ghi a vi w, kt qu cha trong a ADDWF a,1 cng thanh ghi a vi w, kt qu cha trong w ADDWF a,0 Cu hi t ra l khi vi iu khin c m lnh trong b nh gm cc con s nh phn lm sao n xc nh c u l lnh cng (ADDWF) u l lnh AND (ANDWF) ? Cu tr li l trong lc m ha lnh mt s bit u tin ca chui 14 bit lnh dnh phn bit cc lnh vi nhau hay cn gi l m ton t hay theo ting anh l opcode i vi lnh theo tc theo byte, vi iu khin dng 6 bit m ha opcode

phn bit khi no kt qu cha trong thanh ghi, khi no th cha trong w, vi iu khin dnh 1 bt hng d: d=0 kt qu cha trong thanh ghi w, d=1 kt qu cha trong thanh ghi. 7 bit cn li trong phn bit lnh tc ng vi thanh ghi no trong b nh RAM 13 OPCODE (ton t) V d: M lnh s l: OPCODE (ton t) 00 0111 d(hng) FILE (a ch thanh ghi) 0 0110000 8 7 d(hng) ADDWF 6 FILE (a ch thanh ghi) a, 0 0

Gii s a a ch l 0x30= 0b00110000

Cc lnh thao tc theo bit Cu trc lnh gm 3 phn: o M lnh thanh ghi, bit

Cc lnh bao gm lnh set 1 bit no ca mt thanh ghi no ln mc 1 hoc xa bt v 0, hoc kim tra 1 bit no ca mt thanh ghi no bng 0 hoc bng 1 v.v T y, ta c th thy, cn mt s bit trong 14 bit ca 1 lnh dnh phn bit cc lnh vi nhau, c th y l 4 bit, cn 3 bt xc nh v tr bt no trong thanh ghi b tc ng (v v tr bt l 0-7), cn li 7 bt xc nh thanh ghi no trong cc thanh ghi b nh RAM b tc ng 13 OPCODE (ton t) V d: 10 9 V tr bt BCF a,3 7 6 FILE (a ch thanh ghi) 0

Xa bt 3=011 ca thanh ghi a (gi s a c khai bo trc v c a ch 0x24=0b0010 0100 trong b nh RAM) 13 OPCODE (ton t) 01 00 10 9 V tr bt 011 7 6 FILE (a ch thanh ghi) 010 0100 0

Cc lnh thao tc vi hng s v iu khin r nhnh chng trnh:

Cu trc lnh: o M lnh 13 OPCODE (ton t) hng s k 8 7 Hng s k 0 Cc lnh thng thng:

Tr 2 lnh Call k v goto k 13 OPCODE (ton t) V d: Miu t: 13 OPCODE (ton t) 11 111 8 7 Hng s k 1110 1001 11 10 Hng s k ADDLW 233 0 0

cng 233 vo thanh ghi w

Sau khi phn tch nh trn, nhn li bng 1: tp hp tt c cc lnh ca vi iu khin pic16f877a ta a ra nhn xt sau: 2 bit u ca 14 bit m ha lnh xc nh 3 dng lnh: thao tc theo byte (00), thao tc theo bit (01), thao tc vi hng s (11 hoc 10 hoc 00) C tc c 18 lnh thao tc byte, nh nu trn, m ha m lnh (opcodeton t) dng ht 6 bt: 2 bt phn bit dng thao tc theo byte (00) vy cn 4 bit phn bit 18 lnh thao tc byte. Nh ta bit vi 4 bit ch phn bit c 2^4 =16 lnh, lm sao phn bit c 18 lnh. Thc ra vi iu khin dng 14 m lnh cho 14 lnh, 2 m lnh cn li, c th l 00 0001 cng cho 2 lnh CLRF (xa ni dung thanh ghi) CLRW (xa ni dung thanh ghi W) v m 00 0000 cng cho 2 lnh MOVWF (chuyn ni dung ca thanh ghi w sang thanh ghi F (c a ch c th trong ram) ) v lnh NOP (lnh khng thc hin nhim v g). Th lm sao phn bit c CLRF v CLRW? n gin l khi gp m lnh 00 0001 vi iu khin kim tra tip bit hng d: r rng nu d=0 (kt qu cha trong w) th y l lnh CLRW, nu d=1 (kt qu cha trong thanh ghi f) th y l lnh CLRF

Khi gp m 00 0000, vi iu khin kim tra tip bit hng d, d =1 th y l lnh MOVWF, d=0 l lnh NOP C 4 lnh thao tc theo bit. 2 bit m thao tc theo bit l 01, 2 bit cn li trong OPCODE (xem bn trn) m ha 4 lnh C 13 lnh thao tc vi hng s v iu khin: mt s lnh c 2 bit m thao tc l 11 hoc 10 hoc 00. Kim tra cc bit cn li ta thy u c cch vi iu khin thc hin phn bit c cc lnh vi nhau 2.1.2 Cu trc b nh v stack:

Hnh 2: T chc b nh chng trnh v Stack 2.1.2.1 Thanh ghi b m chng trnh:

Ti mi thi im, vi iu khin thc hin 1 lnh trong b nh chng trnh c a ch cho bi thanh ghi b m chng trnh PC (Program Counter) gm 13 bit. Nhc li l vi di 13 bit, thanh ghi PC c th phn bit c ti a 2^13=8K a ch. Cu trc thanh ghi PC gm 2 phn: phn thp PCL (Program Counter Low) 8 bit 0-7, phn cao PCH (Program Counter High) 5 bit 8-12 12 11 PCH 10 9 8 7 PCL 6 5 4 3 2 1 0

Trong cc bit trong PCL l cc bit c th c ghi c Cc bit trong PCH khng th c ghi v c cp nht thng qua thanh ghi PCLATCH. Ngha l mi mt ln tc ng thay i 4 bit PCLATCH s dn n thay i ni dung PCH. Nhn vo t chc b nh chng trnh ca vi iu khin ta thy rng b nh chng trnh gm 8 K chia thnh 4 bank nh, mi bank c dung lng 2 K t nh: Bank 0: 0000h-07FFh Bank 1: 0800h-0FFFh Bank 2: 1000h-17FFh Bank 3: 1800h-1FFFh

2 bit cao PCLATCH s qui nh vi iu khin ang truy cp bank nh no trong 4 bank nu trn. Khi bn n cc lnh CALL, GOTO, cc lnh tr v t chng trnh con, chng trnh ngt ta s quay li vn ny 2.1.2.2 Reset vector: Mi khi chng trnh vi iu khin b reset li (tt ngun, n nt reset), thanh ghi PC b xa v 0, vy vi iu khin bt u thc hin lnh cha ti a ch 0000h. Do a ch ny gi l a ch vector reset 2.1.2.3 Stack: Trong khi thc hin chng trnh, s c nhng on chng trnh c thc hin nhiu ln, ngi lp trnh n gin chng trnh s a on chng trnh thnh chng trnh con, mi ln cn thc hin on chng trnh th n gin l gi chng trnh con .

V d chng trnh con hay dng nht l chng trnh delay v d nh cc chng trnh con delay 100ms di y;************* t1m movlw movwf tm1lp1 movlw movwf tm1lp2 nop nop decfsz goto decfsz goto return ;************* t100m movlw movwf tm2lp call decfsz goto return ;************* t500m movlw movwf tm3lp call decfsz goto return 1msec Timer Subroutine ***************** d'2' ;(1) Set loop cnt1 cnt1m ;(1) Save loop cnt1 d'249' ;(1)*2 Set loop cnt2 cnt500u ;(1)*2 Save loop cnt2 ;(1)*249*2 Time adjust ;(1)*249*2 Time adjust cnt500u,f ;(1)*249*2 cnt500u-1=0 ? tm1lp2 ;(2)*248*2 No, continue cnt1m,f ;(1)*2 cnt1m-1=0 ? tm1lp1 ;(2) No. Continue ;(2) Yes. Cnt end ;Total 2501*0.4usec=1msec 100msec Timer Subroutine *************** d'100' ;Set loop counter cnt100m ;Save loop counter t1m ;1msec subroutine cnt100m,f ;cnt100m - 1 = 0 ? tm2lp ;No. Continue ;Yes. Count end 500msec Timer Subroutine *************** d'5' ;Set loop counter cnt500m ;Save loop counter t100m ;100msec subroutine cnt500m,f ;cnt500m - 1 = 0 ? tm3lp ;No. Continue ;Yes. Count end

chng trnh chnh: --------bcf a,3 call t1m bsf a,3 ----------Nh vy sau khi thc hin lnh bcf a,3, gp lnh call t1m, thanh ghi PC c load a ch bt u ca chng trnh t1m, sau khi gp lnh return vi iu khin tr v chng trnh chnh thc hin lnh bsf a,3. Cu hi t ra l lm sao vi iu khin nh c a ch tr v? thc ra khi gp lnh CALL t1m, ni dung thanh ghi PC tng ln 1 n v v gi tr

ny c lu vo stack, sau PC c load a ch ca lnh u tin trong chng trnh con t1m v do vi iu khin s thc hin lnh ca chng trnh con t100m, cho n khi gp lnh return, PC load c ch lu trc stack ra, v do thc hin tip lnh bsf a,3 Qua v d ni trn ta hnh dung c nhim v ca stack l lu a ch tr v t chng trnh con, chng trnh ngt (s cp sau) Stack ca vi iu khin pic16f877a c th qun l n 8 mc stack. Nu s dng n mc stack th 9 th mc stack 9 ny s vit ln mc 1.

2.1.2.4 Vector ngt: Cha bn n ngt, nhng chng ta hnh dung nh th ny: mc nh vi iu khin thc hin chng trnh chnh, khi c s kin ngt xy ra, nu ngt c ci t trc trong chng trnh th vi iu khin s dng thc hin chy chng trnh chnh v nhy vo a ch 0004h, ti phn x l ngt ny do ngi lp trnh vit chng trnh thc hin V a ch 0004h trong b nh chng trnh c gi l vector ngt. 2.2 Tp lnh vi iu khin PIC: 2.2.1 Thi gian thc hin 1 lnh:

Chu k thc hin 1 lnh gm 4 bc, k hiu l Qi, i=1-4: Q1: thi gian gii m lnh

-

Q2: thi gian c lnh Q3: thi gian thc thi d liu Q4: thi gian vit lnh

Mi bc tng ng vi 1 chu k xung ca vi iu khin. Nu dng b dao ng xung thch anh c tn s f=4MHZ Chu k xung =1/tn s xung=1/4MHz Chu k lnh = 4 * chu k xung= 4/4MHZ= 1us (micro giy) Hu nh tt c cc lnh trong 35 lnh ca vi iu khin PIC16F thc hin trong 1 chu k lnh tr 1 s lnh c bit nh lnh CALL, GOTO, RETURN, RETFI,RETLW mt 2 chu k lnh 2.2.2 Tp lnh: Xem theo datasheet

2.3 B nh d liu tm thi:

2.3.1

T chc b nh:

B nh d liu tm thi (RAM) ca vi iu khin gm 2 phn chnh, chia thnh 4 bank nh: Cc thanh ghi chc nng c bit SFR (Special Function Register) iu khin qu trnh hot ng ca cc b phn chc nng trong vi iu khin cng nh cc thit b ngoi vi c tch hp trong vi iu khin. Nhn vo hnh v t chc b nh nh trn ta thy, cc thanh ghi SFR phn b t a ch 00h - 1Fh trong bank 0, phn b ri rc t 80F- 9Fh trong bank 1, t 100h n 11Fh trong bank 2, t 180h-19Fh trong bank 3

-

Cc thanh ghi mc ch chung GPR (General Purpose Register) dng cha d liu (dng t bin) t 20h-7Fh trong bank 0, t A0h-EFh trong bank 1, t 120h-16Fh trong bank 2, t 1A0h-1F0h trong bank 3

Mt s im ch khc l: Khi truy cp cc a ch t F0h-FFh trong bank 1, 170h-17Fh trong bank 2 v 1F0h1FFh trong bank 3 tc l truy cp n 70h-7Fh trong bank 0 Cc v tr mu xm khng s dng. Ti mi thi im, vi iu khin lm vic trn mt bank nh , vic la chn lm vic bank nh ph thuc 2 bit RP1, RP0 ca thanh ghi STATUS

Ch : Trong chng trnh vit cho vi iu khin PIC, nu sau ki thc hin lnh i vi 1 thanh ghi (thanh ghi SFR hoc GPR) bank i, mun thc hin l lnh i vi 1 thanh ghi khc bank j (j#i) ta phi chn li bank nh, tc l phi c lnh can thip n 2 bit RP1 v RP0, nu khng lnh sau s khng tc dng: V d: ta c chng trnh nh sau: BCF TRISA,2 ADDWF PORTA,1 Lnh th 2 s khng c tc dng, v lnh u tin thao tc vi thanh ghi TRISA nm trn bank 1, trong khi lnh th 2 tc ng n PORTA nm trn bank 0 Chng trnh ng l BSF STATUS,5 ; A GI TR RP0 LN MC 1 CHN BANK 1 BCF TRISA,2 BCF STATUS,5 ; A GI TR RP0 XUNG MC 0 CHN BANK 0 ADDWF PORTA,1 L do ca vic phi chn bank nh gii thch nh sau:

Chng ta xem li bng tng hp tt c cc lnh ca vi iu khin PIC v rng trong cc lnh thao tc vi cc thanh ghi (cc thanh ghi nm trong b nh RAM), mi thanh ghi c m ha bng 7 bit (tc l nh s t 00-7Fh) V d: Lnh ADDWF f,d m ha lnh nh sau: 00 111 d fffffff Nh vy: ADDWF PORTA,0 c m lnh: 00 111 0 000 0100 (do a ch ca PORTA=0x05=000 0100) ADDWF TRISA, 0 khng th vit bng c v a ch TRISA=0x85=1000 0100 gm 8 bit khng th m ha c bng 7 bit nh trong lut m ha lnh gii quyt vn ny, m ha lnh ADDWF TRISA,0 vi iu khin m ha thanh ghi TRISA bng 7 bit nh PORTA, vic phn bit PORTA v TRISA ph thuc vo cc bit chn bank nh RP1 v RP0. Gii thch ny cng tng t cho cc lnh thao tc trn thanh ghi ca bank 1, bank 2 v bank 3. Do , nu khi thc hin lnh tip theo c thao tc vi thanh ghi thuc bank nh khc vi bank nh ang c tc ng hin ti cn phi c lnh chn li bank nh 2.3.2 a ch gin tip: hiu v a ch gin tip ta xem a ch trc tip nh th no d hiu ta cho v d: CLRF 0x30 Cu lnh ny thc hin vic xa thanh ghi c a ch 30h trong b nh Ram. R rng l a ch y l ly trc tip trong RAM, a ch c ghi trc tip trong lnh Trong mt s trng hp ta dng n a ch gin tip, c th l: thanh ghi FSR (File Select Register) cha a ch ca thanh ghi trong RAM v thanh ghi INDF s nh x vo thanh ghi RAM c a ch l ni dung ca FSR, mi thao tc trn INDF xem nh l thao tc trn thanh ghi ca RAM nu trn V d: MOVLW MOVWF 0x30 FSR ; sau lnh ny FSR cha 0x30 tc l ch n thanh ghi c a ch 0x30 trong RAM

CLRF INDF; xa INDF tc l xa ni dng ca thanh ghi a ch 0x30

Hnh v trn cho ta cch m vi iu khin xc nh thanh ghi no trong Ram c thc hin. Tr li v d trn: CLRF 0x30 lnh ny m ha nh sau: 00 0001 1 fff ffff Trong fff ffff= m thanh ghi = 011 0000 Khi RP1=0, RP0=0 bank nh 0 c chn R rng l thng qua 7 byte thp ca opcode v gi tr RP1, RP0 vi iu khin xc nh c thanh ghi trong b nh RAM i vi lnh gin tip: MOVLW MOVWF CLRF INDF; Vi iu khin da vo bit IRP (l bt 7 ca thanh ghi STATUS) v bt 7 ca FSR xc nh bank nh ni cha thanh ghi. 7 bt cn li FSR xc nh chnh xc v tr ca thanh ghi 0x30 FSR

IRP 0 0 1 1

FSR 0 1 0 1

Bank 0 1 2 3

CHNG 3: LP TRNH HP NG 3.1 Dng s trong chng trnh hp ng:

Cc dng s dng trong chng trnh hp ng v cch vit trong hp ng nh sau: Dng DECIMAL HEXADECIMAL OCTAL BINARY ASCII Cch vit DS . S H S 0xS O S BS Ak t k t V d D100 H20 0x20 O10 B00011000 AX X

3.2 Ch thch: Ch thch nm sau du chm phy ; V d: Movlw 0x20 ; y l phn ch thch 3.3 Khai bo bin,hng s: C mt s phng php t bin, hng s nh sau: Dng ch dn equ: Tn hng, bin V d: Dng ch dn set: Tn hng, bin V d: set gi tr count1 set 0x20 equ gi tr count equ 0x20

Dng ch dn variable: Variable Tn hng, bin = [biu thc hoc s] V d: Variable count3=0x20 Hoc Variable count3

-

Dng ch dn cblock: Cblock a ch Bin1, bin 2, ..... Endc

V d: cblock 0x20 Count1, count2, count3 Endc Khai bo c mt vng cc bin 1, 2 ..... bt u t a ch Mt s ch : Khi t bin hng bng equ ta khng th nh ngha li Count equ 0x20 --------------------Count equ 0x23 Nhng c th t li gi tr vi set V d: Vit nh th ny khng b li Count set 0x20 --------------------Count set 0x23 Bin hng i km vi set v equ phi c khi to gi tr (gn gi tr) nhng vi variable th khng cn thit V d: Chng trnh dch s bo li: Count equ Count set Nhng th ny th khng bo li Variable count; Thc ra khi s dng set, variable, equ l ta khai bo hng Ch c s dng cblock th y mi thc s l bin v c cp pht b nh cho bin hiu r iu ny ta cng xem 2 v d sau: V d 1: V d: vit nh th ny l b li

Count equ 0x21 Movlw d5 Movwf count

; khai bo hng s count c gi tr 0x21 ; a gi tr 5 vo thanh ghi w: w=5 ; chuyn gi tr w cho thanh ghi c a ch bng count tc thanh ; ghi c a ch 0x21 trong b nh RAM

Nh vy count y xem nh l mt hng s 0x21 V d 2: CBLOCK 0x21 Count1, count2 Endc Movlw d5 ; a gi tr 5 vo thanh ghi w: w=5 ; 0x21 nh khai bo R rng trong trng hp ny count1 l bin, gi tr a vo trong lnh l a ch ca count1 khng phi l gi tr ca count1 Khi khai bo cc bin v hng ny, ta ch gi tr khi to. V thc ra cc bin hng ny c s dng trong cc lnh nh l a ch cc thanh ghi nm trong vng nh RAM. Nh ta bit a ch dnh cho cc bin phi trong vng cc thanh ghi mc ch chung: Trong bank 0: 0x20->0x7f Bank 1: 0xA0->0xEF Bank 2: 0x120->0x16F Bank 3: 0x1A0-0x1EF Do gi tr khi to cho cc bin hng khi khai bo cng phi nm trong vng ny

Movwf count1 ; a gi tr w vo thanh ghi count1, tc thanh ghi c a ch

- Khi lm vic vi cc bin hng cn phi nh a ch ca thanh ghi trong lnh. Nu ang thao tc vi thanh ghi thuc bank nh i (i=0-3) chuyn sang lnh tip theo lm vic vi mt thanh ghi khc thuc bank nh j (j=0-3 v j#i) cn phi c lnh chuyn bank nh nh trong chng 2 gii thiu 3.4 Ch dn bin dch chng trnh ORG: Cch thc: ORG a ch 1 Lnh 1 Lnh 2 -------Lnh n ORG a ch 2 Lnh m Lnh m+1 ------Miu t: ch dn bin dch ny iu khin chng trnh dch MPLAB phn b cc lnh nm sau ORG ( y l lnh 1, lnh 2, ... lnh n) v trc mt ch dn ORG tip theo (ORG a ch 2) vo b nh chng trnh t a ch bt u l a ch 1 3.5 Nhn: Nhn-label: l chui k t do ngi lp trnh nh vo nh du mt chui thao tc lnh no hoc 1 chng trnh con no . Nhn cn c dng trong cc cu lnh goto v call: GOTO nhn CALL nhn V d 1: goto capnhat Movf bien1,1 Movlw d10 Movwf bien2 Capnhat: Addlw d2 V d 2:

Call ct1 Movf bien1,1 Movlw d10 Movwf bien2 Ct1 Addlw d2 Movwf bien2 Return Qui nh nhn: Nhn c th tp hp cc k t (s k t khng gii hn) v khng c ri vo mt s trng hp sau: Bt u bng 2 k t gch di (v d: __abc l sai) Khng c bt u bng cc con s 0-9, *, & , gia cc k t khng c cc k t c bit Khng c ging cc t c bit ca chng trnh nh ORG, cc lnh v.v 3.6 Cu trc ca mt chng trnh hp ng: Cu trc c bn gm cc phn nh sau: ; DUA FILE LIET KE VAO #include p16f877a.inc ; ch dn bao gm file nh ngha chip vi iu khin ; KHAI BAO CAU HINH __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF ; KHAI BAO BIEN O DAY ; DIA CHI BIEN O VUNG NHO BIEN BANK0 cblock 0x21 vong1, vong2, vong3 endc variable giatricong=0x25 ;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY org 0x000; CHI DAN BIEN DICH ; NHAY TOI CHUONG TRINH CHINH goto main

; chi dan bien dich ; CHUONG TRINH CHINH BAT DAU TU DAY org 0x005 main ; CHON BANK NHO CHUA THANH GHI TRISB banksel trisb ; XOA THANH GHI TRISB, CHO PHEP CAC CHAN PORTB LA DAU RA clrf trisb ; CHON BANK NHO CO THANH GHI PORTB banksel PORTB ; BAT DAU XU LY start: ; XOA BIT CO C bcf status,c ; DUA GIA TRI 1 VAO BIEN GIATRICONG: GIATRICONG=0000 0001 movlw d'1 movwf giatricong ; DUA DU LIEU GIATRICONG VAO THANH GHI TRUNG GIAN W loop1 movf giatricong,w ; CHUYEN GIA TRI CHO THANH GHI PORTB movwf portb ; GOI CHUONG TRINH TAO TRE 200MS call delay ; KIEM TRA BIT 7 CUA BIEN GIATRICONG: GIATRICONG=1000 0000? btfss giatricong,7 ; NEU SAI NHAY TOI UPDATE DE DICH BIT SANG TRAI goto update ; NEU DUNG TRO LAI START BAT DAU LAI goto start ; DOAN DICH BIT:

update: rlf giatricong,1 ; XU LY TIEP goto loop1 abc1234567890123456789012345678111111: movlw d'2 ; CHUONG TRINH CON DELAY 200MS DELAY: nop nop movlw d'185 movwf vong1 movlw d'4 movwf vong2 movlw d'2 movwf vong3 decfsz vong1,f goto $-1 decfsz vong2,f goto $-3 decfsz vong3,f goto $-5 ; THOAT KHOI CHUONG TRINH CON return ; KET THUC MOI CHUONG TRINH End Phn th nht, bt buc phi c l phn khai bo bao hm file nh ngha vi iu

khin, y l phn bt buc #include p16f877a.inc Thc ra ch dn ny ra lnh cho MPLAB copy ton b ni dung ca file C:\Program Files\Microchip\MPASM Suite\p16f877a.inc chng trnh vi iu khin. vo phn u ca

Ni dung ca file ny thc ra l nh ngha cc thanh ghi v cc ci t trong chng trnh. Chng ta xem lnh trong vi iu khin nh sau: MOVLW B00001111 MOVWF PORTA,1 Vi iu khin khng bit t PORTA l g c, n ch bit rng thanh ghi c bit c a ch 0x05 trong b nh RAM l ni lu tr trng thi v iu khin ca cc chn trn PORTA. Nh vy can thip n cc chn ny ngi lp trnh phi gi lnh MOVLW B00001111 MOVWF 0x05,1 Tuy nhin, c rt nhiu thanh ghi c bit trong vi iu khin, ngi s dng khng th nh c a ch ca n m vit lnh. tin cho ngi lp trnh, chng trnh bin dch MPLAB chun b sn file nh ngha p16f877a.inc trong nh ngha: PORTA equ h00005 V ngi lp trnh ch vic a dng: #include p16f877a.inc Ton b ni dung ca file trn s c a vo chng trnh v khi ngi dng vit cc dng lnh c PORTA th trnh dch s t ng hiu l 0x05 (v PORTA nh ngha bng 5) Khi ta dng vi iu khin khc v d nh pic 18f4431 ta n gin thay i dng bao hm bng: #include p18f4431inc Phn th hai, khai bo cu hnh cho vi iu khin __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF Mc ch ca khai bo cu hnh l ci t mt s ch hot ng ca vi iu khin nh chn ngun xung dao ng, tt ng h watchdog timer v.v Cc tham s ci t cho config xem file header Phn th ba, khai bo bin, s dng cc phng php khai bo nh gii thiu cc mc trc Phn th t, chng trnh, kt thc bi nhn END Cc chng trnh con phi t trc END, kt thc chng trnh con c lnh return

-

Trong chng trnh c s dng cc ch dn bin dch ORG phn b b nh cho chng trnh nh cp trc y

3.7 Dng thc ca 1 lnh: C 3 loi lnh: Lnh thao tc vi byte Lnh thao tc vi bit Lnh thao tc vi s lnh f,d CLRW ( xa thanh ghi W) CLRF f (xa thanh ghi f) NOP Trong : Lnh l t gi nh v php ton thc hin. V d: ADDWF l cng thanh ghi W v thanh ghi F F: l a ch ca thanh ghi (trong b nh RAM) c thao tc trong lnh. V d: ADDWF PORTA,1 ADDWF 0x05,1 C hai lnh trn l ging nhau: Cng thanh ghi w v thanh ghi c a ch 0x05 trong b nh RAM. Vi iu khin ch bit a ch 0x05 khng bit PORTA l g d: ch ra kt qu ca lnh cha u. o Nu d=0: kt qu cha trong w o Nu d=1: kt qu cha trong thanh ghi f o Mc nh: d=1, kt qu cha trong thanh ghi f V d: ADDWF 0x05,0 W=W+thanh ghi c a ch 0x05 ADDWF 0x05,1 Thanh ghi c a ch 0x05=W+ Thanh ghi c a ch 0x05 3.7.2 Lnh thao tc vi bit: Dng lnh: Trong : lnh f,b (lnh khng lm g)

3.7.1 Lnh thao tc vi byte: Dng lnh: Tr cc lnh:

-

Lnh l t gi nh v php ton thc hin f: a ch thanh ghi b: v tr ca bit 0-7

V d: BSF 0x23,3 3.7.3 Lnh thao tc vi s: Dng lnh: Trong : Lnh l t gi nh v php ton thc hin S l tham s trong php ton lnh s

V d: ADDLW 0x30 3.8 Mt s lnh c bit: Tp lnh ca vi iu khin PIC gm 35 lnh. Dng lnh v miu t d dng hiu c qua datasheet. y ch gii thiu mt s lnh c bit 3.8.1 Lnh kim tra trng thi ca bit: C 2 lnh: BTFSS v BTFSC Dng lnh: BTFSS a ch thanh ghi, v tr bt Lnh 1 Lnh 2 Miu t: kim tra bt v tr bt trn thanh ghi, nu bt bng 1 b qua lnh 1 thc hin lnh 2, nu bt bng 0 thc hin lnh 1 (theo kiu tun t) Ch l khi bit =1, lnh ny mt 2 chu k lnh, khi bit =0 lnh ny mt 1 chu k lnh Dng lnh: BTFSC a ch thanh ghi, v tr bt Lnh 1 Lnh 2 Miu t: kim tra bt v tr bt trn thanh ghi, nu bt bng 0 b qua lnh 1 thc hin lnh 2, nu bt bng 1 thc hin lnh 1 (theo kiu tun t) Ch l khi bit =0, lnh ny mt 2 chu k lnh, khi bit =1 lnh ny mt 1 chu k lnh 3.8.2 Lnh tng gim ng thi kim tra thanh ghi: C 2 lnh: DECFSZ, INCFSZ

-

Dng lnh: DECFSZ a ch thanh ghi,hng Lnh 1 Lnh 2 Miu t: Lnh ny trc ht t ng gim gi tr ca thanh ghi i 1 n v v sau

o kim tra nu thanh ghi bng 0 b qua lnh 1 thc hin lnh 2, nu khc 0 thc hin lnh 1 (theo kiu tun t nh bnh thng) Ch l khi thanhghi =1, lnh ny mt 2 chu k lnh, khi thanhghi#1 lnh ny mt 1 chu k lnh Dng lnh: INCFSZ a ch thanh ghi,hng Lnh 1 Lnh 2 Miu t: Lnh ny trc ht t ng tng gi tr ca thanh ghi i 1 n v v sau o kim tra nu thanh ghi bng 0 b qua lnh 1 thc hin lnh 2, nu khc 0 thc hin lnh 1 (theo kiu tun t nh bnh thng) 3.8.3 Lnh nhy khng iu kin GOTO: Dng lnh: GOTO nhn Miu t: nhy n on chng trnh bt u bi nhn hiu r on chng trnh trn ta c v d sau: START: BSF PORTB,1 CALL DELAY BCF PORB,1 CALL DELAY GOTO START Khi gp lnh GOTO START, vi iu khin lp tc nhy n on chng trnh bt u bi START tc l s nhy n lnh BSF PORTB,1 Thc ra, ng sau lnh GOTO START, vi iu khin tnh ra a ch ca lnh bt u sau START gi s l k, v cu lnh thc s l GOTO k Chng ta xem dng dissampling ca on lnh trn s r:

29: ; BAT DAU XU LY 30: 000A 000B 000C 000D 1486 200F 1086 200F BSF 0x6, 0x1 CALL 0xf BCF 0x6, 0x1 CALL 0xf GOTO 0xa START: 31: 32: 33: 34: 35: BSF PORTB,1 CALL DELAY BCF PORTB,1 CALL DELAY GOTO START

000E 280A

Ct th nht cha a ch ca lnh. Ct th 3 l lnh thc s c phn gii. Ta thy lnh nm ngay sau nhn l BSF PORTB,1 c a ch l 0x0a trong b nh chng trnh V vy trong ct 3, ta c lnh GOTO 0xa Nh vy dng lnh thc s l GOTO k Khi gp lnh ny: PC=k; PC=PCLATCH Tm li c th gii thch li nh sau: Khi gp lnh: goto nhn Trong trng hp trn l goto start MPLAB tnh ra a ch ca lnh nm ngay sau nhn start, gi s l k Trong trng hp trn l lnh BSF PORTB,1 c a ch k=0x0a MPLAB iu khin a gi tr k vo thanh ghi PC: PC=k Do chng trnh vi iu khin s chy lnh BSF PORTB,1 M ha lnh: 10 1kkk kkkk kkkk Nhn vo m ha lnh ta thy a ch k gm 11 bit kkk kkkk kkkk Nh vy thc ra ch 11 bit u ca thanh ghi PC l cha gi tr k: PC=kkk kkkk kkkk 2 bit cao ca thanh ghi PC ly t thanh ghi PCLATCH PC=PCLATCH iu ny s dn n mt vn !!! Gi s ta c on chng trnh sau: org 0x005 main

banksel trisb clrf trisb banksel PORTB START: BSF PORTB,1 CALL DELAY BCF PORTB,1 CALL DELAY GOTO UPDATE ORG 0x800 UPDATE: MOVLW 0xFF MOVWF PORTB Nh vy lnh GOTO UPDATE nm a ch 0x0E Nh vy khi gp lnh ny, 2 bit ca thanh ghi PCLATCH=00 Lnh nm sau nhn UPDATE l MOVLW 0xFF nm a ch 0x800 (do c ch dn bin dch ORG 0x800) Suy ra a ch l: 0x800=1000 0000 0000 Nh vy khi gp lnh GOTO UPDATE, thanh ghi PC c np gi tr: PC = 000 0000 0000 PCLATCH vn khng i: PCLATCH=00 Suy ra, PC=PC=00 Suy ra: PC=0 0000 0000 0000 =0x00 Vy chng trnh nhy n a ch 0x00!!!!! Chc chn l chng trnh s khng chy c on lnh nm sau UPDATE chy ng, n gin l ta phi dng lnh cho PCLATCH=01 on chng trnh ng s nh sau: org 0x005 main banksel trisb clrf trisb

banksel PORTB START: BSF PORTB,1 CALL DELAY BCF PORTB,1 CALL DELAY PAGESEL UPDATE GOTO UPDATE ORG 0x800 UPDATE: MOVLW 0xFF MOVWF PORTB 3.8.4 Lnh gi chng trnh con CALL: Dng lnh: CALL nhn Cch lm vic ca lnh ny tng t nh lnh goto ch khc l trc khi nhy n a ch nhn, vi iu khin lu li a ch ca lnh k tip sau lnh CALL tc PC+1 vo ngn xp sau khi thc hin on chng trnh con, vi iu khin chy v chng trnh chnh v thc hin lnh k tip . 3.8.5 Cc ton t: Cc k hiu +,-,*, / v.v.v gi l cc ton t. Chng trnh hp ng MPLAB qui nh mt tp cc ton t nh sau:

Qua bng trn ta d dng hiu c chc nng ca tng ton t. y ch lu mt s ton t c bit nh sau: - Ton t $: thng i km vi lnh goto Goto $ Sau khi thc hin lnh ny, thanh ghi PC gi gi tr khng i: PC=PC (Thng thng sau khi thc hin 1 lnh, PC=PC+1, vi iu khin thc hin lnh tip theo) Goto $-n Sau khi thc hin cc lnh ny, PC=PC-$, nh vy sau khi thc hin lnh ny, vi iu khin s nhy n thc hin lnh trc lnh hin ti n lnh

Tng t vi: Goto $+n V d: decfsz bien1,F goto $-1 decfsz bien2,F goto $-3 Nh vy khi gp lnh goto $-1, vi iu khin nhy v thc hin lnh trc nm cch 1 lnh decfsz bien1,f, khi gp lnh goto $-3, vi iu khin nhy v thc hin lnh tr nm cch 3 lnh tc l s thc hin lnh decfsz bien1,f Ton t !: hay c dng trong cu iu kin If(!(a= =b)) ngha l nu a!=b 3.9 Chu k lnh:

Chu k thc hin 1 lnh gm 4 bc, k hiu l Qi, i=1-4: Q1: thi gian gii m lnh Q2: thi gian c lnh Q3: thi gian thc thi d liu Q4: thi gian vit d liu

Mi bc tng ng vi 1 chu k xung ca vi iu khin. Xung dao ng ca vi iu khin c to ra t mch dao ng bn ngoi nh thch anh, mch RC hoc mch dao ng bn trong (Phn cu hnh cho dao ng s c cp mc khc). Nu dng b dao ng xung thch anh c tn s f=4MHZ Chu k xung =1/tn s xung=1/4MHz Chu k lnh = 4 * chu k xung= 4/4MHZ= 1us (micro giy)

Hu nh tt c cc lnh trong 35 lnh ca vi iu khin PIC16F thc hin trong 1 chu k lnh tr 1 s lnh c bit nh lnh CALL, GOTO, RETURN, RETFI,RETLW mt 2 chu k lnh. Ngoi ra cn c mt s lnh khi th thc hin trong 1 chu k lnh khi th 2. l cc lnh DECFSZ, INCFSZ, BTFSZ, BTFSC. (Xem tp lnh trang 158-datasheet 16f877a) Ta ly lnh DECFSZ gii thch cho d hiu: V d: DECFSZ bien,1 GOTO nhan1 GOTO nhan2 Lnh u tin DECFSZ gim thanh ghi bien i 1 n 1: bien=bien-1 Sau lnh ny kim tra bien: Nu bien=0 nhy qua 1 lnh, tc l nhy n v thc hin lnh GOTO nhan2 Nu bien#0 th khng nhy tc l thc hin lnh GOTO nhan2 Nh vy nu bien#0 (tc l trc khi gp lnh ny bien #1)th vi iu khin mt mt chu k lnh thc hin lnh( thc hin thao tc tr) Nu bien=0 (tc l trc khi gp lnh ny bien=1) th vi iu khin mt 2 chu k lnh thc hin lnh(1 chu k lnh thao tc tr + 1 chu k lnh nhy) Thi gian thc hin lnh INCFSZ, BTFSC,BTFSS cng tng t nh vy

3.10 Chng trnh con to thi gian tr: Trong thc t vit chng trnh iu khin cho mt s thit b ta hay to mt khong thi gian tr. V d: s kin 1 Ch mt khong thi gian s kin 2 V vy i hi ta phi c mt chng trnh con to thi gian tr ny. tng c mt chng trnh con to thi gian tr l: Mun to ra mt khong thi gian tr n (micro giy) ta to mt chng trnh m thi gian thc hin xong n l n (micro giy) Ta bit: mt lnh thc hin trong 1 chu k lnh (tr mt s lnh c bit), mt chu k lnh tnh theo n v micro giy. V d: nu dng b dao ng ngoi s dng thch anh c tn s fosc=4Mhz Suy ra, chu k lnh= 4*chu k xung= 4/tn s xung= 4/4Mhz=1 mico giy Nh vy to ra khong thi gian n micro giy n gin ta to ra mt chng trnh m thi gian thc hin n l n chu k lnh V d: to thi gian tr 20 mico giy Ta dng 20 lnh NOP: NOP NOP ------NOP Tuy nhin cch lm th hi th cng, v ta cng khng c thi gian m nh n dng NOP nh vy (v d: n=200.000!!!!) Ta phi dng cc lnh khc vi thut ton phc tp hn. Ta i vo tng bc kho st phng php ny. 3.10.1 Vng 1: Ta c cc cu lnh sau: decfsz vong1,F goto $-1 Trong vong1 l bin c to ra trc Ta tnh th thi gian thc hin 2 lnh trn:

Vong1=vong1-1

Vong1=0 ? YES Thot

NO

Nh bn cc mc trc lnh goto mt 2 chu k lnh, lnh DECFSZ f,z mt 1 chu k lnh khi f #0 v mt 2 chu k lnh khi f=0 Gi s ban u: Vong1=2. Ln 1: decfsz vong1,f -> vong1=1 -> vong1#0 (mt 1 chu k lnh) Goto $-1 (mt 2 chu k lnh) Ln 2: dectsz vong1, f -> vong1=0 chng trnh b qua lnh goto -> thot (mt 2 chu k lnh) Nh vy mt tng cng: (1+2)+2= 5 chu k lnh Gi s ban u: Vng 1=3: Ln 1: decfsz vong1,f -> vong1=2 -> vong1#0 (mt 1 chu k lnh) Goto $-1 (mt 2 chu k lnh) S chu k lnh mt= 3 chu k lnh Ln 2: decfsz vong1,f -> vong1=1 -> vong1#0 (mt 1 chu k lnh) Goto $-1 (mt 2 chu k lnh) S chu k lnh mt = 3 chu k lnh Ln 2: dectsz vong1, f -> vong1=0 chng trnh b qua lnh goto -> thot S chu k lnh mt = 2 chu k lnh Tng s chu k lnh mt = 3*2 +2

C nh vy th c th qui np lnh S chu k lnh mt tng cng vi mt gi tr ca bin vong1 l: 3* (vong1-1) +2 =3*vong1-1 (1) (3 chu k lnh cho (vong1-1) ln u v 2 chu k lnh cho ln cui) S chu k lnh ti thiu v ti a to tr c. Khi vong1=1: s chu k lnh= 2 Khi vong1=0: s chu k lnh= 3*256-1= 767

3.10.2 Vng 2: Ta c on lnh sau: decfsz vong1,F goto $-1 decfsz vong2,F goto $-3 Thut ton:

Vong1=vong1-1

Vong1=0 ? YES Vong2=vong2-1

NO

Vong2=0 ? YES Thot Gi s ban u:

NO

Vong1=3, vong2=3 Nh phn tch trong mc 3.10.1, s chu k lnh mt cho n khi chng trnh bt u x l vong2 (tng ng vi s chu k lnh mt cho n khi nhy n thot trong mc 3.10.1) l: 3*vong1 -1 chu k lnh n y vong1=0, x l tip vong2 Ln 1: decfsz vong2,f : vong2=vong2-1=3-1=2, vong2#0 nhy n goto $-3 (mt 1 chu k lnh) Goto $-3 nhy n lnh decfsz vong1,f Tng chu k lnh mt = 3 chu k lnh Ti lnh: decfsz vong1,f (vong1 by gi ang =0) Xem nh y l chu trnh ging mc 3.10.1 vi vong1=0 Suy ra cho n khi gp li decfsz vong2,f mt: 3*256-1=767 chu k lnh Nh vy tng s chu k lnh cho ln 1 l 767+3= 770 chu k lnh Ln 2: decfsz vong2,f : vong2=vong2-1=2-1=1, vong2#0 nhy n goto $-3 Tng t nh trn: tng s chu k lnh cho ln 2 l 767+3= 770 chu k lnh Ln 3: decfsz vong2,f : vong2=vong2-1=1-1=0, vong2=0 nhy n thot (mt 2 chu k lnh) Nh vy tng chu k lnh mt i l: 3*vong1-1 + 770*2 +2 Qui np ln: 3*vong1-1 + 770*(vong2-1) +2= 3*vong1 +770*vong2 -769 Vy s chu k lnh = 3*vong1 +770*vong2 -769 (2) 3.10.3 Vng 3: Ta c on lnh sau: decfsz vong1,F goto $-1 decfsz vong2,F goto $-3 decfsz vong3,F goto $-5 Thut ton: (mt 2 chu k lnh)

Vong1=vong1-1

Vong1=0 ? YES Vong2=vong2-1

NO

Vong2=0 ? YES Vong3=vong3-1

NO

NO Vong3=0 ? YES Thot

Tnh ton tng t nh trn, ta c cng thc: S chu k lnh= 3*vong1+ 770*vong2 + 197122*vong3 - 197889 (3) Ta cng cn ch y na l np gi tr u cho bin vong1 ta mt 2 chu k lnh cho 2 lnh sau: Movlw d gi tr u (v d: movlw d100)

Movwf vong1 Tng t nh vy nu dng vng 2 ta s mt thm 2 lnh cho vic khi to gi tr u bin vong2 nh vy mt 4 chu k lnh Tng t nh vy nu dng vng 3 ta s mt thm 2 lnh cho vic khi to gi tr u bin vong3 nh vy mt 6 chu k lnh Ta phi gi chng trnh con to thi gian tr: call delay mt thm 2 chu k lnh Trong chng trnh con delay c lnh tr v return mt thm 2 chu k lnh. Nh vy cng thc tng qut cui cng l: Nu ch s dng vng 1: S chu k lnh = 3*vong1-1+2 (cho khi to bin vong1) +2 (cho lnh call delay) +2 (cho lnh return) S chu k lnh= 3*vong1+5 Nu s dng vng 1 v vng 2: S chu k lnh = 3*vong1 +770*vong2 -769 +4 (cho khi to bin vong1, vong2) +2 (cho lnh call delay) +2 (cho lnh return) S chu k lnh= 3*vong1+770*vong2-761 (5) Nu s dng c 3 vng 1, vng 2 v vng 3: S chu k lnh = 3*vong1+ 770*vong2 + 197122*vong3 - 197889 +6 (cho (6) (4)

khi to bin vong1, vong2, vong3) +2 (cho lnh call delay) +2 (cho lnh return) S chu k lnh= 3*vong1+ 770*vong2 + 197122*vong3 -197879 Tnh ton: Gi s ta dng b dao ng thch anh f=4Mhz, cho chn rb0 ln mc 1, to thi gian tr 200ms, cho chn rb0 xung mc 0. Thi gian tr y l 200ms. Gi s ta p dng thut ton 3 vng. 200ms= 200.000 micro giy= 200.000 chu k lnh p dng cng thc (6) ta c: 3*vong1+ 770*vong2 + 197122*vong3 -197879 = 200.000 Suy ra: 3*vong1+ 770*vong2 + 197122*vong3 = 397897

Vong3= 397897/197122= 2 3*vong1+770*vong2= 397897-197122*vong3= 397897-197122*2=3653 Suy ra: Vong2= 3653/770=4 3*vong1=3643-770*vong2=563 Suy ra: vong1=563/3=187 S d= 563-3*187=2 Nh vy: 200.000= 3*187 +770*4+197122*2 +2 S 2 d ra ta dng 2 lnh NOP Chng trnh chnh v chng trnh con delay s nh sau: ; DUA FILE LIET KE VAO #include p16f877a.inc ; KHAI BAO CAU HINH __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF ; KHAI BAO BIEN O DAY ; DIA CHI BIEN O VUNG NHO BIEN BANK0 cblock 0x21 vong1, vong2, vong3 endc variable giatricong=0x25 ;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY org 0x000; CHI DAN BIEN DICH ; NHAY TOI CHUONG TRINH CHINH goto main ; chi dan bien dich ; CHUONG TRINH CHINH BAT DAU TU DAY org 0x005 main banksel trisb

clrf trisb banksel PORTB START: BSF PORTB,0 CALL DELAY BCF PORTB,0 CALL DELAY GOTO START DELAY: nop nop movlw d'187 movwf vong1 movlw d'4 movwf vong2 movlw d'2 movwf vong3 decfsz vong1,f goto $-1 decfsz vong2,f goto $-3 decfsz vong3,f goto $-5 ; THOAT KHOI CHUONG TRINH CON return ; KET THUC MOI CHUONG TRINH end

CHNG 3: LP TRNH HP NG 3.11 Dng s trong chng trnh hp ng: Cc dng s dng trong chng trnh hp ng v cch vit trong hp ng nh sau: Dng DECIMAL HEXADECIMAL OCTAL BINARY ASCII Cch vit DS . S H S 0xS O S BS Ak t k t V d D100 H20 0x20 O10 B00011000 AX X

3.12 Ch thch: Ch thch nm sau du chm phy ; V d: Movlw 0x20 ; y l phn ch thch 3.13 Khai bo bin,hng s: C mt s phng php t bin, hng s nh sau: Dng ch dn equ: Tn hng, bin V d: Dng ch dn set: Tn hng, bin V d: set gi tr count1 set 0x20 equ gi tr count equ 0x20

Dng ch dn variable: Variable Tn hng, bin = [biu thc hoc s] V d: Variable count3=0x20 Hoc Variable count3

-

Dng ch dn cblock: Cblock a ch

Bin1, bin 2, ..... Endc V d: cblock 0x20 Count1, count2, count3 Endc Khai bo c mt vng cc bin 1, 2 ..... bt u t a ch Mt s ch : Khi t bin hng bng equ ta khng th nh ngha li Count equ 0x20 --------------------Count equ 0x23 Nhng c th t li gi tr vi set V d: Vit nh th ny khng b li Count set 0x20 --------------------Count set 0x23 Bin hng i km vi set v equ phi c khi to gi tr (gn gi tr) nhng vi variable th khng cn thit V d: Chng trnh dch s bo li: Count equ Count set Nhng th ny th khng bo li Variable count; Thc ra khi s dng set, variable, equ l ta khai bo hng Ch c s dng cblock th y mi thc s l bin v c cp pht b nh cho bin V d: vit nh th ny l b li

hiu r iu ny ta cng xem 2 v d sau: V d 1: Count equ 0x21 Movlw d5 Movwf count ; khai bo hng s count c gi tr 0x21 ; a gi tr 5 vo thanh ghi w: w=5 ; chuyn gi tr w cho thanh ghi c a ch bng count tc thanh ; ghi c a ch 0x21 trong b nh RAM Nh vy count y xem nh l mt hng s 0x21 V d 2: CBLOCK 0x21 Count1, count2 Endc Movlw d5 ; a gi tr 5 vo thanh ghi w: w=5 ; 0x21 nh khai bo R rng trong trng hp ny count1 l bin, gi tr a vo trong lnh l a ch ca count1 khng phi l gi tr ca count1 Khi khai bo cc bin v hng ny, ta ch gi tr khi to. V thc ra cc bin hng ny c s dng trong cc lnh nh l a ch cc thanh ghi nm trong vng nh RAM. Nh ta bit a ch dnh cho cc bin phi trong vng cc thanh ghi mc ch chung: Trong bank 0: 0x20->0x7f Bank 1: 0xA0->0xEF Bank 2: 0x120->0x16F Bank 3: 0x1A0-0x1EF

Movwf count1 ; a gi tr w vo thanh ghi count1, tc thanh ghi c a ch

Do gi tr khi to cho cc bin hng khi khai bo cng phi nm trong vng ny - Khi lm vic vi cc bin hng cn phi nh a ch ca thanh ghi trong lnh. Nu ang thao tc vi thanh ghi thuc bank nh i (i=0-3) chuyn sang lnh tip theo lm vic vi mt thanh ghi khc thuc bank nh j (j=0-3 v j#i) cn phi c lnh chuyn bank nh nh trong chng 2 gii thiu 3.14 Ch dn bin dch chng trnh ORG: Cch thc: ORG a ch 1 Lnh 1 Lnh 2 -------Lnh n ORG a ch 2 Lnh m Lnh m+1 ------Miu t: ch dn bin dch ny iu khin chng trnh dch MPLAB phn b cc lnh nm sau ORG ( y l lnh 1, lnh 2, ... lnh n) v trc mt ch dn ORG tip theo (ORG a ch 2) vo b nh chng trnh t a ch bt u l a ch 1 3.15 Nhn: Nhn-label: l chui k t do ngi lp trnh nh vo nh du mt chui thao tc lnh no hoc 1 chng trnh con no . Nhn cn c dng trong cc cu lnh goto v call: GOTO nhn CALL nhn V d 1: goto capnhat Movf bien1,1 Movlw d10 Movwf bien2 Capnhat:

Addlw d2 V d 2: Call ct1 Movf bien1,1 Movlw d10 Movwf bien2 Ct1 Addlw d2 Movwf bien2 Return Qui nh nhn: Nhn c th tp hp cc k t (s k t khng gii hn) v khng c ri vo mt s trng hp sau: Bt u bng 2 k t gch di (v d: __abc l sai) Khng c bt u bng cc con s 0-9, *, & , gia cc k t khng c cc k t c bit Khng c ging cc t c bit ca chng trnh nh ORG, cc lnh v.v 3.16 Cu trc ca mt chng trnh hp ng: Cu trc c bn gm cc phn nh sau: ; DUA FILE LIET KE VAO #include p16f877a.inc ; ch dn bao gm file nh ngha chip vi iu khin ; KHAI BAO CAU HINH __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF ; KHAI BAO BIEN O DAY ; DIA CHI BIEN O VUNG NHO BIEN BANK0 cblock 0x21 vong1, vong2, vong3 endc variable giatricong=0x25 ;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY org 0x000; CHI DAN BIEN DICH

; NHAY TOI CHUONG TRINH CHINH goto main ; chi dan bien dich ; CHUONG TRINH CHINH BAT DAU TU DAY org 0x005 main ; CHON BANK NHO CHUA THANH GHI TRISB banksel trisb ; XOA THANH GHI TRISB, CHO PHEP CAC CHAN PORTB LA DAU RA clrf trisb ; CHON BANK NHO CO THANH GHI PORTB banksel PORTB ; BAT DAU XU LY start: ; XOA BIT CO C bcf status,c ; DUA GIA TRI 1 VAO BIEN GIATRICONG: GIATRICONG=0000 0001 movlw d'1 movwf giatricong ; DUA DU LIEU GIATRICONG VAO THANH GHI TRUNG GIAN W loop1 movf giatricong,w ; CHUYEN GIA TRI CHO THANH GHI PORTB movwf portb ; GOI CHUONG TRINH TAO TRE 200MS call delay ; KIEM TRA BIT 7 CUA BIEN GIATRICONG: GIATRICONG=1000 0000? btfss giatricong,7 ; NEU SAI NHAY TOI UPDATE DE DICH BIT SANG TRAI goto update ; NEU DUNG TRO LAI START BAT DAU LAI

goto start ; DOAN DICH BIT: update: rlf giatricong,1 ; XU LY TIEP goto loop1 abc1234567890123456789012345678111111: movlw d'2 ; CHUONG TRINH CON DELAY 200MS DELAY: nop nop movlw d'185 movwf vong1 movlw d'4 movwf vong2 movlw d'2 movwf vong3 decfsz vong1,f goto $-1 decfsz vong2,f goto $-3 decfsz vong3,f goto $-5 ; THOAT KHOI CHUONG TRINH CON return ; KET THUC MOI CHUONG TRINH End Phn th nht, bt buc phi c l phn khai bo bao hm file nh ngha vi iu

khin, y l phn bt buc #include p16f877a.inc

Thc ra ch dn ny ra lnh cho MPLAB copy ton b ni dung ca file C:\Program Files\Microchip\MPASM Suite\p16f877a.inc chng trnh vi iu khin. Ni dung ca file ny thc ra l nh ngha cc thanh ghi v cc ci t trong chng trnh. Chng ta xem lnh trong vi iu khin nh sau: MOVLW B00001111 MOVWF PORTA,1 Vi iu khin khng bit t PORTA l g c, n ch bit rng thanh ghi c bit c a ch 0x05 trong b nh RAM l ni lu tr trng thi v iu khin ca cc chn trn PORTA. Nh vy can thip n cc chn ny ngi lp trnh phi gi lnh MOVLW B00001111 MOVWF 0x05,1 Tuy nhin, c rt nhiu thanh ghi c bit trong vi iu khin, ngi s dng khng th nh c a ch ca n m vit lnh. tin cho ngi lp trnh, chng trnh bin dch MPLAB chun b sn file nh ngha p16f877a.inc trong nh ngha: PORTA equ h00005 V ngi lp trnh ch vic a dng: #include p16f877a.inc Ton b ni dung ca file trn s c a vo chng trnh v khi ngi dng vit cc dng lnh c PORTA th trnh dch s t ng hiu l 0x05 (v PORTA nh ngha bng 5) Khi ta dng vi iu khin khc v d nh pic 18f4431 ta n gin thay i dng bao hm bng: #include p18f4431inc Phn th hai, khai bo cu hnh cho vi iu khin __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF Mc ch ca khai bo cu hnh l ci t mt s ch hot ng ca vi iu khin nh chn ngun xung dao ng, tt ng h watchdog timer v.v Cc tham s ci t cho config xem file header Phn th ba, khai bo bin, s dng cc phng php khai bo nh gii thiu cc mc trc vo phn u ca

-

Phn th t, chng trnh, kt thc bi nhn END Cc chng trnh con phi t trc END, kt thc chng trnh con c lnh return Trong chng trnh c s dng cc ch dn bin dch ORG phn b b nh cho chng trnh nh cp trc y

3.17 Dng thc ca 1 lnh: C 3 loi lnh: Lnh thao tc vi byte Lnh thao tc vi bit Lnh thao tc vi s lnh f,d CLRW ( xa thanh ghi W) CLRF f (xa thanh ghi f) NOP Trong : Lnh l t gi nh v php ton thc hin. V d: ADDWF l cng thanh ghi W v thanh ghi F F: l a ch ca thanh ghi (trong b nh RAM) c thao tc trong lnh. V d: ADDWF PORTA,1 ADDWF 0x05,1 C hai lnh trn l ging nhau: Cng thanh ghi w v thanh ghi c a ch 0x05 trong b nh RAM. Vi iu khin ch bit a ch 0x05 khng bit PORTA l g d: ch ra kt qu ca lnh cha u. o Nu d=0: kt qu cha trong w o Nu d=1: kt qu cha trong thanh ghi f o Mc nh: d=1, kt qu cha trong thanh ghi f V d: ADDWF 0x05,0 W=W+thanh ghi c a ch 0x05 ADDWF 0x05,1 Thanh ghi c a ch 0x05=W+ Thanh ghi c a ch 0x05 (lnh khng lm g)

3.17.1 Lnh thao tc vi byte: Dng lnh: Tr cc lnh:

3.17.2 Lnh thao tc vi bit: Dng lnh: Trong : Lnh l t gi nh v php ton thc hin f: a ch thanh ghi b: v tr ca bit 0-7 lnh f,b

V d: BSF 0x23,3 3.17.3 Lnh thao tc vi s: Dng lnh: Trong : Lnh l t gi nh v php ton thc hin S l tham s trong php ton lnh s

V d: ADDLW 0x30 3.18 Mt s lnh c bit: Tp lnh ca vi iu khin PIC gm 35 lnh. Dng lnh v miu t d dng hiu c qua datasheet. y ch gii thiu mt s lnh c bit 3.18.1 Lnh kim tra trng thi ca bit: C 2 lnh: BTFSS v BTFSC Dng lnh: BTFSS a ch thanh ghi, v tr bt Lnh 1 Lnh 2 Miu t: kim tra bt v tr bt trn thanh ghi, nu bt bng 1 b qua lnh 1 thc hin lnh 2, nu bt bng 0 thc hin lnh 1 (theo kiu tun t) Ch l khi bit =1, lnh ny mt 2 chu k lnh, khi bit =0 lnh ny mt 1 chu k lnh Dng lnh: BTFSC a ch thanh ghi, v tr bt Lnh 1 Lnh 2 Miu t: kim tra bt v tr bt trn thanh ghi, nu bt bng 0 b qua lnh 1 thc hin lnh 2, nu bt bng 1 thc hin lnh 1 (theo kiu tun t)

Ch l khi bit =0, lnh ny mt 2 chu k lnh, khi bit =1 lnh ny mt 1 chu k lnh 3.18.2 Lnh tng gim ng thi kim tra thanh ghi: C 2 lnh: DECFSZ, INCFSZ Dng lnh: DECFSZ a ch thanh ghi,hng Lnh 1 Lnh 2 Miu t: Lnh ny trc ht t ng gim gi tr ca thanh ghi i 1 n v v sau o kim tra nu thanh ghi bng 0 b qua lnh 1 thc hin lnh 2, nu khc 0 thc hin lnh 1 (theo kiu tun t nh bnh thng) Ch l khi thanhghi =1, lnh ny mt 2 chu k lnh, khi thanhghi#1 lnh ny mt 1 chu k lnh Dng lnh: INCFSZ a ch thanh ghi,hng Lnh 1 Lnh 2 Miu t: Lnh ny trc ht t ng tng gi tr ca thanh ghi i 1 n v v sau o kim tra nu thanh ghi bng 0 b qua lnh 1 thc hin lnh 2, nu khc 0 thc hin lnh 1 (theo kiu tun t nh bnh thng) 3.18.3 Lnh nhy khng iu kin GOTO: Dng lnh: GOTO nhn Miu t: nhy n on chng trnh bt u bi nhn hiu r on chng trnh trn ta c v d sau: START: BSF PORTB,1 CALL DELAY BCF PORB,1 CALL DELAY GOTO START Khi gp lnh GOTO START, vi iu khin lp tc nhy n on chng trnh bt u bi START tc l s nhy n lnh BSF PORTB,1

Thc ra, ng sau lnh GOTO START, vi iu khin tnh ra a ch ca lnh bt u sau START gi s l k, v cu lnh thc s l GOTO k Chng ta xem dng dissampling ca on lnh trn s r:

29: ; BAT DAU XU LY 30: 000A 000B 000C 000D 1486 200F 1086 200F BSF 0x6, 0x1 CALL 0xf BCF 0x6, 0x1 CALL 0xf GOTO 0xa START: 31: 32: 33: 34: 35: BSF PORTB,1 CALL DELAY BCF PORTB,1 CALL DELAY GOTO START

000E 280A

Ct th nht cha a ch ca lnh. Ct th 3 l lnh thc s c phn gii. Ta thy lnh nm ngay sau nhn l BSF PORTB,1 c a ch l 0x0a trong b nh chng trnh V vy trong ct 3, ta c lnh GOTO 0xa Nh vy dng lnh thc s l GOTO k Khi gp lnh ny: PC=k; PC=PCLATCH Tm li c th gii thch li nh sau: Khi gp lnh: goto nhn Trong trng hp trn l goto start MPLAB tnh ra a ch ca lnh nm ngay sau nhn start, gi s l k Trong trng hp trn l lnh BSF PORTB,1 c a ch k=0x0a MPLAB iu khin a gi tr k vo thanh ghi PC: PC=k Do chng trnh vi iu khin s chy lnh BSF PORTB,1 M ha lnh: 10 1kkk kkkk kkkk Nhn vo m ha lnh ta thy a ch k gm 11 bit kkk kkkk kkkk Nh vy thc ra ch 11 bit u ca thanh ghi PC l cha gi tr k: PC=kkk kkkk kkkk 2 bit cao ca thanh ghi PC ly t thanh ghi PCLATCH PC=PCLATCH iu ny s dn n mt vn !!!

Gi s ta c on chng trnh sau: org 0x005 main banksel trisb clrf trisb banksel PORTB START: BSF PORTB,1 CALL DELAY BCF PORTB,1 CALL DELAY GOTO UPDATE ORG 0x800 UPDATE: MOVLW 0xFF MOVWF PORTB Nh vy lnh GOTO UPDATE nm a ch 0x0E Nh vy khi gp lnh ny, 2 bit ca thanh ghi PCLATCH=00 Lnh nm sau nhn UPDATE l MOVLW 0xFF nm a ch 0x800 (do c ch dn bin dch ORG 0x800) Suy ra a ch l: 0x800=1000 0000 0000 Nh vy khi gp lnh GOTO UPDATE, thanh ghi PC c np gi tr: PC = 000 0000 0000 PCLATCH vn khng i: PCLATCH=00 Suy ra, PC=PC=00 Suy ra: PC=0 0000 0000 0000 =0x00 Vy chng trnh nhy n a ch 0x00!!!!! Chc chn l chng trnh s khng chy c on lnh nm sau UPDATE chy ng, n gin l ta phi dng lnh cho PCLATCH=01 on chng trnh ng s nh sau: org 0x005

main banksel trisb clrf trisb banksel PORTB START: BSF PORTB,1 CALL DELAY BCF PORTB,1 CALL DELAY PAGESEL UPDATE GOTO UPDATE ORG 0x800 UPDATE: MOVLW 0xFF MOVWF PORTB 3.18.4 Lnh gi chng trnh con CALL: Dng lnh: CALL nhn Cch lm vic ca lnh ny tng t nh lnh goto ch khc l trc khi nhy n a ch nhn, vi iu khin lu li a ch ca lnh k tip sau lnh CALL tc PC+1 vo ngn xp sau khi thc hin on chng trnh con, vi iu khin chy v chng trnh chnh v thc hin lnh k tip . 3.18.5 Cc ton t: Cc k hiu +,-,*, / v.v.v gi l cc ton t. Chng trnh hp ng MPLAB qui nh mt tp cc ton t nh sau:

Qua bng trn ta d dng hiu c chc nng ca tng ton t. y ch lu mt s ton t c bit nh sau: - Ton t $: thng i km vi lnh goto Goto $ Sau khi thc hin lnh ny, thanh ghi PC gi gi tr khng i: PC=PC (Thng thng sau khi thc hin 1 lnh, PC=PC+1, vi iu khin thc hin lnh tip theo) Goto $-n Sau khi thc hin cc lnh ny, PC=PC-$, nh vy sau khi thc hin lnh ny, vi iu khin s nhy n thc hin lnh trc lnh hin ti n lnh

Tng t vi: Goto $+n V d: decfsz bien1,F goto $-1 decfsz bien2,F goto $-3 Nh vy khi gp lnh goto $-1, vi iu khin nhy v thc hin lnh trc nm cch 1 lnh decfsz bien1,f, khi gp lnh goto $-3, vi iu khin nhy v thc hin lnh tr nm cch 3 lnh tc l s thc hin lnh decfsz bien1,f Ton t !: hay c dng trong cu iu kin If(!(a= =b)) ngha l nu a!=b 3.19 Chu k lnh:

Chu k thc hin 1 lnh gm 4 bc, k hiu l Qi, i=1-4: Q1: thi gian gii m lnh Q2: thi gian c lnh Q3: thi gian thc thi d liu Q4: thi gian vit d liu

Mi bc tng ng vi 1 chu k xung ca vi iu khin. Xung dao ng ca vi iu khin c to ra t mch dao ng bn ngoi nh thch anh, mch RC hoc mch dao ng bn trong (Phn cu hnh cho dao ng s c cp mc khc). Nu dng b dao ng xung thch anh c tn s f=4MHZ Chu k xung =1/tn s xung=1/4MHz Chu k lnh = 4 * chu k xung= 4/4MHZ= 1us (micro giy)

Hu nh tt c cc lnh trong 35 lnh ca vi iu khin PIC16F thc hin trong 1 chu k lnh tr 1 s lnh c bit nh lnh CALL, GOTO, RETURN, RETFI,RETLW mt 2 chu k lnh. Ngoi ra cn c mt s lnh khi th thc hin trong 1 chu k lnh khi th 2. l cc lnh DECFSZ, INCFSZ, BTFSZ, BTFSC. (Xem tp lnh trang 158-datasheet 16f877a) Ta ly lnh DECFSZ gii thch cho d hiu: V d: DECFSZ bien,1 GOTO nhan1 GOTO nhan2 Lnh u tin DECFSZ gim thanh ghi bien i 1 n 1: bien=bien-1 Sau lnh ny kim tra bien: Nu bien=0 nhy qua 1 lnh, tc l nhy n v thc hin lnh GOTO nhan2 Nu bien#0 th khng nhy tc l thc hin lnh GOTO nhan2 Nh vy nu bien#0 (tc l trc khi gp lnh ny bien #1)th vi iu khin mt mt chu k lnh thc hin lnh( thc hin thao tc tr) Nu bien=0 (tc l trc khi gp lnh ny bien=1) th vi iu khin mt 2 chu k lnh thc hin lnh(1 chu k lnh thao tc tr + 1 chu k lnh nhy) Thi gian thc hin lnh INCFSZ, BTFSC,BTFSS cng tng t nh vy

3.20 Chng trnh con to thi gian tr: Trong thc t vit chng trnh iu khin cho mt s thit b ta hay to mt khong thi gian tr. V d: s kin 1 Ch mt khong thi gian s kin 2 V vy i hi ta phi c mt chng trnh con to thi gian tr ny. tng c mt chng trnh con to thi gian tr l: Mun to ra mt khong thi gian tr n (micro giy) ta to mt chng trnh m thi gian thc hin xong n l n (micro giy) Ta bit: mt lnh thc hin trong 1 chu k lnh (tr mt s lnh c bit), mt chu k lnh tnh theo n v micro giy. V d: nu dng b dao ng ngoi s dng thch anh c tn s fosc=4Mhz Suy ra, chu k lnh= 4*chu k xung= 4/tn s xung= 4/4Mhz=1 mico giy Nh vy to ra khong thi gian n micro giy n gin ta to ra mt chng trnh m thi gian thc hin n l n chu k lnh V d: to thi gian tr 20 mico giy Ta dng 20 lnh NOP: NOP NOP ------NOP Tuy nhin cch lm th hi th cng, v ta cng khng c thi gian m nh n dng NOP nh vy (v d: n=200.000!!!!) Ta phi dng cc lnh khc vi thut ton phc tp hn. Ta i vo tng bc kho st phng php ny. 3.20.1 Vng 1: Ta c cc cu lnh sau: decfsz vong1,F goto $-1 Trong vong1 l bin c to ra trc Ta tnh th thi gian thc hin 2 lnh trn:

Vong1=vong1-1

Vong1=0 ? YES Thot

NO

Nh bn cc mc trc lnh goto mt 2 chu k lnh, lnh DECFSZ f,z mt 1 chu k lnh khi f #0 v mt 2 chu k lnh khi f=0 Gi s ban u: Vong1=2. Ln 1: decfsz vong1,f -> vong1=1 -> vong1#0 (mt 1 chu k lnh) Goto $-1 (mt 2 chu k lnh) Ln 2: dectsz vong1, f -> vong1=0 chng trnh b qua lnh goto -> thot (mt 2 chu k lnh) Nh vy mt tng cng: (1+2)+2= 5 chu k lnh Gi s ban u: Vng 1=3: Ln 1: decfsz vong1,f -> vong1=2 -> vong1#0 (mt 1 chu k lnh) Goto $-1 (mt 2 chu k lnh) S chu k lnh mt= 3 chu k lnh Ln 2: decfsz vong1,f -> vong1=1 -> vong1#0 (mt 1 chu k lnh) Goto $-1 (mt 2 chu k lnh) S chu k lnh mt = 3 chu k lnh Ln 2: dectsz vong1, f -> vong1=0 chng trnh b qua lnh goto -> thot S chu k lnh mt = 2 chu k lnh Tng s chu k lnh mt = 3*2 +2

C nh vy th c th qui np lnh S chu k lnh mt tng cng vi mt gi tr ca bin vong1 l: 3* (vong1-1) +2 =3*vong1-1 (1) (3 chu k lnh cho (vong1-1) ln u v 2 chu k lnh cho ln cui) S chu k lnh ti thiu v ti a to tr c. Khi vong1=1: s chu k lnh= 2 Khi vong1=0: s chu k lnh= 3*256-1= 767

3.20.2 Vng 2: Ta c on lnh sau: decfsz vong1,F goto $-1 decfsz vong2,F goto $-3 Thut ton:

Vong1=vong1-1

Vong1=0 ? YES Vong2=vong2-1

NO

Vong2=0 ? YES Thot Gi s ban u:

NO

Vong1=3, vong2=3 Nh phn tch trong mc 3.10.1, s chu k lnh mt cho n khi chng trnh bt u x l vong2 (tng ng vi s chu k lnh mt cho n khi nhy n thot trong mc 3.10.1) l: 3*vong1 -1 chu k lnh n y vong1=0, x l tip vong2 Ln 1: decfsz vong2,f : vong2=vong2-1=3-1=2, vong2#0 nhy n goto $-3 (mt 1 chu k lnh) Goto $-3 nhy n lnh decfsz vong1,f Tng chu k lnh mt = 3 chu k lnh Ti lnh: decfsz vong1,f (vong1 by gi ang =0) Xem nh y l chu trnh ging mc 3.10.1 vi vong1=0 Suy ra cho n khi gp li decfsz vong2,f mt: 3*256-1=767 chu k lnh Nh vy tng s chu k lnh cho ln 1 l 767+3= 770 chu k lnh Ln 2: decfsz vong2,f : vong2=vong2-1=2-1=1, vong2#0 nhy n goto $-3 Tng t nh trn: tng s chu k lnh cho ln 2 l 767+3= 770 chu k lnh Ln 3: decfsz vong2,f : vong2=vong2-1=1-1=0, vong2=0 nhy n thot (mt 2 chu k lnh) Nh vy tng chu k lnh mt i l: 3*vong1-1 + 770*2 +2 Qui np ln: 3*vong1-1 + 770*(vong2-1) +2= 3*vong1 +770*vong2 -769 Vy s chu k lnh = 3*vong1 +770*vong2 -769 (2) 3.20.3 Vng 3: Ta c on lnh sau: decfsz vong1,F goto $-1 decfsz vong2,F goto $-3 decfsz vong3,F goto $-5 Thut ton: (mt 2 chu k lnh)

Vong1=vong1-1

Vong1=0 ? YES Vong2=vong2-1

NO

Vong2=0 ? YES Vong3=vong3-1

NO

NO Vong3=0 ? YES Thot

Tnh ton tng t nh trn, ta c cng thc: S chu k lnh= 3*vong1+ 770*vong2 + 197122*vong3 - 197889 (3) Ta cng cn ch y na l np gi tr u cho bin vong1 ta mt 2 chu k lnh cho 2 lnh sau: Movlw d gi tr u (v d: movlw d100)

Movwf vong1 Tng t nh vy nu dng vng 2 ta s mt thm 2 lnh cho vic khi to gi tr u bin vong2 nh vy mt 4 chu k lnh Tng t nh vy nu dng vng 3 ta s mt thm 2 lnh cho vic khi to gi tr u bin vong3 nh vy mt 6 chu k lnh Ta phi gi chng trnh con to thi gian tr: call delay mt thm 2 chu k lnh Trong chng trnh con delay c lnh tr v return mt thm 2 chu k lnh. Nh vy cng thc tng qut cui cng l: Nu ch s dng vng 1: S chu k lnh = 3*vong1-1+2 (cho khi to bin vong1) +2 (cho lnh call delay) +2 (cho lnh return) S chu k lnh= 3*vong1+5 Nu s dng vng 1 v vng 2: S chu k lnh = 3*vong1 +770*vong2 -769 +4 (cho khi to bin vong1, vong2) +2 (cho lnh call delay) +2 (cho lnh return) S chu k lnh= 3*vong1+770*vong2-761 (5) Nu s dng c 3 vng 1, vng 2 v vng 3: S chu k lnh = 3*vong1+ 770*vong2 + 197122*vong3 - 197889 +6 (cho (6) (4)

khi to bin vong1, vong2, vong3) +2 (cho lnh call delay) +2 (cho lnh return) S chu k lnh= 3*vong1+ 770*vong2 + 197122*vong3 -197879 Tnh ton: Gi s ta dng b dao ng thch anh f=4Mhz, cho chn rb0 ln mc 1, to thi gian tr 200ms, cho chn rb0 xung mc 0. Thi gian tr y l 200ms. Gi s ta p dng thut ton 3 vng. 200ms= 200.000 micro giy= 200.000 chu k lnh p dng cng thc (6) ta c: 3*vong1+ 770*vong2 + 197122*vong3 -197879 = 200.000 Suy ra: 3*vong1+ 770*vong2 + 197122*vong3 = 397897

Vong3= 397897/197122= 2 3*vong1+770*vong2= 397897-197122*vong3= 397897-197122*2=3653 Suy ra: Vong2= 3653/770=4 3*vong1=3643-770*vong2=563 Suy ra: vong1=563/3=187 S d= 563-3*187=2 Nh vy: 200.000= 3*187 +770*4+197122*2 +2 S 2 d ra ta dng 2 lnh NOP Chng trnh chnh v chng trnh con delay s nh sau: ; DUA FILE LIET KE VAO #include p16f877a.inc ; KHAI BAO CAU HINH __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF ; KHAI BAO BIEN O DAY ; DIA CHI BIEN O VUNG NHO BIEN BANK0 cblock 0x21 vong1, vong2, vong3 endc variable giatricong=0x25 ;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY org 0x000; CHI DAN BIEN DICH ; NHAY TOI CHUONG TRINH CHINH goto main ; chi dan bien dich ; CHUONG TRINH CHINH BAT DAU TU DAY org 0x005 main banksel trisb

clrf trisb banksel PORTB START: BSF PORTB,0 CALL DELAY BCF PORTB,0 CALL DELAY GOTO START DELAY: nop nop movlw d'187 movwf vong1 movlw d'4 movwf vong2 movlw d'2 movwf vong3 decfsz vong1,f goto $-1 decfsz vong2,f goto $-3 decfsz vong3,f goto $-5 ; THOAT KHOI CHUONG TRINH CON return ; KET THUC MOI CHUONG TRINH end

CHNG 4: CC PHNG PHP HIN TH TRONG CC THIT B DNG VI IU KHINPHN L THUYT:Hin nay, trong hu ht cc thit b nhng u c s dng cc khi hin th. Mc ch cho ngi dng gim st, ci t v hin th cc thng s ca thit b cng nh i tng cn gim st iu khin. C rt nhiu phng php hin th, c th k ra nh sau:Hin th cnh bo, bo li: thng thng dng led n. C th hin th theo kiu dng nhiu mu khc nhau hoc bt tt v.v Hin th s liu: dng led 7 on, LCD hoc LCD ha v.v Hin th trn my tnh: dng cc phn mm iu khin gim st, kt ni thit b v my tnh thng qua chun RS232 hoc cc chun mng (gim st t xa)

Trong bi ny s gii thiu 2 cch hin th u, phn hin th bng my tnh s c cp trong bi hc v chun giao tip RS232. 4.1 Hin th bng led n: y l cch hin th n gin nht. Thng thng cch hin th ny dng bo mt trng thi no y ca thit b nh trng thi lm vic ca ngun (li hoc khng li), cng nh cc khi chc nng khc. C rt nhiu loi led n dng hin th. Phng php n gin nh sau:

Hnh 2.1: Hin th led n Cc led ny sng khi c cp p c 2 V, dng 10-20mA.

Nu dng mt chn ra t vi iu khin bt tt led, phi dng thm in tr hn dng,hn p. Tnh ton nh sau: Mun bt n, ta cho chn ra vi iu khin ln mc cao ni vi u vo ca mch trn. Nh ta bit, chn ra vi iu khin mc logic cao c in p 5V. Cho in p ri trn led l 2V, dng qua l 15mA. Suy ra, in p ri trn tr l 3V. Dng qua led chnh l dng qua in tr v bng 15mA. Suy ra, in tr dng: R=3/15mA=200 ohm. Chn in tr tiu chun 220 ohm (in tr tiu chun: 10, 11, 12, 13, 15, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 43, 47, 51, 56, 62, 68, 72, 82, 91 v cc bi s) 4.2 Hin th bng led by on- 7 segment led: 4.2.1 Cu to ca led 7 on:

Hnh 2.2: Led 7 on Mt led 7 on thc ra l gm 7 led n ni vi nhau (8 led n nu c thm du chmdp). C 2 loi:Chung catod: cc u catod (cc m) c ni chung vi nhau v ni vi t, cc u anod a,b,c,d,e,f,g,h c a ra ngoi (cc chn) nhn tn hiu iu khin. Khi cp in p 5v cho mi u anod, led tng ng vi u s sng

-

Chung anod: cc u anod (cc m) c ni chung vi nhau v ni vi ngun, cc u catod a,b,c,d,e,f,g,h c a ra ngoi (cc chn) nhn tn hiu iu khin. Mun led n no sng ch vic a chn catod ca led tng ng xung mc 0V.

Hnh 2.3: Cu to ca 2 loi led 7 on 4.2.2 Hin th 1 led 7 on dng vi iu khin:

Nh gii thiu phn trn, thc cht led 7 on gm 8 hoc 7 led n ni vi nhau. V vy iu khin thanh led n sng, cch thc hin phn cng nh hnh 2.1. C th hn, nh dng led chung anod nh hnh v trn. Mi u vo a,b,c,d,e,f,g,h c ni vi mt chn ca vi iu khin, tng ng l RB0, RB1, ..RB7, thng qua cc in

tr phn p 200 ohm, u anod chung c ni vi ngun. led n sng n gin ta a chn vi iu khin ni vi led xung mc thp. Nh trn hnh 2.4 trn, led 7 on hin th s 2 th cc led a,b,d,e,g sng; cc led c, f tt. Gi tr sng tng ng chn vi iu khin ni vo mc 0, gi tr tt tng ng vi chn vi iu khin ni vi mc 1. Do ni dung ca thanh ghi PORTB l: 0 0 1 0 0 1 0 0

y l m led 7 on ca s 2 Nh vy, chng ta lu mt iu rng, d liu xut ra led 7 on l m led tng ng vi s cn xut M led tng ng vi cc s t 0 n 9 l: 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 Cch iu khin led 7 on chung catod th ngc li. 4.2.2.1 Chng trnh iu khin hin th 1 led 7 on: Xem theo file nh km 4.2.3 Hin th nhiu led 7 on dng vi iu khin: Trong thc t, ta phi dng nhiu led 7 on hin th. Vy gii quyt vic hin th nhiu led nh th no? V d: hin th s 35 bng 2 led 7 on. i chiu vi cch hin th 1 led 7 on, ta ngh n gin ch l dng 1 cng hin th s 3, 1 cng khc hin th s 5. Nh vy ta mt 2 cng. Hin th 4 led th mt 4 cng => ton b chn trn vi iu khin dng cho vic hin th ledKhng cn chn giao tip vi cc thit b khc nh bn phm, u vo s khc v.v Khng kh thi! Ta c phng php tit kim chn hn gii quyt:

Hnh 2.5: Hin th 2 led 7 on Cc chn d liu (chn s nhn m led t vi iu khin) c ni tng ng vi nhau v ni vo 1 cng ca vi iu khin, chng hn nh cng B Chn ngun ca 2 led c iu khin bi 2 chn trn vi iu khin, chng hn chn RA4 v RA5 nh trn hnh, thng qua cc B ca 2 transistor pnp. Qu trnh hin th con s 35 trn 2 led s nh sau:Cho chn RA4 (chn ni vi led hng chc) xung mc thp, transistor th nht m do tip gip BE thun, chn RA5 ln mc cao (chn ni vi led hng n v), transistor th hai khng m. Vy ch c led hng chc c cp ngun. Cho cng B xut d liu m led ca s 3. Ch c led hng chc c cp ngun nn ch c led ny sng To thi gian tr 10-20ms iu khin tng t cho led hng n v c cp ngun, led hng chc khng cp ngun, xut d liu m led s 5 ra cng B. Led n v hin th s 5. To thi gian tr 10-20ms Quay li bc th nht

Nh vy, s 3 hin th 10ms, s 5 hin th 10ms v quay vng nh vy. Thi gian ny rt nhanh, do hiu ng ca mt, ta cm gic nh s 35 hin th cng lc. Bi ton c gii quyt, ta ch mt c 10 chn iu khin 2 led. Cch hin th nhiu led cng tng t nh vy. Cng gii thch thm l do dng transistor ni vo RA4, RA5. Do chn vi iu khin c dng khong vi chc mA, y l chn cp ngun cho led 7 on, mi led n trong Led 7 on mt 20mA vy c led 7 on mt trn 100mA. V vy ta phi dng transistor khuch i dng. 4.2.3.1 Chng trnh iu khin hin th 2 led 7 on: Xem theo file nh km 4.3 Hin th dng LCD:

LCD1LM016L

VSS VDD VEE

RS RW E 4 5 6

1 2 3

Hnh 2.6: Cc chn LCD 4.3.1 Cc chn c bn ca LCD 2 dng 16 k t: VSS: Chn t VCC: Chn ngun VEE: Chn hiu chnh sng ca LCD RS: =0: LCD s nhn lnh t vi iu khin

7 8 9 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

R/W:

=1: LCD s nhn k t t vi iu khin hin th

=1: Vi iu khin c d liu t LCD =0: Vi iu khin ghi d liu ln LCD

Thng thng Vi iu khin ch yu ghi d liu ln LCD nn chn ny thng ni t E: Chn cho php (Enable). Sau khi lnh hoc d liu c chun b trn ng d liu, to xung mc cao-mc thp s bt u qu trnh LCD nhn d liu hoc lnh t vi iu khin. D0-D7: cc chn d liu, ni vi iu khin truyn lnh hoc d liu ln LCD.

4.3.2 Khi to LCD: LCD c nhiu lm vic, c th k ra nh sau:Ch 1 dng hay 2 dng Ch giao tip 4 bit hay 8 bit Ch font 5*8 hoc 5*10 Ngoi ra cn c th thay i v tr hin th k t v.v

V vy, trc khi bt u qu trnh hin th mt chui k t no , ta cn qu trnh khi to ci t cc ch ny. Vi iu khin thc hin qu trnh khi to ny bt cch ghi n LCD mt chui cc lnh. Cn c vo chc nng ca cc chn vi iu khin c gii thiu trn, ta a ra qui trnh ca vic gi mt lnh t Vi iu khin n LCD:Cho chn R/W=0 xc nh y l ghi xung LCD (thng thng chn ny c ni t, nn mc nh chn ny mc 0, ta khng cn quan tm n na) Cho chn RS=0 xc nh y l lnh m vi iu khin gi xung LCD (phn bit vi RS=1, gi k t hin th)

-

Gi m lnh xung LCD theo cc ng d liu (RD0-RD7 nu dng ch 8 bit, R4R7 nu dng ch 4 bit)

-

a chn E (chn cho php- Enable) ln mc cao, mc 1 To tr vi chu k lnh a chn E xung mc thp, mc 0

M lnh nh gii thiu trong phn trn ty thuc vo tng lnh, y gii thiu mt s lnh c bn nh sau: . Lnh ci t ch lm vic: 0 0 DL: N: F: = 1: font 5x10 dot = 0: font 5x8 dot = 1: 2 dng = 0 1 dng 1 DL N F -

= 1: 8 bit = 0: 4 bit

. Lnh t ch tng gim a ch: 0 0 I/D: S: 0 0 0 1 I/D S

= 1 tng a ch = 0 gim a ch

=1: Ci t di chuyn cng a ch

. Lnh t ch hin th: 0 0 0 0 1 D C B

D: Cho php hin th C: ci t hin th con tr B: nhp nhy v tr k t

. Lnh t v tr hin th ca k t: 1 C C C C C C C

a ch dng 1: 00- 0F a ch dng 2: 40-4F

V vy, mun hin th u dng th nht, m lnh s l 0x80 mun hin th u dng th hai, m lnh s l 0xC0 . Lnh xa mn hnh: m lnh 0x01 . Lnh tr v u dng th nht: m lnh 0x02 Chi tit c th xem datasheet i km 4.3.2 Ghi k t ln LCD hin th: Sau khi thc hin qu trnh khi to gi cc lnh ci t ch lm vic ca LCD, k t s c hin th ln LCD bt k khi no vi iu khin mun gi. Qu trnh gi k t gm cc bc sau:Cho chn R/W=0 xc nh y l ghi xung LCD (thng thng chn ny c ni t, nn mc nh chn ny mc 0, ta khng cn quan tm n na) Cho chn RS=1 xc nh y l k t m vi iu khin gi xung LCD (phn bit vi RS=0, gi lnh) Gi m ascii ca k t cn hin th xung LCD theo cc ng d liu (RD0-RD7 nu dng ch 8 bit, R4-R7 nu dng ch 4 bit) a chn E (chn cho php- Enable) ln mc cao, mc 1

-

To tr vi chu k lnh a chn E xung mc thp, mc 0

Cu hi 1: L do v sao chng ta li dng transistor trong cch ni vi iu khin vi 2 led 7 on v cch tnh ton mch nh th no?: Nu chng ta khng dng transistor. S nh sau:

Trong cc chn a,b,c,d,e,f,g,h ca c 2 led 7 on s ni tng ng vi nhau cng ni vo rb0,rb1..rb7 thng qua in tr 220 ohm Nh ta bit, 1 led 7 on gm 8 led n bn trong. Vi loi led chung anod nh trn ta v li s in ca tng led 7 on nh sau:

Nh vy dng i t chn RA0 ln nht khi tc c cc led n a,b,...g,h ca led 7 on u sng. Khi cc chn a,b,c...g,h ni t

Ta tnh dng chy ra t RA0:

Gi s in p trn mi led l 1.5 V. RA0 mc 1 tng ng 5 V Suy ra p trn R1 l : U(R1)=5-1.5=3.5V Suy ra dng chy qua R1 v led l: I (led)= U(R1)/R1=3.5/220=15.9mA Dng chy ra t chn RA0: I(RA0)= 8 I(led)=8*15.9= 127mA iu ny khng th c v mi chn ca vi iu khin pic16f877a cho dng ra ti a cho php l vi chc mA. gii quyt vn ny, ta phi dng transistor khuch i, khi tn hiu ra t RA0 ch l tn hiu iu khin. Dng n led s do ngun trc tip cp S nh sau:

S chi tit s nh sau:

Nh vy khi RA0 mc 0 (0V) transistor dn. Dng t ngun 5 V i vo led qua tr xung chn a,b,c,...e,f,g ca led 7 on (cc chn ny ni vi RB0,RB1..RB6,RB7) Mun led tng ng sng ta cho cc chn a,b...g,h (tc l RB0,RB1,...RB6,RB7) xung mc 0. Khi RA0 mc 1 (5V), transistor khng dn, khng c dng vo cc led nn cc led khng sng (d cho cc chn a,b,...g,h) c mc 0 hay khng Nh vy s mch nh hnh trn l tha mn. Vn l i tm gi tr ca cc in tr ng ra ca tng led ni vi cc chn a,b,c... V in tr phn cc ti RA0- ni vi cc B ca transistor. cc led trong led 7 on sng u nhau r rng cc in tr ng ra ca tng led phi bng nhau. R1=R2=...=R7 Ta cng bit l mi led c sng hay khng ph thuc vo d liu cc chn a,b,..g,h tc l cc chn RB0,RB1,...RB6,RB7 mc 0 hay mc 1 (5V)

Trong cc ng dng ca ta dng led 7 on hin th cc con s t 0-9. nh vy s lng led sng l thy i Trng hp c s lng led sng t nht l khi hin th s 1, c 2 led n sng Trng hp s lng led sng nhiu nht khi hin th s 8. (s 8 c du chm) Ta cng mun rng d l hin th bt c s no trong cc s t 0-9 th i hi led phi sng u v mc sng l nh nhau khi th hin cc s khc nhau Suy ra l in p cc C ca transistor l khng i i vi ti khc nhau (do mi led sng th s lng led l khc nhau) Trng hp ny ch xy ra khi transistor nu nh m th phi m bo ha trong tc c cc trng hp hin th cc s khc nhau. Khi Vc=Ve-0.1=5V-0.1V=4.9V. T ta tnh ra in tr ca R1=R2=..=R7 theo cch tnh ca led n cp trong chng 4 (phn 4.1) y ta chn: R1=R2=..=R7=220 ohm Gi s in p trn mi led l 1.5V. Ta tnh c dng in qua mi led khi sng: Iled=(4.9V-1.5)/220= 15.5 mA Nh cp nh trn, ta phi chn R10- in p phn cc cho cc B ca transistor transistor m bo ha khi led 7 on hin th bt k s g t 0-9. Trng hp s led sng t nht khi led 7 on hin th s 1, tc led b v c sng, tc c cc led khc tt, ta c hnh sau:

Trng hp s led sng nhiu nht khi led 7 on hin th s 8 c chm, tc tc c cc led u sng, ta c hnh sau:

Khi : Ic = 8 Iled = 8*15.4 = 123 mA V transistor bo ha nn: Ic=Icbaohoa=123mA iu kin transistor bo ha l: Ib>Icbaohoa/k

K l h s khuch i 1 chiu. Gi s y: K=100 Suy ra: => Suy ra: 4.3/R10>123/100 Suy ra: R10 Icbaohoa/100 Vb/R10 > Icbaohoa/100 Vb=Ve-Veb=5-0.7=4.3 V

StartChn bank nh cha TRISB Xa thanh ghi TRISB (Cho php cc chn PORTB u ra) Chn bank nh 0 cha PORTB

Gn: W=9 Gi chng trnh con Bng m led 7 on Gi chng trnh con Delay 200ms Gn: W=0 Gi chng trnh con Bng m led 7 on Gi chng trnh con Delay 200ms

Trong chng trnh ny phn quan trng l gi chng trnh con bng m led 7 on.Ta cng kho st chng trnh ny.

Vi s kt ni 8 chn a,b,c..g,h ca led 7 on vi 8 chn RB0,RB1,..RB6,RB7 ca vi iu khin, u anod chung ca led 7 on ni vi ngun . Quay li s chn ca led 7 on d hnh dung:

Ta bit rng: Mun hin th s 1 ta phi a ra PORTB m led 7 on ca s 1 (ch c b v c sng, cn li tt): RB7 1 RB6 1 RB5 1 RB4 1 RB3 1 RB2 0 RB1 0 RB0 1

(nh rng: led sng th chn RB phi mc 0) Vy m led 7 on ca s 1 l: 0xF9 Nh vy led 7 on hin th s 1, n gin ta dng lnh: MOVLW 0xF9 MOVWF PORTB i vi 10 s t 0-9 s c 10 m led tng ng: 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 Vn y l: trong cc ng dng thng thng con s cn hin th l ngu nhin do mt qu trnh mang n V d: ta dng led 7 on hin th s ln tc ng ca phm bm. Nu phm cha bm th led hin th s 0 Nu bm 3 ln th hin th s 3 Vy con s ny l khng xc nh

Nh vy chng trnh s khng th bit l 1 hay 9 ln m hin th xut m led 0xf9 hay 0x90 ra cng PORTB hin th Ta phi gii quyt vn ny 1 cch t ng. S dng k thut bng: Trc khi i vo ta gii thiu li lnh RETLW: Chng trnh con c 2 loi: loi khng tr v gi tr - kt thc bng RETURN Loi tr v gi tr- kt thc bng RETLW (tr gi tr v cho thanh ghi W)

(Cng ging nh Procedure v Function trong ngn ng C) Cch gi chng trnh nh sau: MOVLW Ds CALL BANGMA MOVWF PORTB Ta xem chng trnh con bng m led 7 on nh sau: BANGMA ADDWF PCL,F RETLW 0XC0 RETLW 0XF9 RETLW 0XA4 RETLW 0XB0 RETLW 0X99 RETLW 0X92 RETLW 0X82 RETLW 0XF8 RETLW 0X80 RETLW 0X90 Gi s ta cn hin th s 1: MOVLW D1 CALL BANGMA MOVWF PORTB Ta xem chng trnh chy nh th no: Sau lnh: MOVLW D1: W=1

Sau lnh: CALL BANGMA: nhy n chng trnh con BANGMA Sau lnh: ADDWF PCL,F : PCL=PCL +W=PCL+1 V sau 1 lnh th PCL=PCL+1 nn sau lnh ADDWF PCL,F ta c: PCL=PCL+2 Do chng trnh vi iu khin chy theo PC tc PCL nn con tr chng trnh nhy n a ch lnh RETLW 0XC0 (2 lnh k t lnh ADDWF PCL,F) Khi W=0xC0 l m led 7 on ca s 1 Vy nu a W=1 v gi chng trnh con BANGMA ta c W=m led 7 on ca s 1 Tng t nh vy i vi W=0-9 R rng vi cch dng K THUT BNG cho php ta t ng ly gi tr ca m led V d: gi s mun hin th s ln phm c bm ta dng bin solanbam, gi s solanbam c x l bng on chng trnh x l phm bm pha trc. hin th ta dng on chng trnh sau: MOVF solanbam,f CALL BANGMA MOVWF PORTB R rng vi on chng trnh trn th khng cn bit solanbam l bao nhiu chng trnh cng t ng cp nht c Cu hi 3: Hn ch ca chng trnh con bng m led 7 on: Ta xem li chng trnh c listting vi ct u tin l a ch ca lnh trong b nh chng trnh vi thay i nh l bangma c bt u a ch 0x100: --E:\ADP\TEACHER\VIDIEUKHIEN\BAITAP\LED7DOAN0\test.asm 1: 2: 3: 4: 5: 6: 7: 8: ; DUA FILE LIET KE VAO #include p16f877a.inc ; KHAI BAO CAU HINH __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF ; KHAI BAO BIEN O DAY ; DIA CHI BIEN O VUNG NHO BIEN BANK0 cblock 0x20 vong1, ---------------------------------------

9: 10: 11: 12: 13:

vong2, vong3 endc ; ;CHUONG TRINH VI DIEU KHIEN CHAY TAI org 0x000; CHI DAN BIEN DICH ; NHAY TOI CHUONG TRINH CHINH 17: goto main

14: DAY 15: 16: 0000 2805 GOTO 0x5 18: 19: 20: 21: 22: 23: 24: 0005 0006 1683 1303 BSF 0x3, 0x5 BCF 0x3, 0x6 26: CHAN PORTB LA DAU RA 0007 0008 0009 0186 1283 1303 CLRF 0x6 28: BCF 0x3, 0x5 BCF 0x3, 0x6 30: 31: 32: 33: 000A 000B 3009 2100 MOVLW 0x9 CALL 0x100

; chi dan bien dich ; CHUONG TRINH CHINH BAT DAU TU DAY org 0x005 main ; CHON BANK NHO CHUA THANH GHI TRISB 25: banksel trisb

; XOA THANH GHI TRISB CHO PHEP CAC 27: 29: clrf trisb banksel PORTB

; CHON BANK NHO CO THANH GHI PORTB

; BAT DAU XU LY start: LOOP: 34: 35: movlw d'9 CALL BANGMA

36: 000C 000D 000E 000F 0010 0011 0012 0013 0014 0086 2015 3000 2100 0086 3000 008A 2015 280A MOVWF 0x6 38: CALL 0x15 40: MOVLW 0 CALL 0x100 43: MOVWF 0x6 MOVLW 0 MOVWF 0xa CALL 0x15 GOTO 0xa 49: GHI TRUNG GIAN W 50: 51: 52: 53: 54: 0015 0016 0017 0018 0019 001A 001B 001C 001D 001E 001F 0000 0000 30B9 00A0 3004 00A1 3002 00A2 0BA0 281D 0BA1 NOP NOP MOVLW 0xb9 MOVWF 0x20 MOVLW 0x4 MOVWF 0x21 MOVLW 0x2 MOVWF 0x22 DECFSZ 0x20, F GOTO 0x1d DECFSZ 0x21, F 55: 56: nop 57: 58: 59: 60: 61: 62: 63: 64: 65: movlw d'185 movwf vong1 movlw d'4 movwf vong2 movlw d'2 movwf vong3 decfsz vong1,f goto $-1 decfsz vong2,f nop ; CHUONG TRINH CON DELAY 200MS DELAY: 44: 45: 46: 47: MOVWF PORTB movlw high (DELAY) movwf pclath CALL DELAY 41: 42: movlw d'0 CALL BANGMA 39: CALL DELAY 37: MOVWF PORTB

48: GOTO LOOP ; DUA DU LIEU GIATRICONG VAO THANH

0020 0021 0022 0023

281D 0BA2 281D 0008

GOTO 0x1d DECFSZ 0x22, F GOTO 0x1d RETURN 70: 71: 72: 73:

66: 67: 68: 69:

goto $-3 decfsz vong3,f goto $-5 return

ORG 0X100 BANGMA 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: ADDWF PCL,F RETLW 0XC0 RETLW 0XF9 RETLW 0XA4 RETLW 0XB0 RETLW 0X99 RETLW 0X92 RETLW 0X82 RETLW 0XF8 RETLW 0X80 RETLW 0X90

0100 0101 0102 0103 0104 0105 0106 0107 0108 0109 010A 2007

0782 34C0 34F9 34A4 34B0 3499 3492 3482 34F8 3480 3490 3490

ADDWF 0x2, F RETLW 0xc0 RETLW 0xf9 RETLW 0xa4 RETLW 0xb0 RETLW 0x99 RETLW 0x92 RETLW 0x82 RETLW 0xf8 RETLW 0x80 RETLW 0x90 85: RETLW 0x90

86: end

Trc khi i vo phn tch cc kh nng c th xy ra, ta xem k li nguyn l lm vic ca thanh ghi PC. Thanh ghi PC c di 13 bit chia lm 2 thanh ghi PCL (tc 8 bit thp ca thanh ghi PC PC) v PCH (5 bit cao ca thanh ghi PC- PC): Bit 12 Bit 11 PCH Bit Bit 10 9 Bit 8 Bit 7 Bit 6 Bit 5 PCL Bit Bit 4 3 Bit 2 Bit 1 Bit 0

Trong thanh ghi PCL c th c /ghi c

Thanh ghi PCH khng th c ghi c. Tuy nhin c th ghi c thng qua thanh ghi PCLATH. Ngha l 5 bit cao ca thanh ghi PC, PC c th cp nht c bng cch vit vo 5 bit thp ca thanh ghi PCLATH. Khi chng trnh c reset li t u, cc bit PC c xa v 0 C iu ch l: Nu c lnh can thip vo thanh ghi PCL th lp tc cc bit cao ca thanh ghi PC s c cp nht t thanh ghi PCLATH Nh vy, cc bit cao ca thanh ghi PC c cp nht khi xy ra 1 trong 2 iu kin: Cp nht PCL Cp nht PCLATH

V d 1: khi thc hin lnh CALL nhn Nu sau nhn l lnh a ch k (00xff Do lnh CALL lm PC thy i ni dung cc bit cao Khi gp lnh tc ng n thanh ghi PCL: ADDWF PCL,F Th ng thi PCH cng c cp nht qua PCLATH Tuy nhin PCLATH li khng c cp nht trc nh vy a ch PC by gi 0) . Thi im ny c xc nh thng qua trng thi ca bit c. Ngc li, ta mun thc hin nh thi khong thi gian t sau mt s kin 1 nh sau:S kin 1 To khong thi gian tr t S kin 2

Ta lm cc bc:S kin 1 Gn gi tr ban u cho TMR = 2 8 n t Kim tra bit c Khi bit c = 1, thc hin s kin 2.

Tht vy, sau 1 (s) TMR tng ln 1 n v tng gi tr cho TMR t 2 8 n t n gi tr (chuyn t 255 +1 v 0) (khi bit c c set ln 1) mt 2 8 n ( 2 8 n t ) = t (s) Vy khong thi gian t sau s kin 1 (khi TMR bt u c gn) n s kin 2 (ngay sau khi bit c c set) l t (s) ng nh yu cu ca ta. V d: nh thi 200 (s) dng Timer0 (8 bit; n=1; gi tr ti a l 255) ta cho TMR0= 256-200=56 Nh vy: Sau 1 s u tin. TMR0=TMR0+1=57 Sau 2 s . TMR0=TMR0+1=58 -------

Sau 200 s, TMR0=TMR0+1= 255+1= 0 (TMR0 c gi tr ln nht l 255)

5.2.2 Ch b m:Khi c ci t trong ch ny, mt chn chc nng trn vi iu khin s tr thnh chn u vo xung ca b m. V d: chn RA4 i vi Timer0 v RC0 i vi Timer1. Hot ng ca n c nt ging vi ch nh thi. Khi c ci t hot ng trong ch b m, Gi tr ca thanh ghi TMR s t ng tng ln 1 n v khi v ch khi c mt xung i vo chn u vo xung ca timer . Khi gi tr ca TMR0 t n gi tr ti a (chuyn v 0 do 255+1=256 ), bit c ca Timer s c set ln mc 1 v TMR b xa, TMR=0. Nh vy, v cch hot ng trong ch ny ch khc vi ch nh thi ch, thay v TMR t ng tng ln sau mi chu k lnh, th TMR tng ln khi c mt xung i vo chn u vo xung ca Timer . Dng xung c xc nh l sn m (t mc cao -> mc thp) hay sn dng (mc thp->mc cao) ph thuc vo vic ci t bit chn dng xung tng ng . i vi Timer0: chn dng xung dung bit T0SE bt s 4 ca thanh ghi OPTION_REG T0IE=0: Chn dng xung dng (L->H) T0IE=1: Chn dng xung m (H->L) i vi Timer1: ch c dng xung u vo l xung dng Nguyn l hot ng nh thi v b m ny cng ng vi cc b vi iu khin, vi x l khc. Ta i vo kho st c th 2 Timer0 v Timer1 ca vi iu khin PIC.

5.3 Timer 0:5.3.1 c im: - Thanh ghi cha gi tr m l TMR0 c di 8 bit (s m ti a l 255). - Ni dung ca thanh ghi TMR0 c th c v ghi c - Hot ng 2 ch : b nh thi v b m - Trong ch b m: dng xung u vo c th la chn (sn dng hoc sn m)

- C b chia tn s c th thay i t l chia bng chng trnh 5.3.2 Cc bit iu khin: a. Bit chn ch : Timer0 hot ng 2 ch : b nh thi v b m la chn ch lm vic, ta gn gi tr cho bit T0CS (Timer0 Clock Select bit- Bit la chn ngun xung cho Timer), v tr ca bit ny l bit 5 ca thanh ghi OPTION_REG: T0CS=1: Timer0 hot ng ch b m (ngun xung l xung u i vo chn RA4) T0CS=0: Timer0 hot ng ch nh thi (ngun xung l dao ng thch anh, tn s=Fosc/4) b. Bit chn dng xung u vo: Khi hot ng ch b m, thanh ghi TMR0=TMR0+1 mi ln c 1 xung i vo chn RA4 Vn l dng xung l xung sn ln hay sn xung ci t dng xung ta gn gi tr cho bit T0SE (Timer0 Edge Select Bit- Bt chn dng sn xung), v tr ca bit l bt 4 ca thanh ghi OPTION_REG: T0SE=1: TMR0=TMR0+1 Khi c i trng thi t cao xung thp trn chn RA4 (sn m) T0SE=0: TMR0=TMR0+1 Khi c i trng thi t thp ln cao trn chn RA4 (sn dng) c. Cc bt ci t t l chia tn s: Nh trong phn a kho st, ngun xung tc ng c th xung i vo chn RA4 (trong ch b m) Hoc ngun xung t dao ng thch anh ( c chia 4- trong ch b nh thi) Trong thc t, dao ng t ngun xung trn phi i qua b chia tn s trc khi i vo tc ng n Timer0. B chia tn s ny c th ci t t l chia tn s C th ta hiu n gin nh sau: Trong ch b m, TMR0=TMR0+1 sau mi xung ca tn hiu i vo chn RA4 Vy tn s cp nht ca TMR0 l bng tn s xung

By gi do tn hiu xung t chn RA4 i qua b chia tn s trc khi tc ng thay i TMR0 Gi s t l chia l 1:2 ngha l tn s ca xung u ra ca b chia bng tn s ca xung vo RA4 Mi xung u ra ca b chia lm cho TMR0=TMR0+1 Vy tn s xung ca RA4=2 tn s cp nht TMR0 Do , sau khi c 2 tc ng vo RA4 th TMR0=TMR0+1 Tng t, i vi ch b nh thi Sau 2 chu k lnh, TMR0=TMR0+1 iu c bit l t l chia ny c th thay i c bng cch gn gi tr cho cc bit PS2,PS1,PS0- V tr cc bt l bit 2,1,0 ca thanh ghi OPTION_REG C th t l chia tng ng vi gi tr ca PS2,PS1,PS0 nh sau: PS2 PS1 PS0 T l chia 000 1:2 001 1:4 010 1:8 011 1:16 100 1:32 101 1:64 110 1:128 111 1:256 d. Bt chn b chia tn s cho TIMER0: Thc ra b chia tn s c th c la chn lm b chia cho Timer0 hoc Watch Dog Timer V vy, ci t b chia tn s lm vic vi Timer0 ta c gn gi tr cho bt PSA , v tr bit l bt s 3 ca thanh ghi OPTION_REG. PSA=0, b chia lm vic cho TIMER0 PSA=1, b chia lm vic cho Watch Dog Timer e. Bt c trng thi: Do di ca thanh ghi TMR0 l 8 bit, nh vy tt a vit c 255 Nu nh TMR0=255, nu tip tc c xung vo (t ngun dao ng thch anh trong ch nh thi hoc t chn RA4 trong ch b m), TMR0 = 255+1 = 256 b trn v TMR0=0

Mi ln TMR0 b trn, bit c trng thi s t ng set ln 1 bo trng thi trn Bit c ny c tn l TMR0IF (Timer0 Interrupt Flag- Bt c ngt), v tr bit l bt 2 ca thanh ghi INTCON. Ch l khi c trn gi tr ca thanh ghi TMR0, TMR0IF=1, TMR0=0 Ta phi xa TMR0IF bng chng trnh. Ton b hot ng ca timer0 c th tng kt theo s sau:

5.3.3 Cc thanh ghi lin quan:Thanh ghi TMR0 (a ch 01h): Cha gi tr m hin ti ca Timer 0 Thanh ghi Option_Reg (a ch 81h):

T0CS: Bit chn ch = 0: TMR0 hot ng ch nh thi = 1: TMR0 hot ng ch b m T0SE: Bit chn dng xung cho ch b m = 0: Xung sn ln = 1: Xung sn xung PSA: Bit chn ch cho b chia tn s PresCale l WatchDog_Timer hay Timer 0. = 0: B chia tn s dnh cho Timer 0 = 1: B chia tn s dnh cho Watch_Dog Timer PS2-PS0: 3 bit chn t l chia tn s nh gii thiu phn trn Thanh ghi INTCON (0Bh):

Bit TMR0IE: Bit ny bng 1 cho php ngt Timer 0. S kin ngt xy ra khi c s trn TMR0 t 255 xung 0. Bit TMR0IF: Bit c xc nhn gi tr TMR0 b trn t 255 v 0

BI 6: NGT

6.1 Ngt l g:Ngt hiu theo ngha n gin l cc s kin ngu nhin lm gin on qu trnh ang xy ra. c th d hiu khi nim mi ny ta cng a ra mt v d trong thc t nh sau: V d: Trong gi hc trn lp, ta ang hc bi, c chung in thoi hoc c bn gi, ta phi dng hot ng hc bi li tr li in thoi hoc ra gp bn. S kin in thoi reo chung, hay bn b gi c gi l s kin ngt, vic ta tr li in thoi hay ra gp bn l chng trnh phc v ngt. Vic ang hc bi c xem l chng trnh chnh. Ngt c thc hin khi v ch khi cho php n. Nh trong v d trn, nu s kin ngtin thoi reo xy ra, nu gio vin v bn thn ta cho php mnh tr li in thoi khi ang hc bi th khi c in thoi ta mi nghe. Vi iu khin cng c ngt. Cch x l ca n cng tng t nh v d trn. C th hot ng ca vi iu khin khi c s kin ngt xy ra v ngt c cho php:Thc hin nt lnh ang thc hin Dng chng trnh ang thc hin Lu li a ch ca lnh k tip trong chng trnh ang thc hin vo b nh stack Nhy ti a ch 0x04 trong b nh chng trnh Ti y, vi iu khin s thc hin chng trnh con phc v ngt do ngi lp trnh lp trnh t trc. Sau khi thc hin xong chng trnh con phc v ngt, vi iu khin ly li a ch ca lnh k tip c lu v thc hin tip chng trnh ang thc hin d lc cha c ngt

Nh vy, cch phn ng ca vi iu khin l kh tng ng vi cch x l ca con ngi trong thc t. Nh trong v d trn, khi ta ang hc bi, khi c ngt, tc c in thoi-s kin ngt, ta c nt t cui cng, nh dng ang c trang th my, nh

du, tr li in thoi (chng trnh con phc v ngt), tr li xong ta tr li hc bi dng, trang c nh du. Ti y ta tng hp li cc thut ng dng cho x l ngt trong vi iu khin:Ngun ngt: ngun ngt l nguyn nhn gy ra ngt. Nh trong v d trn, ngun ngt c th

L in thoi gi hoc bn giS kin ngt: khi ngun ngt xy ra Chng trnh con phc v ngt: l chng trnh vi iu khin x l khi c s kin ngt xy ra do ngi lp trnh lp trnh ra V d nh ta tr li hoc chy ra khi phng gp bn Vecto ngt: tc a ch 0x04 ni vi iu khin chy ti sau khi lu a ch tr v Bit cho php ngt: tc vic cho php vi iu khin chy chng trnh con phc v ngt khi c s kin ngt xy ra. Trong vi iu khin PIC, mi ngt c bit cho php ca n. Bit ny tn cng bng ch E (enable), nm trong cc thanh ghi chuyn dng. Mun cho php ngt , ta phi a bit cho php ngt tng ng ln gi tr 1. Ngt ch thc s c cho php ngt khi ta cho bit cho php ngt ton cc GIE (Global Interrupt Enable) ln mc 1. Ta hnh dng nh sau: khi c s kin ngt- in thoi gi, nu ta cho php mnh nghe in thoi (tc bit cho php ngt ca ngt c set ln 1) ng thi thy gio cho php (bit cho php ngt ton cc GIE c ln mc 1) th ta mi nghe in thoi (cho chng trnh con phc v ngt hot ng). Mt s cc ngt khc, nh cc ngt ngoi vi bao gm ADC, PWM v.v Mun cho php n cn phi a bit cho php ngt ngoi vi ln mc 1. C ngt: l bit phn nh trng thi ca s kin ngt. Mi ngt c mt bit c. Khi bit c ny bng 1 ngha l s kin ngt tng ng vi c xy ra. Ta hnh dung nh ting chung ca in thoi l c ngt, chung rung bo c s kin ngt- c in thoi xy ra. Cc bit ny tn cng bng t F (Flag- c). Lu l d mt ngt c c cho php hay khng th c ngt vn c set ln 1 khi c s kin ngt xy ra. (D ta c c php nghe in thoi hay khng th chung in thoi vn c reo).

6.2 Cc ngt trong vi iu khin PIC16F877A:Vi iu khin PIC16F877A c 15 ngun ngt. c chia lm 2 lp ngt:Lp ngt c bn: bao gm cc ngt c bn nh ngt trn timer 0, ngt ngoi, ngt thay i trng thi ca cc chn PortB (RB4-RB7). Bit cho php ngt v bit c tng ng l TMR0IE,TMR0IF; INTE, INTF; RBIE v RBIF. l cho php ngt thc s xy ra phi c bit cho php ngt ton cc GIE. Lp ngt ngoi vi: bao gm cc ngt ngoi vi nh ngt trn timer 1 (TMR1IE, TMR1IF), ngt trn Timer 2(TMR2IE, TMR2IF), ngt hon thnh vic chuyn i ADC (ADCIE, ADCIF), ngt hon thnh vic nhn k t trong truyn thng RS232 (RCIE, RCIF), ngt hon thnh vic truyn k t trong truyn thng RS232 (TXIE, TXIF) v.v l mun thc s cho php cc ngt ny ngoi bit cho php ngt ton cc c set phi set c bt cho php ngt ngoi vi PEIE.

6.3 Cu truc mt chng trinh hp ng co x ly ngt:6.3.1 Cu truc chng trinh: ; DUA FILE LIET KE VAO #INCLUDE P16F877A.INC ; KHAI BAO CAU HINH __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF ; KHAI BAO BIEN O DAY ; DIA CHI BIEN O VUNG NHO BIEN BANK0

CBLOCK 0x20

ENDC

;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY ORG 0x000; CHI DAN BIEN DICH; NHAY TOI CHUONG TRINH CHINH

GOTO MAIN ; DIA CHI VECTOR NGAT ORG 0x004 ; THUC HIEN LENH NHAY DEN CHUONG TRINH CON GOTO INTERRUPT_SUB ; CHUONG TRINH CHINH BAT DAU TU DAY ORG 0x005 MAIN ; CAC LENH CUA CHUONG TRINH CHINH VIET O DAY ; Dung ngt nao thi phai cai t va cho phep ngt o

; CHUONG TRINH CON PHUC VU NGAT

INTERRUPT_SUB ; CAC LNH VIT Y ; KET THUC CHUONG TRINH CON PHUC VU NGAT RETFIE END 6.3.2 Cac im chu y trong chng trinh co s dung ngt: ORG 0x000; CHI DAN BIEN DICH ; NHAY TOI CHUONG TRINH CHINH GOTO MAIN ; DIA CHI VECTOR NGAT ORG 0x004 ; THUC HIEN LENH NHAY DEN CHUONG TRINH CON GOTO INTERRUPT_SUB ; CHUONG TRINH CHINH BAT DAU TU DAY ORG 0x005 MAIN

; CAC LENH CUA CHUONG TRINH CHINH VIET O DAY Nh a phn tich cac muc bn trn, ia chi 0x004 trong b nh chng trinh la vector ngt cua vi iu khin, nghia la khi co mt ngt nao o xay ra (vi iu kin la ngt o va ngt toan cuc a c cho phep) thi c ngt cho ngt o c set ln 1, vi iu khin lp tc nhay ti ia chi 0x004, tai y ngi lp trinh a ra cac lnh x ly ngt o. Nh vy, cac lnh cua phn x ly ngt nay phai bt u t ia chi 0x004. Tuy nhin, thng thng cho tin quan ly va theo doi ngt, phn chng trinh x ly ngt c b tri mt ni khac. Vi du y la chng trinh con phuc vu ngt: INTERRUPT_SUB

; KET THUC CHUONG TRINH CON PHUC VU NGAT RETFIE Va tai ia chi 0x004 ta co lnh nhay n chng trinh con nay: ORG 0x004 ; THUC HIEN LENH NHAY DEN CHUONG TRINH CON GOTO INTERRUPT_SUB y cung lu y thm 1 iu la chng trinh chinh phai b tri bt u it nht la t ia chi 0x005 tr i. Vi ro rang nu nm trong khoang t 0x000 n 0x0004 thi cac lnh cua chng trinh chinh se nm e ln chng trinh con phuc vu ngt ma cu th y la lnh GOTO INTERRUPT_SUB 6.3.3 Chng trinh con phuc vu ngt: Cu truc:

Tn chng trinh con

RETFIE Khi co ngt xay ra, vi iu khin lu ia chi cua lnh tip theo se c thc hin chng trinh chinh vao stack, sau o nhay n ia chi 0x004, tai y co lnh nhay n chng trinh con phuc vu ngt. Chng trinh con phuc vu ngt c thc hin cho n khi gp lnh RETFIE, vi iu khin ly ia chi trong stack a vao PC co lnh tr v chng trinh chinh, va bit c GIE c set ln 1. Trong thc t, trc khi nhay vao phn thc hin cac x ly ngt trong chng trinh con phuc vu ngt ta cn lu lai gia tri thanh ghi W va thanh ghi STATUS tai thi im khi xay ra ngt khi x ly xong ta tr v thc hin tip chng trinh chinh. thc hin iu nay, chng trinh con phuc vu ngt co cu truc nh sau: Tn chng trinh con MOVWF SWAPF W_TEMP STATUS,W

MOVWF STATUS_TEMP ; cac lnh x ly ngt y

SWAPF

STATUS_TEMP,W

MOVWF STATUS SWAPF W_TEMP,F

SWAPF RETFIE

W_TEMP,W

V c ban y la trc khi x ly ngt cn a ni dung cua thanh ghi W, thanh ghi STATUS vao cac thanh ghi tam thi trong RAM: W_TEMP, STATUS_TEMP Va sau khi x ly xong thi a cac gia tri nay v thanh ghi W va STATUS Chi chu y mt iu la thay vi dung cac lnh movf x ly y s dung cac lnh swapf vi lnh nay khac lnh movf ch la no khng lam anh hng n thanh ghi STATUS.

6.4 Ngt ngoi:6.4.1 Hot ng:Ngun ngt: l xung i vo chn RB0 ca vi iu khin PIC S kin ngt: s kin ngt xy ra khi c xung i vo chn RB0 ca vi iu khin. Xung l xung sn dng hay sn m ph thuc bit ci t chn dng xung, bit INTEDG ( bit 6 ca thanh ghi OPTION_REG) l 1 hay 0. Bit cho php ngt: cho php ngt ngoi, bit cho php ngt ngoi INTIE (bit 4 ca thanh ghi INTCON) phi c set ln 1. Ngoi ra, bit cho php ngt ton cc GIE (bit 7 ca thanh ghi INTCON) cng phi c set ln 1. C ngt: bit c ngt ngoi l bit INTIF (bit 1 ca thanh ghi INTCON) c t ng set ln 1 khi c s kin ngt ngoi xy ra. C ny phi c xa bng chng trnh (c th l trong chng trnh con phc v ngt) vi iu khin qun l chnh xc cc ln ngt k tip.

6.4.2 Qun l ngt ngoi trong chng trnh hp ng:;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY ORG 0x000; CHI DAN BIEN DICH ; NHAY TOI CHUONG TRINH CHINH GOTO MAIN

; DIA CHI VECTOR NGAT ORG 0x004 ; THUC HIEN LENH NHAY DEN CHUONG TRINH CON GOTO INTERRUPT_SUB ; CHUONG TRINH CHINH BAT DAU TU DAY ORG 0x005

MAIN ; CAC LENH CUA CHUONG TRINH CHINH VIET O DAY ; CAI DAT DANG XUNG SUONG AM HAY SUON DUONG BCF OPTION_REG,6 ; CHON SUON AM ; CHO PHEP NGAT BSF INTCON,4; CHO PHEP NGAT NGOAI BSF INTCON,7; CHO PHEP NGAT TOAN CUC ; PHAN CHUONG TRINH CHINH O DAY

; CHUONG TRINH NGAT INTERRUPT_SUB MOVWF SWAPF W_TEMP STATUS,W

MOVWF STATUS_TEMP

BANKSEL INTCON BCF INTCON,1 ; XOA CO NGAT NGOAI ; PHAN XU LY NGAT O DAY ; PHAN KET THUC NGAT O DAY SWAPF STATUS_TEMP,W

MOVWF STATUS SWAPF SWAPF W_TEMP,F W_TEMP,W

; KET THUC CHUONG TRINH CON PHUC VU NGAT RETFIE Xem thm chng trinh x ly ngt ngoai trong file inh kem

6.5 Ngt Timer 0:6.5.1 Hot ng:Ngun ngt: l trng thi trn ca thanh ghi b m timer 0 - TMR0 cua vi iu khin PIC S kin ngt: s kin ngt xy ra khi c s trn ca TMR0, tc l khi TMR0=255 +1 va b xa Bit cho php ngt: cho php ngt ny, bit cho php ngt TMR0IE (bit 5 ca thanh ghi INTCON) phi c set ln 1. Ngoi ra, bit cho php ngt ton cc GIE (bit 7 ca thanh ghi INTCON) cng phi c set ln 1. C ngt: bit c ngt ngoi l bit TMR0IF (bit 2 ca thanh ghi INTCON) c t ng set ln 1 khi c s kin ngt ngoi xy ra. C ny phi c xa bng chng trnh (c th l trong chng trnh con phc v ngt) vi iu khin qun l chnh xc cc ln ngt k tip.

6.5.2 Qun l ngt Timer 0 trong chng trnh hp ng: Trong chng trnh chnh, ci t ngt:Cai t ch cho Timer0 Gn gi tr ban u cho thanh ghi TMR0, ty thuc vo thi gian m ngi lp trnh a ra theo yu cu Cho php ngt timer 0: TMR0IE=1 (bit th 5 cua thanh ghi INTCON) Cho php ngt ton cc: GIE=1 (bit th 5 cua thanh ghi INTCON)

Trong chng trinh con phuc vu ngt: Nh xoa c ngt timer0: TMR0IF=0 (bit th 2 cua thanh ghi INTCON)

; DUA FILE LIET KE VAO #INCLUDE P16F877A.INC ; KHAI BAO CAU HINH __CONFIG _HS_OSC & _WDT_OFF &_LVP_OFF ; KHAI BAO BIEN O DAY ; DIA CHI BIEN O VUNG NHO BIEN BANK0 CBLOCK 0x20 vong1, vong2, vong3, so,SOLANNGAT

hangchuc,hangdonvi,trunggian, STATUS_TEMP,W_TEMP ENDC

;CHUONG TRINH VI DIEU KHIEN CHAY TAI DAY ORG 0x000; CHI DAN BIEN DICH ; NHAY TOI CHUONG TRINH CHINH GOTO MAIN ; DIA CHI VECTOR NGAT ORG 0x004 ; THUC HIEN LENH NHAY DEN CHUONG TRINH CON GOTO INTERRUPT_SUB ; CHUONG TRINH CHINH BAT DAU TU DAY ORG 0x005

MAIN ; CAC LENH CUA CHUONG TRINH CHINH VIET O DAY ; CAI DAT DANG XUNG SUONG AM HAY SUON DUONG

; CHO PHEP NGAT

BANKSEL OPTION_REG MOVLW B'00000111'; CHON CHE DO BO DINH THOI, TI LE BO CHIA TAN SO LA 1:256 MOVWF OPTION_REG BANKSEL TMR0 MOVLW D'237'; CAI DAT DE KHI TMR0 BI TRAN VUA DU 5MS MOVWF TMR0 BANKSEL INTCON BSF INTCON,5; CHO PHEP NGAT TIMER0 BSF INTCON,7; CHO PHEP NGAT TOAN CUC

BANKSEL TRISB ; XOA THANH GHI TRISB, CHO PHEP CAC CHAN PORTB LA DAU RA CLRF TRISD CLRF TRISA MOVLW B'00000001' MOVWF TRISB BANKSEL ADCON1 MOVLW 0X06 MOVWF ADCON1

; CHON BANK NHO CO THANH GHI PORTB

; BAT DAU XU LY start: banksel PORTB clrf porta movlw d'12 MOVWF SO clrf hangchuc clrf hangdonvi call chia10 MOVLW D'2 MOVWF SOLANNGAT

GOTO $ ; DUA DU LIEU GIATRICONG VAO THANH GHI TRUNG GIAN W

; CHUONG TRINH CON PHUC VU NGAT

INTERRUPT_SUB

MOVWF SWAPF

W_TEMP STATUS,W

MOVWF STATUS_TEMP

; XOA CO NGAT NGOAI

BCF INTCON,2

DECFSZ SOLANNGAT,F GOTO BATLED1 GOTO BATLED2

BATLED1: bcf porta,1 bsf porta,0 movF HANGCHUC,W

CALL BANGMA MOVWF PORTD GOTO THOAT BATLED2: MOVLW D'2 MOVWF SOLANNGAT bcf porta,0 bsf porta,1 MOVF HANGDONVI,W CALL BANGMA MOVWF PORTD

THOAT: SWAPF STATUS_TEMP,W

MOVWF STATUS SWAPF SWAPF W_TEMP,F W_TEMP,W

; KET THUC CHUONG TRINH CON PHUC VU NGAT

RETFIE

chia10: ;tru cho 10 BANKSEL SO MOVF SO,W MOVWF HANGDONVI MOVLW D'10 subwf so,f btfsc status,c goto capnhat ; dua gia tri ve cho hang donvi

goto EXIT capnhat: incf hangchuc,f goto chia10 EXIT: return

BANGMA ADDWF PCL,F RETLW 0XC0 RETLW 0XF9 RETLW 0XA4 RETLW 0XB0 RETLW 0X99 RETLW 0X92 RETLW 0X82 RETLW 0XF8 RETLW 0X80 RETLW 0X90

END