Giao Trinh Pic16f877a Hay Ngan Gon

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 37

Ti liu tham kho cho pic16f877a

(c vit bi o trng ngha- tvt 3a)

Gii thiu tng quan v h vi iu khin pic

Chng1

Hin nay trong cc my mc cng nghip v cc thit b phc v sinh hot cho cuc Sng hu ht u ng dng rng r i cc thit b in t ,m b x l trung tm l cc con Chip vi iu khin ht sc thng minh c bit cc Chip ny c th lp trnh c Bi con ngi! V vy chng ta cn phi nghin cu v pht trin n. Trn th trng hin nay ph bin rt nhiu loi vi iu khin phong ph v chng loi v gi c th tng i r ph hp vi iu khin Vit Nam trong ph bin c cc loi nh : MCS51 ; AVR ca ATMEL , PIC ca MICROCHIP , PSOC ca CYPRESS MICRO SYSTEM Hin nay vi s a dng v nhiu chng loi khc nhau ca PIC c bit l tnh n nh ca chng lm cho nhiu ngi thch th v a chung v vy chng c ng dng rng r i trn ton th gii. Cm t PIC c vit tt t cm t : peripheral interface controller (B iu Khin giao tip cc thit b ngoi vi).Khc vi cc b vi x ,b vi iu khin c tch hp ton b nh RAM , ROM , cc PORTS truy xut ,giao tip ngoi vi trc tip trn mt con chp ht sc nh gn. PIC16F877A l mt vi iu khin c kin trc HARVARD (b nh chng trnh v b nh d liu c truy xut c lp vi nhau) s dng 14 bit cho cc lnh , v tp lnh ca n ch hu ht ch c mt WORD.

Cu trc phn cng ca PIC16f877a i)b nh chng trnh ca pic Khng gian b nh chng trnh ca PIC khc nhau tu thuc vo tng loi Sau y l mt s v d: -16C711,16F84 c 1024(1K) -16F877A c 8192(8K) -17C766 c 16384(16K) II)b nh d liu ca pic Cc thanh ghi a mc ch cho ngi dng ca PIC l cc nh RAM . Mi thanh ghi ny c rng 8 bt cho tt c cc PIC Sau y l mt vi v d: -12C508 c 25 Bytes RAM -16C71C c 36 Bytes RAM -16F877A c 368 Bytes(plus 256 Bytes of nonvolatile EEPROM) III)CC CHN CA PIC 16F877A

Chng2

1)cc chn ngun Trong cc s ca mch 8051 thng k hiu chn cp ngun l VCC , cn chn ni mass l GND . Cn i vi PIC th ngc li thay VCC = VDD cn chn GND = VSS Trong PIC 16F877A trn hnh v ta c th thy c tt c 4 chn cp ngun nh sau: - Chn 11 , 32 l cc chn VDD (+5v) - Chn 12 , 31 l cc chn VSS (0v) 2)chn reset Trn hnh ta thy chn s 1(MCLR) chnh l chn RESET ca PIC , chn ny c nhim v khi ng li chip khi chn ny c tch cc.

Chn RESET ca PIC tch cc mc thp u ny tri ngc hon ton vi h 8051

3)mch dao ng Trn hnh v ta thy 2 chn 13(OSC1) v chn 14(OSC2) l 2 chn dao ng. Tc dao ng c xc nh thng qua tn s dao ng ca b to dao ng S mch dao ng nh hnh v sau:

4)cng xut nhp +PORT A v thanh ghi TRIS A: Cng A c 6 bit thc hin chc nng vo ra theo 2 chiu vic xc nh hng xut nhp dc thc hin thng qua thanh ghi TRIS A. Vic a 1 bit trong thanh ghi TRIS A ln 1 cng ng ngha vi vic t chn tng ng ca cng A l chn nhp d liu. Vic xo 1 bit trong thanh ghi TRIS A xung 0 cng ng ngha vi vic t chn tng ng ca cng A l chn xut d liu. Chn RA4/TOCKI l chn a mc ch vi vic va l chn xut nhp va l u vo ca b m TIMER0 .u vo ca chn RA4 l mt trigger schmitt nn c cc mng h trong ch nhp chng ta cn gn thm in tr ko dng cho n. Cc chn khc trong PORT A cn l u vo ca tn hiu tng t trong b chuyn i ADC . S hot ng ca cc chn trong ch ny l vic iu kin thch hp cc bt trong thanh ghi ADCON1 v CMCON.

+port b v thanh ghi tris b: Cng B c 8 bt xut nhp theo 2 chiu ,vic chn chc nng xut hoc nhp c iu khin thng qua thanh ghi TRIS B cng tng t nh vi PORTS A Ba chn ca PORT B l cc chn a chc nng(RB3/PGM,RB6/PGC/RB7/PGD) vi cc ng dng nh trong mch g ri v chng trnh in p thp Mi chn ca PORT B u c cc in tr ko dng bn trong c gi tr khong 47K c th cho php hot ng ch ny thng qua vic set bit RBPU trong thanh ghi OPTION Vic in tr ko s b kho ngay khi PORT B chuyn sang ch xut d liu hoc khi VK mi khi ng Bn chn ca PORT B l cc chn t RB4 n RB7 cn l cc chn phc v ngt, nu 1 trong cc chn c nh hnh l u vo th n c th l nguyn nhn cho 1 ngt pht sinh Khi mt ngt c to ra cng ng thi c RBIF(INTCON.0) c set ln 1, v n c th nh thc VK ang ch ng(SLEEP)

