You are on page 1of 37

Ti liu tham kho cho pic16f877a

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

Chng1

Gii thiu tng quan v h vi iu khin pic

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.

Chng2

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

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:

Chng 3

Cc thanh ghi c chc nng c bit

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

Chng 4

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

Thanh ghi option: L thanh ghi cho php c ghi dng iu khin thit lp

cu hnh cho Timer0

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

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:

Chng 5:

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)

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 0255 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  RB7
+INT_EXT : ngt ngoi trn chn RB0
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

Chng6

Cc v d c bn dng pic 16f877a


1) xut 0-1 ra cc chn:

#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);
}
}

Chng 7

Cch s dng chng trnh m phng proteus


Giao din ca chng trnh Proteus nh sau:

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:

CHNG 8

Hng dn s dng trnh bin dch ccs c


Sau khi ci t phn mm chng trnh s c giao din nh sau:

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