Đăng ký Đăng nhập
Trang chủ Kỹ thuật - Công nghệ Điện - Điện tử Giao trinh pic16f877a_hay_ngan gon...

Tài liệu Giao trinh pic16f877a_hay_ngan gon

.PDF
37
659
131

Mô tả:

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 -

Tài liệu liên quan