+ PORT C v thanh ghi TRIS C:

PORTC c tt c 8 chn a mc ch vi cc chc nng nh : xut nhp d liu, c bit 2 chn 18(SCL) v 23(SDA) l 2 chn thc hin chc nng giao tip vi ngoi vi thng qua chun I2C Thanh ghi TRISC cng tng t nh trn lm nhim v nh ngha cc chn tng ng l cng vo hay cng ra

+PORT D v thanh ghi TRIS D - PORT E v thanh ghi TRIS E: Hai PORT ny u c 8 chn a mc ch nhng ch yu vn l xut nhp liu cn cc ng dng khc chung ta s khng xt y Cc bn c th tham kho thm trong cc hnh di y:

Cc thanh ghi c chc nng c bit

Chng 3

Cc thanh ghi ny c chc nng iu khin cc hot ng v cc khi giao tip ngoi vi ca vi iu khin i) thanh ghi Status

Bit 0 : l mt c bo trn mi khi c nh t bit 7 trong php cng hoc c mn trong php tr Bit 1 : l c nh ph b tc ng khi thc hin php ton vt qu 4 bt thp Bit 2 : Z=1 nu kt qu php ton bng 0 Z=0 nu kt qu php ton khc 0 Bit 3 : PD=1 sau khi bt ngun hoc bi lnh CLRWDT PD=0 khi lnh SLEEP c thc thi Bit 4 : TO=1 nu c lnh SLEEP thc thi hoc lnh CLRWDT hoc sau khi bt ngun T0=0 nu b WDT b chn Bit 6-5: 00: chn bank 0 01: chn bank 1 10: chn bank 2 11: chn bank 3 Bit 7: 1: chn bank 2,3 0: chn bank 0,1 ii) thanh ghi option_reg:

Bit 0-1-2 : dng chn gi tr cho b chia tn cho TIMER0 hoc WDT

Bit 3 : PSA =1: b chia tn dng cho WDT PSA =0: b chia tn dng cho TIMER0 Bit 4 : TOSE =1: chn sng xung l sng tc ng ln chn RA4 TOSE =0: chn sng ln l sng tc ng ln chn RA4 Bit 5 : TOCS =1: chn xung m trong TIMER0 l xung trn chn RA4 TOCS =0: chn xung m trong TIMER0 l xung ni Bit 6 : INTEDG =1: xy ra ngt khi chn RB0 c sn ln INTEDG =0: xy ra ngt khi chn RB0 c sn xung Bit 7 : RBPU =1: cm cho php in tr ko dng PORTB RBPU =0: cho php in tr ko dng PORTB III) thanh ghi intcon:

Bit 0: C bo ngt cho cc chn RB4-RB7 RBIF =1: xut hin t nht mt trong cc ngt ti cc chn RB4-RB7 RBIF =0: khng xut hin ngt ti cc chn RB4-RB7 Bit 1: C ngt cho chn RB0 INTF =1: xut hin ngt trn chn ngt ngoi RB0 INTF =0: khng xut hin ngt trn chn ngt ngoi RB0 Bit 2: C ngt cho b TIMER0 TMR0IF =1: xy ra trn trong thanh ghi TMR0 TMR0IF =0: cha xy ra trn trong thanh ghi TMR0

Bit 3: RBIE =1: cho php ngt trn cc chn RB4-RB7 RBIE =0: cm ngt trn cc chn RB4-RB7 Bit 4: INTE =1: cho php ngt trn chn RB0 INTE =0: cm ngt trn chn RB0 Bit 5: TMR0IE =1: cho php ngt bng b TIMER0 TMR0IE =0: cm ngt bng b TIMER0 Bit 6: PEIE =1: cho php ngt phc v cho thit b ngoi vi PEIE =0: cm cc ngt phc v cho thit b ngoi vi Bit 7: GIE =1: cho php tt c cc ngt c thc hin GIE =0: cm tt c cc ngt khng c thc hin

Ch : V tr ca b nh d liu c chia thnh 4 BANK thanh ghi(cc khi , cc vng) mi thi im , chng ta ch c th truy xut trn 1 BANK thanh ghi no m thi .Vic chn BANK no thng qua vic iu khin cc bit 5-6-7 ca thanh ghi STATUS Chng ta thy rng trong PIC cn rt nhiu cc thanh ghi chc nng khc nhng chng ta s khng bn n n y.Nu cc bn cn m rng kin thc th c th tham kho thm trong DATASHEET ca 16F877A

Cc ng dng c bn ca pic 16F877a I) m v nh thi: 1)B nh thi TIMER0 Timer0 l mt trong 3 b nh thi ca PIC16F877A , mi mt nh thi th s dng cc thanh ghi chc nng khc nhau vi nhim v v cch thc hot ng cng khc nhau +cc thanh ghi dng trong timer0

