intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tài liệu tham khảo cho PIC16F877A - Đào Trọng Nghĩa

Chia sẻ: Tran Van Khoa | Ngày: | Loại File: PDF | Số trang:37

161
lượt xem
56
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

PIC16F877A là 1 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. Để nắm rõ hơn kiến thức, mời các bạn cùng tham khảo tài liệu.

Chủ đề:
Lưu

Nội dung Text: Tài liệu tham khảo cho PIC16F877A - Đào Trọng Nghĩa

  1. 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.
  2. 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.
  3. 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.
  4. +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)
  5. + 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
  6. +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:
  7. Ch−¬ng 3 C¸c thanh ghi cã chøc n¨ng ®Æc biÖt
  8. 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
  9. 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
  10. 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
  11. 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:
  12. 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: TMR1ON =1: cho phÐp Timer1 ho¹t ®éng TMR1ON =0: kh«ng cho phÐp Timer1 ho¹t ®éng Bit 1: Tmr1cs =1: dïng nguån xung tõ bªn ngo i th«ng qua ch©n RC0 (s−êng d−¬ng) Tmr1cs =0: dïng nguån xung tõ bé t¹o dao ®éng Bit 2: 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
  13. 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
  14. 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
  15. - 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
  16. 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:
  17. 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:
  18. 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 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)
  19. 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);
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2