Tµi liÖu tham kh¶o cho pic16f877a
(®−îc viÕt bëi ®µo träng nghÜa- ®tvt 3a)
Ch−¬ng1
Giíi thiÖu tæng quan vÒ hä vi ®iÒu khiÓn pic
HiÖn nay trong c¸c m¸y mãc c«ng nghiÖp vµ c¸c thiÕt bÞ phôc vô sinh ho¹t cho cuéc
Sèng hÇu hÕt ®Òu øng dông réng r$i c¸c thiÕt bÞ ®iÖn tö ,mµ bé xö lý trung t©m lµ c¸c con
Chip vi ®iÒu khiÓn hÕt søc th«ng minh ®Æc biÖt c¸c Chip nµy cã thÓ lËp tr×nh ®−îc
Bëi con ng−êi! V× vËy chóng ta cÇn ph¶i nghiªn cøu vµ ph¸t triÓn nã.
Trªn thÞ tr−êng hiÖn nay phæ biÕn rÊt nhiÒu lo¹i vi ®iÒu khiÓn phong phó vÒ chñng lo¹i vµ
gi¸ c¶ th× t−¬ng ®èi rÎ phï hîp víi ®iÒu khiÖn ë ViÖt Nam trong ®ã phæ biÕn cã c¸c lo¹i nh− :
MCS51 ; AVR cña ATMEL , PIC cña MICROCHIP , PSOC cña CYPRESS MICRO
SYSTEM…
HiÖn nay víi sù ®a d¹ng vµ nhiÒu chñng lo¹i kh¸c nhau cña PIC ®Æc biÖt lµ tÝnh æn ®Þnh cña
chóng ®$ lµm cho nhiÒu ng−êi thÝch thó vµ −a chuéng v× vËy chóng ®$ ®−îc øng dông réng
r$i trªn toµn thÕ giíi.
Côm tõ PIC ®−îc viÕt t¾t tõ côm tõ : peripheral interface controller
(Bé §iÒu KhiÓn giao tiÕp c¸c thiÕt bÞ ngo¹i vi).Kh¸c víi c¸c bé vi xö ,bé vi ®iÒu khiÓn ®−îc
tÝch hîp toµn bé nh− RAM , ROM , c¸c PORTS truy xuÊt ,giao tiÕp ngo¹i vi trùc tiÕp trªn
mét con chÝp hÕt søc nhá gän.
PIC16F877A lµ mét vi ®iÒu khiÓn cã kiÕn tróc HARVARD (bé nhí ch−¬ng tr×nh vµ bé nhí
d÷ liÖu ®−îc truy xuÊt ®éc lËp víi nhau) sö dông 14 bit cho c¸c lÖnh , vµ tËp lÖnh cña nã chØ
hÇu hÕt chØ cã mét WORD.
Ch−¬ng2
CÊu tróc phÇn cøng cña PIC16f877a
i)bé nhí ch−¬ng tr×nh cña pic
Kh«ng gian bé nhí ch−¬ng tr×nh cña PIC kh¸c nhau tuú thuéc vµo tõng lo¹i
Sau ®©y lµ mét sè vÝ dô:
-16C711,16F84 cã 1024(1K)
-16F877A cã 8192(8K)
-17C766 cã 16384(16K)
II)bé nhí d÷ liÖu cña pic
C¸c thanh ghi ®a môc ®Ých cho ng−êi dïng cña PIC lµ c¸c « nhí RAM . Mçi thanh ghi nµy
cã ®é réng 8 bÝt cho tÊt c¶ c¸c PIC
Sau ®©y l¶ mét vµi vÝ dô:
-12C508 cã 25 Bytes RAM
-16C71C cã 36 Bytes RAM
-16F877A cã 368 Bytes(plus 256 Bytes of nonvolatile EEPROM)
III)C¸C CH¢N CñA PIC 16F877A
1)c¸c ch©n nguån
Trong c¸c s¬ ®å cña m¹ch 8051 th−êng kÝ hiÖu ch©n cÊp nguån lµ VCC , cßn ch©n nèi mass
lµ GND . Cßn ®èi víi PIC th× ng−îc l¹i thay VCC = VDD cßn ch©n GND = VSS
Trong PIC 16F877A trªn h×nh vÏ ta cã thÓ thÊy cã tÊt c¶ 4 ch©n cÊp nguån nh− sau:
- Ch©n 11 , 32 lµ c¸c ch©n VDD (+5v)
- Ch©n 12 , 31 lµ c¸c ch©n VSS (0v)
2)ch©n reset
Trªn h×nh ta thÊy ch©n sè 1(MCLR) chÝnh lµ ch©n RESET cña PIC , ch©n nµy cã
nhiÖm vô khëi ®éng l¹i chip khi ch©n nµy ®−îc tÝch cùc.
Ch©n RESET cña PIC tÝch cùc ë møc thÊp ®Òu nµy tr¸i ng−îc hoµn toµn víi hä 8051
3)m¹ch dao ®éng
Trªn h×nh vÏ ta thÊy 2 ch©n 13(OSC1) vµ ch©n 14(OSC2) lµ 2 ch©n dao ®éng. Tèc ®é dao
®éng ®−îc x¸c ®Þnh th«ng qua tÇn sè dao ®éng cña bé t¹o dao ®éng
S¬ ®å m¹ch dao ®éng nh− h×nh vÏ sau:
4)cæng xuÊt nhËp
+PORT A vµ thanh ghi TRIS A:
Cæng A cã 6 bit thùc hiÖn chøc n¨ng vµo ra theo 2 chiÒu viÖc x¸c ®Þnh h−íng
xuÊt nhËp d−îc thùc hiÖn th«ng qua thanh ghi TRIS A.
ViÖc ®−a 1 bit trong thanh ghi TRIS A lªn 1 còng ®ång nghÜa víi viÖc ®Æt ch©n
t−¬ng øng cña cæng A lµ ch©n nhËp d÷ liÖu.
ViÖc xo¸ 1 bit trong thanh ghi TRIS A xuèng 0 còng ®ång nghÜa víi viÖc ®Æt
ch©n t−¬ng øng cña cæng A lµ ch©n xuÊt d÷ liÖu.
Ch©n RA4/TOCKI lµ ch©n ®a môc ®Ých víi viÖc võa lµ ch©n xuÊt nhËp võa lµ ®Çu vµo cña bé
®Õm TIMER0 .§Çu vµo cña ch©n RA4 lµ mét trigger schmitt
nªn cã cùc m¸ng hë trong chÕ ®é nhËp chóng ta cÇn g¾n thªm ®iÖn trë kÐo d−¬ng cho nã.
C¸c ch©n kh¸c trong PORT A cßn lµ ®Çu vµo cña tÝn hiÖu t−¬ng tù trong bé
chuyÓn ®æi ADC . Sù ho¹t ®éng cña c¸c ch©n trong chÕ ®é nµy lµ viÖc ®iÒu
kiÓn thÝch hîp c¸c bÝt trong thanh ghi ADCON1 vµ CMCON.
+port b vµ thanh ghi tris b:
Cæng B cã 8 bÝt xuÊt nhËp theo 2 chiÒu ,viÖc chän chøc n¨ng xuÊt hoÆc nhËp
®−îc ®iÒu khiÓn th«ng qua thanh ghi TRIS B còng t−¬ng tù nh− víi PORTS A
Ba ch©n cña PORT B lµ c¸c ch©n ®a chøc n¨ng(RB3/PGM,RB6/PGC/RB7/PGD)
víi c¸c øng dông nh− trong m¹ch gì rèi vµ ch−¬ng tr×nh ®iÖn ¸p thÊp
Mçi ch©n cña PORT B ®Òu cã c¸c ®iÖn trë kÐo d−¬ng ë bªn trong cã gi¸ trÞ
kho¶ng 47K cã thÓ cho phÐp ho¹t ®éng ë chÕ ®é nµy th«ng qua viÖc set bit
RBPU trong thanh ghi OPTION
ViÖc ®iÖn trë kÐo sÏ bÞ kho¸ ngay khi PORT B chuyÓn sang chÕ ®é xuÊt d÷
liÖu hoÆc khi V§K míi khëi ®éng
Bèn ch©n cña PORT B lµ c¸c ch©n tõ RB4 ®Õn RB7 cßn lµ c¸c ch©n phôc vô
ng¾t, nÕu 1 trong c¸c ch©n ®ã ®−îc ®Þnh h×nh lµ ®Çu vµo th× nã cã thÓ lµ
nguyªn nh©n cho 1 ng¾t ph¸t sinh
Khi mét ng¾t ®−îc t¹o ra còng ®ång thêi cê RBIF(INTCON.0) ®−îc set lªn 1,
vµ nã cã thÓ ®¸nh thøc V§K ®ang ë chÕ ®é ngñ(SLEEP)
+ PORT C vµ thanh ghi TRIS C:
PORTC cã tÊt c¶ 8 ch©n ®a môc ®Ých víi c¸c chøc n¨ng nh− : xuÊt nhËp d÷ liÖu, ®Æc biÖt 2
ch©n 18(SCL) vµ 23(SDA) lµ 2 ch©n thùc hiÖn chøc n¨ng giao tiÕp víi ngo¹i vi th«ng qua
chuÈn I2C
Thanh ghi TRISC còng t−¬ng tù nh− trªn lµm nhiÖm vô ®Þnh nghÜa c¸c ch©n t−¬ng øng lµ
cæng vµo hay cæng ra
+PORT D vµ thanh ghi TRIS D - PORT E vµ thanh ghi TRIS E:
Hai PORT nµy ®Òu cã 8 ch©n ®a môc ®Ých nh−ng chñ yÕu vÉn lµ ®Ó xuÊt nhËp ®÷ liÖu cßn
c¸c øng dông kh¸c chung ta sÏ kh«ng xÐt ë ®©y
C¸c b¹n cã thÓ tham kh¶o thªm trong c¸c h×nh d−íi ®©y:
Ch−¬ng 3
C¸c thanh ghi cã chøc n¨ng ®Æc biÖt
C¸c thanh ghi nµy cã chøc n¨ng ®iÒu khiÓn c¸c ho¹t ®éng vµ c¸c khèi giao tiÕp ngo¹i vi cña
vi ®iÒu khiÓn
i) thanh ghi Status
Bit 0 : lµ mét cê b¸o trµn mçi khi cã nhí tõ bit 7 trong phÐp céng hoÆc cã m−în
trong phÐp trõ
Bit 1 : lµ cê nhí phô bÞ t¸c ®éng khi thùc hiÖn phÐp to¸n v−ît qu¸ 4 bÝt thÊp
Bit 2 :
Z=1 nÕu kÕt qu¶ phÐp to¸n b»ng 0
Z=0 nÕu kÕt qu¶ phÐp to¸n kh¸c 0
Bit 3 :
PD=1 sau khi bËt nguån hoÆc bëi lÖnh CLRWDT
PD=0 khi lÖnh SLEEP ®−îc thùc thi
Bit 4 :
TO=1 nÕu cã lÖnh SLEEP thùc thi hoÆc lÖnh CLRWDT hoÆc sau khi bËt
nguån
T0=0 nÕu bé WDT bÞ chµn
Bit 6-5:
00: chän bank 0
01: chän bank 1
10: chän bank 2
11: chän bank 3
Bit 7:
1: chän bank 2,3
0: chän bank 0,1
ii)
thanh ghi option_reg:
Bit 0-1-2 : dïng ®Ó chän gi¸ trÞ cho bé chia tÇn cho TIMER0 hoÆc WDT
Bit 3 :
PSA =1: bé chia tÇn dïng cho WDT
PSA =0: bé chia tÇn dïng cho TIMER0
Bit 4 :
TOSE =1: chän s−êng xuèng lµ s−êng t¸c ®éng lªn ch©n RA4
TOSE =0: chän s−êng lªn lµ s−êng t¸c ®éng lªn ch©n RA4
Bit 5 :
TOCS =1: chän xung ®Õm trong TIMER0 lµ xung trªn ch©n RA4
TOCS =0: chän xung ®Õm trong TIMER0 lµ xung néi
Bit 6 :
INTEDG =1: x¶y ra ng¾t khi ch©n RB0 cã s−ên lªn
INTEDG =0: x¶y ra ng¾t khi ch©n RB0 cã s−ên xuèng
Bit 7 :
RBPU =1: cÊm cho phÐp ®iÖn trë kÐo d−¬ng PORTB
RBPU =0: cho phÐp ®iÖn trë kÐo d−¬ng PORTB
III) thanh ghi intcon:
Bit 0: Cê b¸o ng¾t cho c¸c ch©n RB4-RB7
RBIF =1: xuÊt hiÖn Ýt nhÊt mét trong c¸c ng¾t t¹i c¸c ch©n RB4-RB7
RBIF =0: kh«ng xuÊt hiÖn ng¾t t¹i c¸c ch©n RB4-RB7
Bit 1: Cê ng¾t cho ch©n RB0
INTF =1: xuÊt hiÖn ng¾t trªn ch©n ng¾t ngoµi RB0
INTF =0: kh«ng xuÊt hiÖn ng¾t trªn ch©n ng¾t ngoµi RB0
Bit 2: Cê ng¾t cho bé TIMER0
TMR0IF =1: x¶y ra trµn trong thanh ghi TMR0
TMR0IF =0: ch−a x¶y ra trµn trong thanh ghi TMR0
Bit 3:
RBIE =1: cho phÐp ng¾t trªn c¸c ch©n RB4-RB7
RBIE =0: cÊm ng¾t trªn c¸c ch©n RB4-RB7
Bit 4:
INTE =1: cho phÐp ng¾t trªn ch©n RB0
INTE =0: cÊm ng¾t trªn ch©n RB0
Bit 5:
TMR0IE =1: cho phÐp ng¾t b»ng bé TIMER0
TMR0IE =0: cÊm ng¾t b»ng bé TIMER0
Bit 6:
PEIE =1: cho phÐp ng¾t phôc vô cho thiÕt bÞ ngo¹i vi
PEIE =0: cÊm c¸c ng¾t phôc vô cho thiÕt bÞ ngo¹i vi
Bit 7:
GIE =1: cho phÐp tÊt c¶ c¸c ng¾t ®−îc thùc hiÖn
GIE =0: cÊm tÊt c¶ c¸c ng¾t kh«ng ®−îc thùc hiÖn
Chó ý:
VÞ trÝ cña bé nhí d÷ liÖu ®−îc chia thµnh 4 BANK thanh ghi(c¸c khèi , c¸c vïng)
ë mçi thêi ®iÓm , chóng ta chØ cã thÓ truy xuÊt trªn 1 BANK thanh ghi nµo ®ã mµ th«i
.ViÖc
chän BANK nµo th«ng qua viÖc ®iÒu khiÓn c¸c bit 5-6-7 cña thanh ghi STATUS
Chóng ta thÊy r»ng trong PIC cßn rÊt nhiÒu c¸c thanh ghi chøc n¨ng kh¸c nh−ng
chóng ta sÏ kh«ng bµn ®Õn nã ë ®©y.NÕu c¸c b¹n cÇn më réng kiÕn thøc th× cã thÓ tham
kh¶o thªm trong DATASHEET cña 16F877A
Ch−¬ng 4
C¸c øng dông c¬ b¶n cña pic 16F877a
I) ®Õm vµ ®Þnh thêi:
1)Bé ®Þnh thêi TIMER0
Timer0 lµ mét trong 3 bé ®Þnh thêi cña PIC16F877A , mçi mét ®Þnh thêi th× sö
dông
c¸c thanh ghi chøc n¨ng kh¸c nhau víi nhiÖm vô vµ c¸ch thøc ho¹t ®éng còng kh¸c
nhau
+c¸c thanh ghi dïng trong timer0
Thanh ghi option: Lµ thanh ghi cho phÐp ®äc ghi dïng ®Ó ®iÒu khiÒn thiÕt lËp
cÊu h×nh cho Timer0
Thanh ghi intcon:Lµ thanh ghi chøa cê ng¾t cña Timer0
Thanh ghi tmr0: Lµ thanh ghi 8 bit ,mçi lÇn cã xung t¸c ®éng th× gi¸ trÞ cña
thanh ghi sÏ t¨ng lªn 1 ®¬n vÞ cho ®Õn khi trµn th× thanh ghi sÏ chë vÒ 0
+ho¹t ®éng cña bé ®Þnh thêi timer0:
Nh×n s¬ ®å khèi cña TIMER0 ta cã thÓ thÊy nã ho¹t ®éng ë 2 chÕ ®é
- ChÕ ®é ®Þnh thêi: ë chÕ ®é nµy chóng ta cÇn chän xung t¸c ®éng lµ xung néi(TOCS
=0) lóc nµy xung t¹o ra bëi bé giao ®éng sau khi ®−îc chia 4 sÏ ®i qua bé chia tÇn
cung cÊp cho Timer0 ®Õm .Sau khi mét xung ®−îc ®Õm gi¸ trÞ cña thanh ghi TMR0 sÏ
t¨ng lªn 1 ®¬n vÞ , khi x¶y ra trµn th× cê TMR0IF sÏ ®−îc set lªn 1.
- ChÕ ®é ®Õm: ë chÕ ®é nµy chóng ta cÇn chän xung t¸c ®éng lµ xung ngoµi(TOCS =1)
Timer0 sÏ lÊy xung tõ bªn ngoµi th«ng qua ch©n RA4 th«ng qua bé chia tÇn sÏ cung
cÊp cho Timer0 t−¬ng tù nh− trªn.ViÖc chän kiÓu xung t¸c ®éng th«ng qua viÖc ®iÒu
khiÓn bit T0SE.
- ChÕ ®é WDT: chóng ta sÏ kh«ng t×m hiÓu vÊn ®Ò nµy….
2)bé ®Þnh thêi timer1:
Bé ®Þnh thêi Timer1 lµ bé ®Þnh thêi 16 bit còng víi 2 chøc n¨ng c¬ b¶n nh− Timer0
+c¸c thanh ghi dïng trong timer1:
Thanh ghi t1con: Lµ thanh ghi thiÕt lËp cÊu h×nh ho¹t ®éng cho Timer1
Bit 0:
Bit 1:
d−¬ng)
Bit 2:
TMR1ON =1: cho phÐp Timer1 ho¹t ®éng
TMR1ON =0: kh«ng cho phÐp Timer1 ho¹t ®éng
Tmr1cs =1: dïng nguån xung tõ bªn ngoµi th«ng qua ch©n RC0 (s−êng
Tmr1cs =0: dïng nguån xung tõ bé t¹o dao ®éng
khi Tmr1cs =1:
t1sync=1: kh«ng sö dông xung ngoµi lµ xung ®ång bé
t1sync=0: cho phÐp sö dông xung ngoµi lµ xung ®ång bé
khi Tmr1cs =0:
Bit nµy kh«ng ®−îc sö dông
Bit 3:
T1oscen=1: cho phÐp bé t¹o dao ®éng ho¹t ®éng
T1oscen=0: kh«ng cho phÐp bé t¹o dao ®éng ho¹t ®éng
Bit 5 -4 :
ThiÕt lËp gi¸ trÞ cho bé chia tÇn
THANH GHI TMR1: Lµ thanh ghi l−u tr÷ gi¸ trÞ ®Þnh thêi 16 bit ®−îc t¹o thµnh tõ 2
thanh ghi 8 bit tmr1l – tmr1h
Thanh ghi pir1: Lµ thanh ghi chøa cê trµn TMR1IF cña Timer1
Thanh ghi pie1: Lµ thanh ghi chøa bit TMR1IE cho phÐp ng¾t Timer1 ho¹t ®éng
+ho¹t ®éng cña bé ®Þnh thêi timer1
-
-
Nh×n vµo s¬ ®å khèi ta thÊy Timer1 cã 2 chøc n¨ng c¬ b¶n sau:
ChÕ ®é ®Þnh thêi: tr−íc hÕt cÇn ph¶i cho Timer1 ho¹t ®éng b»ng c¸ch set bit
TMR1ON
sau ®ã chän chÕ ®é sö dông xung néi(TMR1CS =1).Xung tõ bé t¹o dao ®éng sÏ
®−îc chia 4 sau ®ã ®−a qua bé chia tÇn cung cÊp cho Timer1 ®Õm ®ång thêi gi¸ trÞ
cña thanh ghi TMR1 sÏ t¨ng lªn 1 ®¬n vÞ cho ®Õn khi trµn vµ cê trµn TMR1IF=1.
ChÕ ®é ®Õm: khi sö dông chÕ ®é nµy chung ta cÇn ph¶i set bit TMR1CS =1, nguån
xung tõ bªn ngoµi cã thÓ lÊy tõ 2 ch©n RC0 - RC1 th«ng qua viÖc thiÕt lËp bit
T1OSCEN , nÕu bit T1SYNC=0 th× xung t¸c ®éng tõ bªn ngoµi sÏ ®ång bé víi xung
dao ®éng bªn trong , qu¸ tr×nh ®ång bé x¶y ra sau khi xung ®i qua bé chia tÇn
3)bé ®Þnh thêi timer2:
Timer2 lµ bé ®Þnh thêi 8 bit t−¬ng tù nh− Timer1 nh−ng l¹i cã tíi 2 bé chia tÇn cã thÓ
®−îc dïng trong øng dông ®Ó ®iÒu chÕ ®é réng xung (PWM)
C¸c thanh ghi dïng trong timer2:
Thanh ghi t2con: Lµ thanh ghi thiÕt lËp cÊu h×nh cho Timer2
Bit 1- 0: thiÕt lËp gia trÞ cho bé chia tÇn Prescale
00 = 1:1
01 = 1:4
1x = 1:16
Bit 2:
TMR2ON=1: cho phÐp sö dông Timer2
TMR2ON=0: kh«ng cho phÐp sö dông Timer2
Bit 6- 3: thiÕt lËp gi¸ trÞ cho bé chia tÇn Postcale
Thanh ghi pir1: chøa cê trµn TMR2IF cña Timer2
Thanh ghi Pie1: chøa cê cho phÐp ng¾t TMR2IE cña Timer2
Thanh ghi Pr2: øng dông trong PWM
Thanh ghi tmr2: l−u tr÷ gi¸ trÞ ®Þnh thêi 8 bit cho Timer2
+ho¹t ®éng cña bé ®Þnh thêi timer2
-
ChÕ ®é ®Þnh thêi: nguån xung tõ bé t¹o dao ®éng sau khi ®−îc chia 4 sÏ ®−îc ®−a bé
chia tÇn Prescale n¹p vµo thanh ghi TMR2 , khi x¶y ra trµn bit TMR2IF=1.
ChÕ ®é PWM: tr−íc hÕt chóng ta n¹p gi¸ trÞ cho thanh ghi PR2 sau ®ã khi gi¸ trÞ cña
thanh ghi TMR2 sÏ ®−îc so s¸nh víi gi¸ trÞ cña thanh ghi PR2 nÕu chóng b»ng nhau
th× thanh ghi TMR2 sÏ ®−îc Reset ®ång thêi gi¸ trÞ c¸c ch©n PWM sÏ thay ®æi…
chóng ta sÏ ®Ò cËp ®Õn vÊn ®Ò nµy ë phÇn sau.
II) c¸c ng¾t th«ng dông:
Nh− chóng ta ®$ biÕt, vi ®iÒu khiÓn t¹i mçi thêi ®iÓm nã chØ cã thÓ lµm mét c«ng
viÖc nhÊt ®Þnh. Nh−ng trong thùc tÕ th× l¹i kh¸c, ng−êi lËp tr×nh l¹i muèn vi ®iÒu
khiÓn ®ang lµm c«ng viÖc nµy l¹i tù ®éng chuyÓn sang lµm c«ng viÑc kh¸c ,vËy lµm
thÕ nµo ®Ó vi ®iÒu khiÓn lµm ®−îc ®ã? ®¬n gi¶n lµ nã sÏ sö dông c¬ chÕ gäi lµ : Ng¾t
1)c¸c ng¾t cña pic 16f877a
+Ng¾t trµn Timer0
+Ng¾t do cã thay ®æi tr¹ng th¸i trªn c¸c ch©n tõ RB4- RB7
+Ng¾t ngoµi trªn ch©n RB0
+Ng¾t chuyÓn ®æi ADC ®$ hoµn tÊt
+Ng¾t bé chuyÓn ®Öm RS 232 chèng
+Ng¾t do d÷ liÖu nhËn tõ RS232 ®$ s½n sµng
+Ng¾t trµn Timer1
+Ng¾t trµn Timer2
+Ng¾t do cã capture hay compare trªn ch©n CCP1
+Ng¾t do cã capture hay compare trªn ch©n CCP2
+Ng¾t do cã ho¹t ®éng SPI hay I2C
+Ng¾t do cã d÷ liÖu vµo cæng parallel slave
+Ng¾t do ghi vµo EPROM hoµn tÊt
+Ng¾t do xung ®ét BUS
+Ng¾t do kiÓm tra b»ng nhau comparator
Ta thÊy r»ng Pic cã rÊt nhiÒu ng¾t øng dông trong nhiÒu chøc n¨ng kh¸c nhau nh−ng
ë ®©y chóng ta chØ ®Ò cËp ®Õn mét sè ng¾t c¬ b¶n sau:
+Ng¾t do c¸c timer hoÆc ng¾t ngoµi :
VÒ c¬ b¶n ho¹t ®éng cña c¸c ng¾t Timer hoÆc ng¾t ngoµi ho¹t ®éng nh− sau:
- Xung t¹o ra do bé t¹o dao ®éng hoÆcnguån xung bªn ngoµi sÏ ®−îc cung cÊp cho c¸c
thanh ghi ®Þnh thêi t−¬ng øng cña c¸c bé ®Þnh thêi , khi c¸c bé ®Þnh thêi x¶y ra trµn cê
ng¾t t−ong øng ®−îc bËt vµ mét yªu cÇu ng¾t ®−îc phôc vô lóc nµy vi ®iÒu khiÓn sÏ
t¹m ngõng c«ng viÖc hiÖn t¹i, hoµn thµnh lÖnh hiÖn thêi ngay tøc kh¾c ®Ó nh¶y vµo
ch−¬ng tr×nh phôc vô ng¾t ISR. Khi ®ã bé ®Õm ch−¬ng tr×nh PC sÏ ®−îc ®Èy vµo ng¨n
xÕp STACK vµ ®ång thêi bit GIE =0 ch−¬ng tr×nh rÏ nh¸nh ®Õn ®Þa chØ vect¬ ng¾t
0x04 ,t¹i ®©y vi ®iÒu khiÓn sÏ thùc hiÖn c¸c yªu cÇu mµ ng¾t ®ßi hái .
- ViÖc thiÕt lËp cÊu h×nh cho c¸c ng¾t sÏ th«ng qua c¸c bit cña c¸c thanh ghi chøc n¨ng
nh− sau:
+§èi víi Timer0 : BÝt ®iÒu khiÓn lµ bit TMR0IE(INTCON.5)
+§èi víi Timer1 : BÝt ®iÒu khiÓn lµ bit TMR1IE(PIE.0)
+§èi víi Timer2 : BÝt ®iÒu khiÓn lµ bit TMR2IE(PIE.1)
+§èi víi ng¾t ngoµi: BÝt ®iÒu khiÓn lµ bit INTE(INTCON.4)
+§èi víi ng¾t do c¸c ch©n RB4 – RB7: BÝt ®iÒu khiÓn lµ bit RBIE(INTCON.3)
Chó ý: Tr−íc khi thiÕt lËp c¸c ng¾t chóng ta cÇn ph¶i cho phÐp ng¾t toµn côc th«ng
qua viÖt cho bit GIE =1(INTCON.7)
III) §iÒu chÕ ®é réng xung( PWM)
Mét trong nh÷ng tÝnh n¨ng quan träng cña PIC ®−îc øng dông rÊt nhiÒu ®ã lµ ®iÒu chÕ
®é réng xung PWM(Pulse Width Modulation)
Thanh ghi ®iÒu khiÓn ccp1con/ccp2con:
Bit 3- 0: chän chÕ ®é lµm viÖc
Bit 5 - 4:????
Qu¸ tr×nh ho¹t ®éng cña chøc n¨ng PWM nh− sau:
- Víi PIC 16F877A chóng ta cã 2 ch©n ®iÒu chÕ ®é réng xung lµ CCP1 vµ CCP2 ,sau
chän chøc n¨ng PWM b»ng c¸ch ®iÒu khiÓn 4 bÝt thÊp cña thanh ghi CCPxCON ,
chóng ta sÏ n¹p gi¸ trÞ cho thanh ghi PR2 vµ thanh ghi CCPRx . Khi Timer2 ho¹t ®éng
gi¸ trÞ cña thanh TMR2 sÏ t¨ng cho ®Õn khi b»ng gi¸ trÞ cña thanh ghi PR2 lóc nµy
ch©n CCPx t−¬ng øng sÏ lªn møc 1 ®ång thêi thanh ghi TMR2 sÏ bÞ xo¸ vÒ gi¸ trÞ ban
®Çu.Møc 1 t¹i ch©n CCPx sÏ ®−îc d÷ cho ®ªn khi gi¸ trÞ thanh ghi TMR2 b»ng gi¸ tri
thanh ghi CCPRx sau ®ã ch©n CCPx l¹i trë vÒ 0 cho ®Õn khi gi¸ trÞ thanh ghi
TMR2=PR2 cø nh− vËy qu¸ tr×nh sÏ lÆp l¹i nh− ban ®Çu..
- Nh− vËy chóng ta cã thÓ rót ra nh− sau:
Chu k× xung lµ kho¶ng thêi gian ®Ó gi¸ trÞ thanh ghi TMR2 t¨ng ®Õn gi¸ trÞ thanh ghi
PR2
Kho¶ng xung d−¬ng lµ kho¶ng thêi gian ®Ó thanh ghi TMR2 t¨ng ®Õn gi¸ trÞ thanh ghi
CCPRx
§Ó hiÓu râ h¬n chóng ta cã thÓ xem trong s¬ ®å sau:
Ch−¬ng 5:
TËp lÖnh CCS c cho PIC 16f877a
I) giíi thiÖu vÒ tr×nh dÞch CCS c:
- CCs lµ tr×nh biªn dÞch dïng ng«n ng÷ C lËp tr×nh cho V§K . §©y lµ ng«n ng÷ lËp
tr×nh ®Çy søc m¹nh , gióp b¹n nhanh chãng trong viÖc viÕt ch−¬ng tr×nh h¬n lµ
Assembly
- CCS chøa rÊt nhiÒu hµm phôc vô cho mäi môc ®Ých vµ cã rÊt nhiÒu c¸ch lËp tr×nh mµ
cho cïng 1 vÊn ®Ò víi tèc ®é thùc thi vµ ®é dµi ch−¬ng tr×nh kh¸c nhau .Sù tèi −u lµ do
kÜ n¨ng lËp tr×nh cña mçi ng−êi
- CCS cung cÊp c¸c c«ng cô tiÖn Ých gi¸m s¸t ho¹t ®éng ch−¬ng tr×nh nh−:
+ C/ASM list: cho phÐp m$ ASM cña file b¹n biªn dÞch , gióp b¹n qu¶n lý vµ n¾m râ
c¸ch thøc nã ®−îc sinh ra , lµ c«ng cô rÊt quan träng gióp b¹n cã thÓ gì rèi ch−¬ng
tr×nh
+ SYMBOL: hiÓn thÞ bé nhí cÊp ph¸t cho tõng biÕn , gióp b¹n qu¶n lý bé nhí c¸c biÕn
cña cña ch−¬ng tr×nh
+ CALLTREE: hiÓn thÞ ph©n bæ bé nhí
II) ChØ thÞ tiÒn xö lý :
1)
#include :
- Có ph¸p: #include
Filename: tªn file cho thiÕt bÞ *.h, *.c . ChØ ®Þnh ®−êng dÉn cho tr×nh biªn ®Þch , lu«n
ph¶i cã ®Ó khai b¸o ch−¬ng tr×nh viÕt cho V§K nµo vµ ph¶I lu«n ®Æt ë dßng ®Çu tiªn
VD: #include<16F877A.H>
2)
#bit :
- Có ph¸p: #bit name = x.y
Name: tªn biÕn
X: biÕn C(8,16,32…bit) hay h¾ng sè ®Þa chØ thanh ghi
Y: vÞ trÝ cña bit trong x
T¹o biÕn 1bit ®Æt ë byte x vÞ trÝ y tiÖn dïng kiÓm tra hay g¸n gi¸ trÞ cho thanh ghi
VD : #Bit TMR1IF = 0x0B.2;
3) #byte :
- Có ph¸p: #byte name = x
Name: tªn biÕn
X:®Þa chØ
G¸n tªn biÕn name cho ®Þa chØ x , name th−êng dïng ®Ó g¸n cho c¸c thanh ghi
VD : #Byte portb = 0x06;
4) #define :
- Có ph¸p: #define name text
Name: tªn biÕn
Text : chuçi hay sè
VD : #Define A 12345
5) #use :
- Có ph¸p: #use delay(clock = speed)
Speed: tèc ®é dao ®éng cña th¹ch anh
Cã chØ thÞ nµy chóng ta míi dïng ®−îc hµm delay_ms hoÆc delay_us
VD: #use delay(clock = 4000000);
6) #use fast_io :
- Có ph¸p: #use fast_io(port)
Port : c¸c cæng vµo ra cña PIC( tõ A-G)
Dïng c¸i nµy chóng ta cã thÓ ®iÒu chØnh c¸c port víi chØ 1 lÖnh
VD: # use fast_io(a);
III) C¸c hµm delay :
1) delay_ms(time)
Time: gi¸ trÞ thêi gian cÇn t¹o trÔ
VD : delay_ms(1000); // trÔ 1s
2) delay_us(time)
Time: gi¸ trÞ thêi gian cÇn t¹o trÔ
VD : delay_us(1000); // trÔ 1ms
Hµm delay nµy kh«ng sö dông bÊt cø Timer nµo c¶ mµ chØ lµ 1 nhãm lÖnh v« nghÜa
thùc hiÖn trong kho¶ng thêi gian b¹n ®$ ®Þnh s½n
Trø¬c khi sö dông c¸c hµm nµy cÇn ph¶I khai b¸o tiÒn ®Þnh #use_delay(….)
IV) c¸c hµm vµo ra trong CCS c
1) Output_low(pin) – Output_high(pin)
ThiÕt lËp møc 0v(low) hoÆc 5v(high) cho c¸c ch©n cña PIC
VD : output_low(pin_D0) ;
2) Output_bit(pin,value)
Pin: tªn ch©n cña PIC
Value: gi¸ trÞ 0 hay 1
VD: output_bit(pin_C0,1);
3) Output_X(value)
X: tªn c¸c port trªn chÝp
Value: gi¸ trÞ 1 byte
VD: output_B(255);
4) Input_X( )
X: tªn c¸c port trªn chip
Hµm nµy tr¶ gi¸ trÞ 8 bit lµ gi¸ trÞ hiÖn h÷u cña port ®ã
VD: n = input_A( );
5) Set_tris_X(value)
X: tªn ch©n (A – G)
Value: lµ gi¸ trÞ 8 bÝt ®iÒu khiÓn vµo ra cho c¸c ch©n cña chip
1: nhËp d÷ liÖu 0: xuÊt d÷ liÖu
VD: set_tris_B(0); // tÊt c¶ c¸c ch©n cña portb lµ ngâ ra
V) hµm sö dông trong c¸c timer:
1)timer0:
- SETUP_TIMER_0(mode);
- Xem thêm -