Chng 4

Thanh ghi option: L thanh ghi cho php c ghi dng iu khin thit lp Thanh ghi intcon:L thanh ghi cha c ngt ca Timer0 Thanh ghi tmr0: L thanh ghi 8 bit ,mi ln c xung tc ng th gi tr ca

cu hnh cho Timer0

thanh ghi s tng ln 1 n v cho n khi trn th thanh ghi s ch v 0 +hot ng ca b nh thi timer0:

Nhn s khi ca TIMER0 ta c th thy n hot ng 2 ch - Ch nh thi: ch ny chng ta cn chn xung tc ng l xung ni(TOCS =0) lc ny xung to ra bi b giao ng sau khi c chia 4 s i qua b chia tn cung cp cho Timer0 m .Sau khi mt xung c m gi tr ca thanh ghi TMR0 s tng ln 1 n v , khi xy ra trn th c TMR0IF s c set ln 1. - Ch m: ch ny chng ta cn chn xung tc ng l xung ngoi(TOCS =1) Timer0 s ly xung t bn ngoi thng qua chn RA4 thng qua b chia tn s cung cp cho Timer0 tng t nh trn.Vic chn kiu xung tc ng thng qua vic iu khin bit T0SE. - Ch WDT: chng ta s khng tm hiu vn ny.

2)b nh thi timer1: B nh thi Timer1 l b nh thi 16 bit cng vi 2 chc nng c bn nh Timer0
+cc thanh ghi dng trong timer1:

Thanh ghi t1con: L thanh ghi thit lp cu hnh hot ng cho Timer1

Bit 0: Bit 1: dng) Bit 2:

TMR1ON =1: cho php Timer1 hot ng TMR1ON =0: khng cho php Timer1 hot ng Tmr1cs =1: dng ngun xung t bn ngoi thng qua chn RC0 (sng Tmr1cs =0: dng ngun xung t b to dao ng

khi Tmr1cs =1: t1sync=1: khng s dng xung ngoi l xung ng b t1sync=0: cho php s dng xung ngoi l xung ng b khi Tmr1cs =0: Bit ny khng c s dng

Bit 3:

T1oscen=1: cho php b to dao ng hot ng T1oscen=0: khng cho php b to dao ng hot ng

Bit 5 -4 : Thit lp gi tr cho b chia tn

THANH GHI TMR1: L thanh ghi lu tr gi tr nh thi 16 bit c to thnh t 2 thanh ghi 8 bit tmr1l tmr1h Thanh ghi pir1: L thanh ghi cha c trn TMR1IF ca Timer1 Thanh ghi pie1: L thanh ghi cha bit TMR1IE cho php ngt Timer1 hot ng +hot ng ca b nh thi timer1

Nhn vo s khi ta thy Timer1 c 2 chc nng c bn sau: Ch nh thi: trc ht cn phi cho Timer1 hot ng bng cch set bit TMR1ON sau chn ch s dng xung ni(TMR1CS =1).Xung t b to dao ng s c chia 4 sau a qua b chia tn cung cp cho Timer1 m ng thi gi tr ca thanh ghi TMR1 s tng ln 1 n v cho n khi trn v c trn TMR1IF=1. Ch m: khi s dng ch ny chung ta cn phi set bit TMR1CS =1, ngun xung t bn ngoi c th ly t 2 chn RC0 - RC1 thng qua vic thit lp bit T1OSCEN , nu bit T1SYNC=0 th xung tc ng t bn ngoi s ng b vi xung dao ng bn trong , qu trnh ng b xy ra sau khi xung i qua b chia tn

3)b nh thi timer2: Timer2 l b nh thi 8 bit tng t nh Timer1 nhng li c ti 2 b chia tn c th c dng trong ng dng iu ch rng xung (PWM)
Cc thanh ghi dng trong timer2:

Thanh ghi t2con: L thanh ghi thit lp cu hnh cho Timer2

Bit 1- 0: thit lp gia tr cho b chia tn Prescale 00 = 1:1 01 = 1:4 1x = 1:16 Bit 2: TMR2ON=1: cho php s dng Timer2 TMR2ON=0: khng cho php s dng Timer2 Bit 6- 3: thit lp gi tr cho b chia tn Postcale

Thanh ghi pir1: cha c trn TMR2IF ca Timer2 Thanh ghi Pie1: cha c cho php ngt TMR2IE ca Timer2 Thanh ghi Pr2: ng dng trong PWM Thanh ghi tmr2: lu tr gi tr nh thi 8 bit cho Timer2

+hot ng ca b nh thi timer2

Ch nh thi: ngun xung t b to dao ng sau khi c chia 4 s c a b chia tn Prescale np vo thanh ghi TMR2 , khi xy ra trn bit TMR2IF=1. Ch PWM: trc ht chng ta np gi tr cho thanh ghi PR2 sau khi gi tr ca thanh ghi TMR2 s c so snh vi gi tr ca thanh ghi PR2 nu chng bng nhau th thanh ghi TMR2 s c Reset ng thi gi tr cc chn PWM s thay i chng ta s cp n vn ny phn sau.

II) cc ngt thng dng: Nh chng ta bit, vi iu khin ti mi thi im n ch c th lm mt cng vic nht nh. Nhng trong thc t th li khc, ngi lp trnh li mun vi iu khin ang lm cng vic ny li t ng chuyn sang lm cng vic khc ,vy lm th no vi iu khin lm c ? n gin l n s s dng c ch gi l : Ngt 1)cc ngt ca pic 16f877a +Ngt trn Timer0 +Ngt do c thay i trng thi trn cc chn t RB4- RB7 +Ngt ngoi trn chn RB0 +Ngt chuyn i ADC hon tt +Ngt b chuyn m RS 232 chng +Ngt do d liu nhn t RS232 sn sng +Ngt trn Timer1 +Ngt trn Timer2 +Ngt do c capture hay compare trn chn CCP1 +Ngt do c capture hay compare trn chn CCP2 +Ngt do c hot ng SPI hay I2C +Ngt do c d liu vo cng parallel slave +Ngt do ghi vo EPROM hon tt +Ngt do xung t BUS +Ngt do kim tra bng nhau comparator

Ta thy rng Pic c rt nhiu ngt ng dng trong nhiu chc nng khc nhau nhng y chng ta ch cp n mt s ngt c bn sau: +Ngt do cc timer hoc ngt ngoi : V c bn hot ng ca cc ngt Timer hoc ngt ngoi hot ng nh sau: - Xung to ra do b to dao ng hocngun xung bn ngoi s c cung cp cho cc thanh ghi nh thi tng ng ca cc b nh thi , khi cc b nh thi xy ra trn c ngt tong ng c bt v mt yu cu ngt c phc v lc ny vi iu khin s tm ngng cng vic hin ti, hon thnh lnh hin thi ngay tc khc nhy vo chng trnh phc v ngt ISR. Khi b m chng trnh PC s c y vo ngn xp STACK v ng thi bit GIE =0 chng trnh r nhnh n a ch vect ngt 0x04 ,ti y vi iu khin s thc hin cc yu cu m ngt i hi . - Vic thit lp cu hnh cho cc ngt s thng qua cc bit ca cc thanh ghi chc nng nh sau: +i vi Timer0 : Bt iu khin l bit TMR0IE(INTCON.5) +i vi Timer1 : Bt iu khin l bit TMR1IE(PIE.0) +i vi Timer2 : Bt iu khin l bit TMR2IE(PIE.1) +i vi ngt ngoi: Bt iu khin l bit INTE(INTCON.4) +i vi ngt do cc chn RB4 RB7: Bt iu khin l bit RBIE(INTCON.3) Ch : Trc khi thit lp cc ngt chng ta cn phi cho php ngt ton cc thng qua vit cho bit GIE =1(INTCON.7) III) iu ch rng xung( PWM) Mt trong nhng tnh nng quan trng ca PIC c ng dng rt nhiu l iu ch rng xung PWM(Pulse Width Modulation)

Thanh ghi iu khin ccp1con/ccp2con:

Bit 3- 0: chn ch lm vic

Bit 5 - 4:????

Qu trnh hot ng ca chc nng PWM nh sau: - Vi PIC 16F877A chng ta c 2 chn iu ch rng xung l CCP1 v CCP2 ,sau chn chc nng PWM bng cch iu khin 4 bt thp ca thanh ghi CCPxCON , chng ta s np gi tr cho thanh ghi PR2 v thanh ghi CCPRx . Khi Timer2 hot ng gi tr ca thanh TMR2 s tng cho n khi bng gi tr ca thanh ghi PR2 lc ny chn CCPx tng ng s ln mc 1 ng thi thanh ghi TMR2 s b xo v gi tr ban u.Mc 1 ti chn CCPx s c d cho n khi gi tr thanh ghi TMR2 bng gi tri thanh ghi CCPRx sau chn CCPx li tr v 0 cho n khi gi tr thanh ghi TMR2=PR2 c nh vy qu trnh s lp li nh ban u.. - Nh vy chng ta c th rt ra nh sau: Chu k xung l khong thi gian gi tr thanh ghi TMR2 tng n gi tr thanh ghi PR2 Khong xung dng l khong thi gian thanh ghi TMR2 tng n gi tr thanh ghi CCPRx hiu r hn chng ta c th xem trong s sau:

Tp lnh CCS c cho PIC 16f877a I) gii thiu v trnh dch CCS c: - CCs l trnh bin dch dng ngn ng C lp trnh cho VK . y l ngn ng lp trnh y sc mnh , gip bn nhanh chng trong vic vit chng trnh hn l Assembly - CCS cha rt nhiu hm phc v cho mi mc ch v c rt nhiu cch lp trnh m cho cng 1 vn vi tc thc thi v di chng trnh khc nhau .S ti u l do k nng lp trnh ca mi ngi - CCS cung cp cc cng c tin ch gim st hot ng chng trnh nh: + C/ASM list: cho php m ASM ca file bn bin dch , gip bn qun l v nm r cch thc n c sinh ra , l cng c rt quan trng gip bn c th g ri chng trnh + SYMBOL: hin th b nh cp pht cho tng bin , gip bn qun l b nh cc bin ca ca chng trnh + CALLTREE: hin th phn b b nh II) Ch th tin x l : 1) #include : - C php: #include<filename> Filename: tn file cho thit b *.h, *.c . Ch nh ng dn cho trnh bin ch , lun phi c khai bo chng trnh vit cho VK no v phI lun t dng u tin VD: #include<16F877A.H> 2) #bit : - C php: #bit name = x.y Name: tn bin X: bin C(8,16,32bit) hay hng s a ch thanh ghi Y: v tr ca bit trong x To bin 1bit t byte x v tr y tin dng kim tra hay gn gi tr cho thanh ghi VD : #Bit TMR1IF = 0x0B.2; 3) #byte : - C php: #byte name = x Name: tn bin X:a ch Gn tn bin name cho a ch x , name thng dng gn cho cc thanh ghi VD : #Byte portb = 0x06; 4) #define : - C php: #define name text Name: tn bin Text : chui hay s VD : #Define A 12345 5) #use : - C php: #use delay(clock = speed)

Chng 5:

Speed: tc dao ng ca thch anh C ch th ny chng ta mi dng c hm delay_ms hoc delay_us VD: #use delay(clock = 4000000); 6) #use fast_io : - C php: #use fast_io(port) Port : cc cng vo ra ca PIC( t A-G) Dng ci ny chng ta c th iu chnh cc port vi ch 1 lnh VD: # use fast_io(a); III) Cc hm delay : 1) delay_ms(time) Time: gi tr thi gian cn to tr VD : delay_ms(1000); // tr 1s 2) delay_us(time) Time: gi tr thi gian cn to tr VD : delay_us(1000); // tr 1ms Hm delay ny khng s dng bt c Timer no c m ch l 1 nhm lnh v ngha thc hin trong khong thi gian bn nh sn Trc khi s dng cc hm ny cn phI khai bo tin nh #use_delay(.) IV) cc hm vo ra trong CCS c 1) Output_low(pin) Output_high(pin) Thit lp mc 0v(low) hoc 5v(high) cho cc chn ca PIC VD : output_low(pin_D0) ; 2) Output_bit(pin,value) Pin: tn chn ca PIC Value: gi tr 0 hay 1 VD: output_bit(pin_C0,1); 3) Output_X(value) X: tn cc port trn chp Value: gi tr 1 byte VD: output_B(255); 4) Input_X( ) X: tn cc port trn chip Hm ny tr gi tr 8 bit l gi tr hin hu ca port VD: n = input_A( ); 5) Set_tris_X(value) X: tn chn (A G) Value: l gi tr 8 bt iu khin vo ra cho cc chn ca chip 1: nhp d liu 0: xut d liu VD: set_tris_B(0); // tt c cc chn ca portb l ng ra V) hm s dng trong cc timer: 1)timer0: - SETUP_TIMER_0(mode);

Mode: l mt trong 2 constant (nu dng 2 th chn du | gia) c nh ngha trong file <16F877A.h> +RTCC_INTERNAL: chn xung dao ng ni +RTCC_EXT_H_TO_L: chn kiu tc ng l cch xung ca xung +RTCC_EXT_L_TO_H: chn kiu tc ng l cch ln ca xung +RTCC_DIV_2 : S dng b chia tn vi t l 1:2 +RTCC_DIV_4 : S dng b chia tn vi t l 1:4 +RTCC_DIV_8 : S dng b chia tn vi t l 1:8 +RTCC_DIV_16 : S dng b chia tn vi t l 1:16 +RTCC_DIV_32 : S dng b chia tn vi t l 1:32 +RTCC_DIV_64 : S dng b chia tn vi t l 1:64 +RTCC_DIV_128 : S dng b chia tn vi t l 1:128 +RTCC_DIV_256 : S dng b chia tn vi t l 1:256 - setup_COUNTER_0( rtcc_state , ps_state) Rtcc_state: +RTCC_INTERNAL: chn xung dao ng ni +RTCC_EXT_H_TO_L: chn kiu tc ng l cch xung ca xung +RTCC_EXT_L_TO_H: chn kiu tc ng l cch ln ca xung Ps_state: +RTCC_DIV_2 : S dng b chia tn vi t l 1:2 +RTCC_DIV_4 : S dng b chia tn vi t l 1:4 +RTCC_DIV_8 : S dng b chia tn vi t l 1:8 +RTCC_DIV_16 : S dng b chia tn vi t l 1:16 +RTCC_DIV_32 : S dng b chia tn vi t l 1:32 +RTCC_DIV_64 : S dng b chia tn vi t l 1:64 +RTCC_DIV_128 : S dng b chia tn vi t l 1:128 +RTCC_DIV_256 : S dng b chia tn vi t l 1:256 - set_timer0(value) : xc nh gi tr 8 bit ban u ca Timer0(value=TMR0) - GET_TIMER0( ) : tr li gi tr 8 bit cho Timer0 2)timer1: - SETUP_TIMER_1(mode); Mode: c th kt hp vi nhau bng u | +T1_DISABLED : tt hot ng ca Timer1 +T1_INTERNAL : s dng giao ng ni +T1_EXTERNAL : chn xung clock trn chn RC0 +T1_EXTERNAL_SYNC : chn xung lock ngoi ng b +T1_DIV_BY_1 : S dng b chia tn vi t l 1:1 +T1_DIV_BY_2 : S dng b chia tn vi t l 1:2

+T1_DIV_BY_4 : S dng b chia tn vi t l 1:4 +T1_DIV_BY_8 : S dng b chia tn vi t l 1:8 - set_timer0(value) : xc nh gi tr 8 bit ban u ca Timer1(value=TMR1) - GET_TIMER0( ) : tr li gi tr 8 bit cho Timer1 3) TIMER2: - SETUP_TIMER_1(mode , period , postcale); Mode: c th kt hp vi nhau bng u | +T2_DISABLED : tt hot ng ca Timer2 +T2_DIV_BY_1 : S dng b chia tn vi t l 1:1 +T2_DIV_BY_4 : S dng b chia tn vi t l 1:4 +T2_DIV_BY_16 : S dng b chia tn vi t l 1:16 Period : s nguyn t 0 255 xc nh gi tr xung reset Postcale : xc nh s reset trc khi ngt - set_timer2(value) : xc nh gi tr 8 bit ban u ca Timer2(value=TMR2) - GET_TIMER2( ) : tr li gi tr 8 bit cho Timer2 VI) cc hm phc v ngt - enable_interrupts( level) Level: +GLOBAL : cho php ngt ton cc +INT_TIMER0 : ngt do trn Timer0 +INT_TIMER1 : ngt do trn Timer1 +INT_TIMER2 : ngt do trn Timer2 +INT_RB : c thay i 1 trong cc chn RB4 +INT_EXT : ngt ngoi trn chn RB0

RB7

Ch : sau khi khai bo trn th vo chng trnh ngt cn khai bo #INT_..... VD: #INT_TIMER1 Void ngt_Timer1( ) { //chng trnh ngt vit y }

VII) cc hm iu ch rng xung

- SETUP_CCPx(mode): Dng trc ht thit lp ch hot ng hay v hiu ho tnh nng CCP X: tn chn CCP trn chip (vi PIC 16F877A l cc chn RC1-CCP2 ; RC2-CCP1) Mode: CCP_PWM (bt ch PWM) - SET_CCPx_DUTY(value) X: tn chn CCP trn chip Value: gi tr 8 hay 16 bit N ghi 10 bit gi tr vo thanh ghi CCPx , nu value ch c 8 bit th n s dch thm 2 bit na 10 bit np vo CCPx Tu phn gi m gi tr ca value khng phI lc no cng t ti gi tr 1023

Cc v d c bn dng pic 16f877a 1) xut 0-1 ra cc chn:

Chng6

#INCLUDE<16F877A.h> //KHAI BAO DEVICE CHO PIC #FUSES XT,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP /* XT: SU DUNG THACH ANH TAN SO THAP (=4MHZ) NOWDT:KHONG SU DUNG CHE DO WATCH DOG TIMER PUT(POWER UP TIMER): CHON CHE DO LAM VIEC CHO PIC KHI DIEN AP DA ON DINH NOPROTECT : KHONG CHO PHEP DOC LAI MA CHUONG TRINH TRONG CHIP NOBROWNOUT : KHONG RESET LAI PIC KHI BI SUT AP NOLVP(LOW VOLTAGE PROGRAMMING) : ?? */ #USE DELAY(CLOCK=4000000) //GIA TRI OSC MA BAN DUNG #USE FAST_IO(B) VOID MAIN() { SET_TRIS_B(0); //THIET LAP CAC CHAN CUA PORTA LA CAC CHAN XUAT DU LIEU WHILE(TRUE) //TAO VONG LAP VO TAN { OUTPUT_HIGH(PIN_B0); //XUAT GIA TRI 1 RA CHAN RB0 DELAY_MS(500); //TAO TRE 0,5s OUTPUT_LOW(PIN_B0); //XUAT GIA TRI 0 RA CHAN RB0 DELAY_MS(500); OUTPUT_B(255); //DUA GIA TRI 1 RA CAC CHAN CUA PORTB DELAY_MS(500); OUTPUT_B(0); //DUA GIA TRI 0 RA CAC CHAN CUA PORTB DELAY_MS(500); } }

2)GIAO TIP VI PHM BM

#INCLUDE<16F877A.H> #FUSES XT,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #USE FAST_IO(B) #BYTE PORTB=0x06 #BIT BUTTON=PORTB.7 #BIT LED=PORTB.6 VOID MAIN() { SET_TRIS_B(0b10111111); //LAP CHE CHO PIN_B6 LA XUAT CON CAC CHAN KHAC LA NHAP WHILE(TRUE) { IF(BUTTON==0) //KIEM TRA NUT BAM { LED=1; //BAT DEN DELAY_MS(1000); LED=0; //TAT DEN } } }

3)delay dng vng lp


#INCLUDE<16F877A.H> #FUSES XT,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #BYTE INTCON=0x0B #BYTE PIR1=0x0C #BYTE T1CON=0x10 #BIT TMR1ON=T1CON.0 //KHOI DONG TIMER1 #BIT TMR1IF=PIR1.0 //CO TRAN TIMER1 #BIT INTF=INTCON.1 //CO NGAT

VOID DELAY(INT8 TIMER) { WHILE(TIMER--) { TMR1ON=1; WHILE(TMR1IF==0); TMR1ON=0; TMR1IF=0; } }

VOID MAIN() { WHILE(TRUE) { OUTPUT_HIGH(PIN_C4); DELAY(100); OUTPUT_LOW(PIN_C4); DELAY(100); } }

//TUONG TU VOI CAC TIMER0 VA TIMER2 CAC BAN CO THE XEM DATASHEET DE BIET THEM VE DIA CHI // CAC THANH GHI CHUC NANG CUA CHUNG

4)delay dng timer khng dng ngt


#INCLUDE<16F877A.H> #FUSES XT,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #BYTE INTCON=0x0B #BYTE PIR1=0x0C #BYTE T1CON=0x10 #BYTE T2CON=0x12 #BIT TMR1ON=T1CON.0 //KHOI DONG TIMER1 #BIT TMR1IF=PIR1.0 //CO TRAN TIMER1 #BIT TMR0IF=INTCON.2 //CO TRAN TIMER0 #BIT TMR2ON=T2CON.2 //KHOI DONG TIMER2 #BIT TMR2IF=PIR1.1 //CO TRAN TIMER2

VOID MAIN() { SET_TRIS_E(0); SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_2); //SU DUNG TAN SO DAO DONG NOI VA BO CHIA TAN 1:2 SET_TIMER0(0); //DAT GIA TRI THANH GHI DINH THOI TMR0=0 SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_4); //SU DUNG TAN SO DAO DONG NOI VA BO CHIA TAN 1:4 SET_TIMER1(0); //DAT GIA TRI THANH GHI DINH THOI TMR1=0 SETUP_TIMER_2(T2_DIV_BY_16,255,1); //SU DUNG TAN SO DAO DONG NOI VA BO CHIA TAN 1:16 SET_TIMER2(0); //DAT GIA TRI THANH GHI DINH THOI TMR2=0 TMR0IF=TMR1IF=TMR2IF=0; //XOA CAC CO TRAN WHILE(TRUE) { IF(TMR0IF==1) //KIEM TRA CO TRAN TIMER0 { OUTPUT_HIGH(PIN_E0); DELAY_MS(50); OUTPUT_LOW(PIN_E0); TMR0IF=0; } ELSE IF(TMR1IF==1) //KIEM TRA CO TRAN TIMER1 { OUTPUT_HIGH(PIN_E1); DELAY_MS(50); OUTPUT_LOW(PIN_E1); TMR1IF=0; } ELSE IF(TMR2IF==1) //KIEM TRA CO TRAN TIMER2 { OUTPUT_HIGH(PIN_E2); DELAY_MS(50); OUTPUT_LOW(PIN_E2); TMR2IF=0; } }

5)delay dng timer c dng ngt


#INCLUDE<16F877A.H> #FUSES XT,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #BYTE PORTB=0x06 #BYTE PORTC=0x07 #BYTE PORTD=0x08 #INT_TIMER0 //CHUONG TRINH NGAT TIMER0 VOID NGAT_TIMER0() { PORTB=0b10101010; DELAY_MS(200); PORTB=0b01010101; }

#INT_TIMER1 //CHUONG TRINH NGAT TIMER1 VOID NGAT_TIMER1() { PORTC=0b11110000; DELAY_MS(200); PORTC=0b00001111; } #INT_TIMER2 //CHUONG TRINH NGAT TIMER2 VOID NGAT_TIMER2() { PORTD=0b11001100; DELAY_MS(200); PORTD=0b00001111; }

VOID MAIN() { SET_TRIS_B(0); SET_TRIS_C(0); SET_TRIS_D(0); ENABLE_INTERRUPTS(GLOBAL); //CHO PHEP TAT CA CAC NGAT HOAT DONG ENABLE_INTERRUPTS(INT_TIMER0); //CHO PHET NGAT BANG TIMER0 ENABLE_INTERRUPTS(INT_TIMER1); //CHO PHET NGAT BANG TIMER1 ENABLE_INTERRUPTS(INT_TIMER2); //CHO PHET NGAT BANG TIMER2 SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_1); SET_TIMER0(0); SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_4); SET_TIMER1(0); SETUP_TIMER_2(T2_DIV_BY_16,255,1); SET_TIMER2(0); WHILE(TRUE); //KHONG LAM GI CA CHO NGAT }

6) dng ch counter

#INCLUDE<16F877A.H> #FUSES XT,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #USE FAST_IO(C) #BIT TMR0IF=0x0B.2 #BYTE PORTC=0x07 CONST CHAR FONT[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98}; INT8 I;

VOID MAIN() { SET_TRIS_C(0); PORTC=255; SETUP_COUNTERS(RTCC_EXT_H_TO_L,RTCC_DIV_1); SET_TIMER0(255); WHILE(TRUE) { IF(TMR0IF==1) { IF(I<=9) { PORTC=FONT[I++]; } ELSE { I=0; PORTC=FONT[I]; } TMR0IF=0; SET_TIMER0(255); } } }

7) dng ch pwm
#INCLUDE<16F877A.h> #FUSES NOWDT,PUT,XT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #USE FAST_IO(B) #USE FAST_IO(C) #BYTE PORTB=0x06 #BIT RB1=PORTB.1 #BIT RB2=PORTB.2 INT16 U; VOID MAIN() { SET_TRIS_B(255); SET_TRIS_C(0); U=200; SETUP_TIMER_2(T2_DIV_BY_16,255,1); //THIET LAP CAU HINH CHO TIMER0 SET_TIMER2(0); SETUP_CCP1(CCP_PWM); //CHON CHE DO PWM SET_PWM1_DUTY(U); //XAC DINH SO XUNG DE CHAN PWM1 O MUC 1 WHILE(TRUE) { IF(RB1==0) //TANG DO SANG LED { U=U+10; IF(U>255) { U=255; SET_PWM1_DUTY(U);//TANG TOC PHAI } ELSE { SET_PWM1_DUTY(U); } } ELSE IF(RB2==0) { U=U-10; IF(U>145) SET_PWM1_DUTY(U);// GIAM TOC PHAI ELSE { U=145; SET_PWM1_DUTY(U); } }

} }

8) DNG NGT NGOI

#INCLUDE<16F877A.h> #FUSES NOWDT,PUT,XT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #USE FAST_IO(B) #USE FAST_IO(D) #BYTE PORTB=0x06 #BYTE PORTD=0x08 #BIT RB0=PORTB.0 #BIT RB4=PORTB.4 #BIT RB5=PORTB.5 #BIT RB6=PORTB.6 #BIT RB7=PORTB.7

#INT_EXT //CHUONG TRINH NGAT TREN CHAN RB0 VOID NGATNGOAI_RB0() { OUTPUT_HIGH(PIN_D0); DELAY_MS(1000); OUTPUT_LOW(PIN_D0); }

#INT_RB VOID NGATNGOAI_RB() //CHUONG TRINH NGAT NGOAI TREN CHAN RB4-->RB7 { IF(RB4==0) //KIEM TRA CHAN RB4 { OUTPUT_HIGH(PIN_D0);

DELAY_MS(1000); OUTPUT_LOW(PIN_D0); } ELSE IF(RB5==0) //KIEM TRA CHAN RB5 { OUTPUT_HIGH(PIN_D1); DELAY_MS(1000); OUTPUT_LOW(PIN_D1); } ELSE IF(RB6==0) //KIEM TRA CHAN RB6 { OUTPUT_HIGH(PIN_D2); DELAY_MS(1000); OUTPUT_LOW(PIN_D2); } ELSE IF(RB7==0) //KIEM TRA CHAN RB7 { OUTPUT_HIGH(PIN_D3); DELAY_MS(1000); OUTPUT_LOW(PIN_D3); } } VOID MAIN() { SET_TRIS_B(255); SET_TRIS_D(0); PORTD=0; ENABLE_INTERRUPTS(GLOBAL); //CHO PHEP TAT CA CAC NGAT HOAT DONG ENABLE_INTERRUPTS(INT_RB); //CHO PHEP NGAT NGOAI TU CAC CHAN RB4-->RB7 ENABLE_INTERRUPTS(INT_EXT); //CHO PHEP NGAT NGOAI TREN CHAN RB0 EXT_INT_EDGE(H_TO_L); //KIEU TAC DONG LA KIEU SUONG AM WHILE(TRUE) { OUTPUT_HIGH(PIN_D7); DELAY_MS(1000); OUTPUT_LOW(PIN_D7); DELAY_MS(1000); } }

Cch s dng chng trnh m phng proteus Giao din ca chng trnh Proteus nh sau:

Chng 7

tm cc linh kin cn dng bn n phm P hay click chut vo nt P bn tri mn hnh Mt ca s s hin ra: -Trong c cc th mc gip bn d dng trong vic tm cc linh kin cn dng -Vi d nh diodes (cc loi diot),microcontrollers(cc loi vi iu khin)

Sau khi sp xp cc linh kin ta c s hon chnh nh sau:

chy m phng mch in ta lm nh sau: - Nhy chut phi vo con vi iu khin ta cn khi thy n i mu th ta nhy chut tri v mt ca s s hin ra nh sau:

Ti program file chng ta ch ng dn n file HEX cn phi np cho chip Ti processor clock frequency chng ta chn tn s giao ng ca thch anh Sau n ok hon tt - chy m phng chng ta s dng cc nt: Qu trnh chy m phng c minh ho hnh di:

Hng dn s dng trnh bin dch ccs c Sau khi ci t phn mm chng trnh s c giao din nh sau:

CHNG 8

to mt project mi bn h y chn Project/ New /Pic Winzard . Sau khi nh tn file mun t mt ca s s hin ra nh sau:

Ti mc Device bn chn tn Pic ang dng Ti mc oscilator Frequency bn chn tn s giao ng ca thch anh Sau n ok hon tt Sau khi hon tt vic lp trnh bn n F9 chng trnh dch sang file HEX Vi file Hex c to ra bn c th np c cho vi iu khin

You might also like