pic__pic-16f877a-and-lap-trinh-dung-picc-css - [cuuduongthancong.com].pdf

huut40913 9 views 37 slides Feb 10, 2025
Slide 1
Slide 1 of 37
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37

About This Presentation

datasheet vdk pic


Slide Content

        
 
            Ti liÖu tham kh¶o cho pic16f877a 
                               bÞôsã ¹Öut éSÖ  Þim tèǮҠ®Òrøod Þt¹t $oö  
 
 
                                                             
 
 
                                                               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 ny 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 ®$ lm 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 ton 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 ton 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. 
 
 
    
 
                                                    
                                                        
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

                                                              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 vo tõng lo¹i 
     ëÖÕ næu G8 obt îr fê -−4 
       -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 ny 
cã ®é réng 8 bÝt cho tÊt c¶ c¸c PIC 
      Sau ®©y l¶ mét vi 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: 
E  q1æl ++ C DÝ G8 k¶k k1æl é// 5YËfO 
E  q1æl +Ý C D+ G8 k¶k k1æl éëë 5UfO 
 
2)ch©n reset 
 
     Hh÷l 1Êl1 tÖ t1Nu k1æl îr +5xqS¨O k1êl1 G8 k1æl ¨ÆëÆH kAÖ _Bq C k1æl l8u kc                       
nhiÖm vô khëi ®éng l¹i chip khi ch©n ny ®−îc tÝch cùc. 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 Ch©n RESET cña PIC tÝch cùc ë møc thÊp ®Òu ny tr¸i ng−îc hon ton víi hä 8051     
         
 
     3)m¹ch dao ®éng 
        
      Hh÷l 1Êl1 f? tÖ t1Nu Ý k1æl +D5ýëq+O f8 k1æl +ö5ýëqÝO G8 Ý k1æl -Öa nblm¸ Hrk nb -Öa 
®é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 vo 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 vo cña bé 
®Õm TIMER0 .§Çu vo 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 vo 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Õ ®é ny l viÖc ®iÒu 
kiÓn thÝch hîp c¸c bÝt trong thanh ghi ADCON1 v CMCON. 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
 
 
        +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  
 øÖ k1æl kAÖ _ý¨H ø G8 k¶k k1æl nÖ k1Ük l}lm5¨øD[_*xC¨ø–[_*q[¨øW[_*/O  
        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Õ ®é ny 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 
        ørl k1æl kAÖ _ý¨H ø G8 k¶k k1æl tï ¨øö n7l ¨øW k,l G8 k¶k k1æl 61−k f− 
        lm0tC l7Õ + thalm k¶k k1æl nc nóÇk n®l1 1Êl1 G8 näÕ f8a t1Ê lc kc t1Ó G8 
        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, 
        f8 lc kc t1Ó n¶l1 t1Ük éMR nÖlm ñ k17 nb lmA5ëSÆÆ_O 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
 


+ 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 lm nhiÖm vô ®Þnh nghÜa c¸c ch©n t−¬ng øng l 
cæng vo hay cæng ra 
 
 
        
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
 
    +PORT D v thanh ghi TRIS D  -  PORT E v thanh ghi TRIS E: 
      
        Hai PORT ny ®Ò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: 
 
 
                                                                   
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

           
             Ch−¬ng 3
                    C¸c thanh ghi cã chøc n¨ng ®Æc biÖt 
 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

     
     C¸c thanh ghi ny 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 trn 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  
                HUZU l7Õ (b ;/H (® k18l 
   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 
        
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

                               
 
      
    Bit 3 :  
              PSA =1: bé chia tÇn dïng cho WDT 
              PSA =0: bé chia tÇn dïng cho TIMER0 
     Bit 4 : 
              HýëÆ Z+4 k1yl îóPlm ¬Õrlm G8 îóPlm t¶k nblm G÷l k1æl ¨ãö 
              HýëÆ ZU4 k1yl îóPlm G÷l G8 îóPlm t¶k nblm G÷l k1æl ¨ãö 
     Bit 5 : 
              Hýqë Z+4 k1yl ¬Õlm n7o thalm HBxƨU G8 ¬Õlm th÷l k1æl ¨ãö 
              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 ngoi RB0 
                  INTF =0: kh«ng xuÊt hiÖn ng¾t trªn ch©n ng¾t ngoi RB0 
      Bit 2: Cê ng¾t cho bé TIMER0  
                   TMR0IF =1: x¶y ra trn trong thanh ghi TMR0 
                   TMR0IF =0: ch−a x¶y ra trn trong thanh ghi TMR0 
        
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

      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 thnh 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 no ®ã m th«i  
.ViÖc 
chän BANK no 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 bn ®Õ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   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                             
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
                                   Ch−¬ng 4 
                  C¸c øng dông c¬ b¶n cña pic 16F877a 
 
!ö Þug ¹i Þù®r trÝÖ; 
  
              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 trn th× thanh ghi sÏ chë vÒ 0 
            +ho¹t ®éng cña bé ®Þnh thêi timer0:  
                        
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
   
Nh×n s¬ ®å khèi cña TIMER0 ta cã thÓ thÊy nã ho¹t ®éng ë 2 chÕ ®é 
- ChÕ ®é ®Þnh thêi: ë chÕ ®é ny chóng ta cÇn chän xung t¸c ®éng l xung néi(TOCS 
=0) lóc ny 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 trn th× cê TMR0IF sÏ ®−îc set lªn 1. 
- ChÕ ®é ®Õm: ë chÕ ®é ny chóng ta cÇn chän xung t¸c ®éng l xung ngoi(TOCS =1) 
Timer0 sÏ lÊy xung tõ bªn ngoi 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 ®Ò ny…. 
 
 
 
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 ngoi 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 ngoi l xung ®ång bé 
                  t1sync=0: cho phÐp sö dông xung ngoi l xung ®ång bé 
                   khi Tmr1cs =0: 
                      Bit ny kh«ng ®−îc sö dông 
          
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
          
        
        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 thnh tõ 2 
thanh ghi 8 bit tmr1l – tmr1h 
            Thanh ghi  pir1: L thanh ghi chøa cê trn 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 vo 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 trn v cê trn TMR1IF=1.  
- ChÕ ®é ®Õm: khi sö dông chÕ ®é ny chung ta cÇn ph¶i set bit TMR1CS =1, nguån   
xung tõ bªn ngoi 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 ngoi 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 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

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ê trn 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 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

               
 
 
-   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 vo thanh ghi TMR2 , khi x¶y ra trn 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… 
k1×lm tÖ î? ng k26 n7l fNl ng l8u ñ 61äl îÖÕ¸ 
         
     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Ó lm 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 lm c«ng viÖc ny l¹i tù ®éng chuyÓn sang lm c«ng viÑc kh¸c ,vËy lm 
thÕ no ®Ó vi ®iÒu khiÓn lm ®−î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 trn Timer0 
    +Ng¾t do cã thay ®æi tr¹ng th¸i trªn c¸c ch©n tõ RB4- RB7 
    +Ng¾t ngoi trªn ch©n RB0 
    +Ng¾t chuyÓn ®æi ADC ®$ hon tÊt 
    +Ng¾t bé chuyÓn ®Öm RS 232 chèng 
    +Ng¾t do d÷ liÖu nhËn tõ RS232 ®$ s½n sng 
    +Ng¾t trn Timer1 
    +Ng¾t trn 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 vo cæng parallel slave 
    +Ng¾t do ghi vo EPROM hon tÊt 
    +Ng¾t do xung ®ét BUS 
    +Ng¾t do kiÓm tra b»ng nhau comparator 
     
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 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: 
 
         +ÊÒFt ¶m ã.ã tÖgÆè rmEã ®ÒFt ®ÒmiÖ ; 
VÒ c¬ b¶n ho¹t ®éng cña c¸c ng¾t Timer hoÆc ng¾t ngoi ho¹t ®éng nh− sau: 
- Xung t¹o ra do bé t¹o dao ®éng hoÆcnguån xung bªn ngoi 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 trn cê 
ng¾t t−ong øng ®−îc bËt v mét yªu cÇu ng¾t ®−îc phôc vô lóc ny vi ®iÒu khiÓn sÏ 
t¹m ngõng c«ng viÖc hiÖn t¹i, hon thnh lÖnh hiÖn thêi ngay tøc kh¾c ®Ó nh¶y vo 
ch−¬ng tr×nh phôc vô ng¾t ISR. Khi ®ã bé ®Õm ch−¬ng tr×nh PC sÏ ®−îc ®Èy vo 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 ngoi: 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 ton 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: 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
Bit 3- 0: chän chÕ ®é lm 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 ny 
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: 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                                  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

                                                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 hm 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 ®é di 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> 
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 no 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) 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

          Speed: tèc ®é dao ®éng cña th¹ch anh 
           Cã chØ thÞ ny chóng ta míi dïng ®−îc hm delay_ms hoÆc delay_us 
           VD: #use delay(clock = 4000000); 
6) #use fast_io : 
- Có ph¸p: #use fast_io(port) 
      _aht 4 k¶k k¢lm f8a hÖ kAÖ _Bq5 tï ãE*O 
      Dïng c¸i ny chóng ta cã thÓ ®iÒu chØnh c¸c port víi chØ 1 lÖnh 
      VD: # use fast_io(a); 
 
 
III) ,.ã rig ¶Ænoä ; 
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 
Hm delay ny kh«ng sö dông bÊt cø Timer no 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 hm ny cÇn ph¶I khai b¸o tiÒn ®Þnh #use_delay(….) 
 
IV) ã.ã rig ¹im èo tèm®Ò ,,L ã 
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 
 Hm ny 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 vo 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) rig í4  ¶…®Ò tèm®Ò ã.ã tÖgÆè; 
       1)timer0: 
         - SETUP_TIMER_0(mode); 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

          Mode4 G8 obt thalm Ý kalîtÖlt 5l7Õ -ålm Ý t1Ê k1•l -NÕ • | ” ë gi÷a) ®−îc ®Þnh nghÜa 
t
rong file <16F877A.h> 
          +RTCC_INTERNAL: chän xung dao ®éng néi 
          +RTCC_EXT_H_TO_L: chän kiÓu t¸c ®éng l c¹ch xuèng cña xung 
   +RTCC_EXT_L_TO_H: chän kiÓu t¸c ®éng l c¹ch lªn cña xung 
             +RTCC_DIV_2 : Sö dông bé chia tÇn víi tØ lÖ 1:2 
   +RTCC_DIV_4 : Sö dông bé chia tÇn víi tØ lÖ 1:4 
   +RTCC_DIV_8 : Sö dông bé chia tÇn víi tØ lÖ 1:8 
   +RTCC_DIV_16 : Sö dông bé chia tÇn víi tØ lÖ 1:16 
   +RTCC_DIV_32 : Sö dông bé chia tÇn víi tØ lÖ 1:32 
   +RTCC_DIV_64 : Sö dông bé chia tÇn víi tØ lÖ 1:64 
   +RTCC_DIV_128 : Sö dông bé chia tÇn víi tØ lÖ 1:128 
   +RTCC_DIV_256 : Sö dông bé chia tÇn víi tØ lÖ 1:256 
    
              - setup_COUNTER_0( rtcc_state , ps_state) 
  Rtcc_state: 
          +RTCC_INTERNAL: chän xung dao ®éng néi 
          +RTCC_EXT_H_TO_L: chän kiÓu t¸c ®éng l c¹ch xuèng cña xung 
   +RTCC_EXT_L_TO_H: chän kiÓu t¸c ®éng l c¹ch lªn cña xung 
      
 
     Ps_state: 
   +RTCC_DIV_2 : Sö dông bé chia tÇn víi tØ lÖ 1:2 
   +RTCC_DIV_4 : Sö dông bé chia tÇn víi tØ lÖ 1:4 
   +RTCC_DIV_8 : Sö dông bé chia tÇn víi tØ lÖ 1:8 
   +RTCC_DIV_16 : Sö dông bé chia tÇn víi tØ lÖ 1:16 
   +RTCC_DIV_32 : Sö dông bé chia tÇn víi tØ lÖ 1:32 
   +RTCC_DIV_64 : Sö dông bé chia tÇn víi tØ lÖ 1:64 
   +RTCC_DIV_128 : Sö dông bé chia tÇn víi tØ lÖ 1:128 
   +RTCC_DIV_256 : Sö dông bé chia tÇn víi tØ lÖ 1:256 
    
        - set_timer0(value) : x¸c ®Þnh gi¸ trÞ 8 bit ban ®Çu cña Timer0(value=TMR0) 
        - GET_TIMER0( ) : tr¶ l¹i gi¸ trÞ 8 bit cho Timer0 
        
 
       2)timer1: 
         - SETUP_TIMER_1(mode); 
           Mode: cã thÓ kÕt hîp víi nhau b»ng ®Êu “ | ” 
 
 
            +T1_DISABLED : t¾t ho¹t ®éng cña Timer1 
            +T1_INTERNAL : sö dông giao ®éng néi 
            +T1_EXTERNAL : chän xung clock trªn ch©n RC0 
  +T1_EXTERNAL_SYNC : chän xung lock ngoi ®ång bé 
  +T1_DIV_BY_1 : Sö dông bé chia tÇn víi tØ lÖ 1:1  
          +T1_DIV_BY_2 : Sö dông bé chia tÇn víi tØ lÖ 1:2 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

          +T1_DIV_BY_4 : Sö dông bé chia tÇn víi tØ lÖ 1:4 
          +T1_DIV_BY_8 : Sö dông bé chia tÇn víi tØ lÖ 1:8 
              
        - set_timer0(value) : x¸c ®Þnh gi¸ trÞ 8 bit ban ®Çu cña Timer1(value=TMR1) 
        - GET_TIMER0( ) : tr¶ l¹i gi¸ trÞ 8 bit cho Timer1 
  
        3) TIMER2:  
          - SETUP_TIMER_1(mode , period , postcale); 
           Mode: cã thÓ kÕt hîp víi nhau b»ng ®Êu “ | ” 
          +T2_DISABLED : t¾t ho¹t ®éng cña Timer2    
  +T2_DIV_BY_1 : Sö dông bé chia tÇn víi tØ lÖ 1:1  
          +T2_DIV_BY_4 : Sö dông bé chia tÇn víi tØ lÖ 1:4 
          +T2_DIV_BY_16 : Sö dông bé chia tÇn víi tØ lÖ 1:16 
            
           Period : sè nguyªn tõ 0 255 x¸c ®Þnh gi¸ trÞ xung reset 
           Postcale : x¸c ®Þnh sè reset tr−íc khi ng¾t 
             
          - set_timer2(value) : x¸c ®Þnh gi¸ trÞ 8 bit ban ®Çu cña Timer2(value=TMR2) 
          - GET_TIMER2( ) : tr¶ l¹i gi¸ trÞ 8 bit cho Timer2 
 
 
VI) ã.ã rig «r…ã ¹… ®ÒFt 
               - enable_interrupts( level)  
             Level: 
            Y*SýøãS 4 k1a 61]6 lm0t ta8l k−k 
            +INT_TIMER0 : ng¾t do trn Timer0 
            +INT_TIMER1 : ng¾t do trn Timer1 
            +INT_TIMER2 : ng¾t do trn Timer2     
       +INT_RB : cã thay ®æi 1 trong c¸c ch©n RB4   RB7 
       +INT_EXT : ng¾t ngoi trªn ch©n RB0 
        
        Chó ý : sau khi khai b¸o trªn th× ®Ó vo ch−¬ng tr×nh ng¾t cÇn khai b¸o 
           #INT_..... 
         VD: 
           #INT_TIMER1 
           Void ng¾t_Timer1( ) 
               { 
                   //ch−¬ng tr×nh ng¾t viÕt ë ®©y 
                } 
 
 
 
 
 
VII)  ã.ã rig ÞÖky ãru ÞV èV®Ò My®Ò 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

- SETUP_CCPx(mode): 
Dïng tr−íc hÕt ®Ó thiÕt lËp chÕ ®é ho¹t ®éng hay v« hiÖu ho¸ tÝnh n¨ng CCP 
X: tªn ch©n CCP trªn chip (víi PIC 16F877A ®ã l c¸c ch©n RC1-CCP2 ; RC2-CCP1) 
Mode: CCP_PWM   (bËt chÕ ®é PWM) 
 
- SET_CCPx_DUTY(value) 
X: tªn ch©n CCP trªn chip 
Value: gi¸ trÞ 8 hay 16 bit 
Nã ghi 10 bit gi¸ trÞ vo thanh ghi CCPx , nÕu value chØ cã 8 bit th× nã sÏ dÞch thªm 2 
bit n÷a ®Ó ®ñ 10 bit n¹p vo CCPx 
Tuú ®é ph©n gi¶ m gi¸ trÞ cña value kh«ng ph¶I lóc no còng ®¹t tíi gi¸ trÞ 1023 
 
       
 
 
 
 
 
 
 
 
                                                         
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

                                                        Ch−¬ng6 
                        C¸c vÝ dô c¬ b¶n dïng pic 16f877a 
 
1) xuÊt 0-1 ra c¸c ch©n: 
                                  
 
#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); 
      } 

 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

2)GIAO TIÕP VíI PHÝM BÊM 
 
                     
 
 
#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 
           } 
      } 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

3)delay dïng vßng lÆp  
     #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 
 
 
 
 
 
                                                                     
 
 
 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

4)delay dïng timer kh«ng dïng ng¾t 
                  
                  #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; 
                 } 
    } 
 
 

    
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

5)delay dïng timer cã dïng ng¾t 
   
 #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 
   } 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 6) dïng 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); 
        } 
 
     } 

CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
7) dïng 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); 
                              } 
 
             } 
 
 
      } 
 
  } 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

8) 3õÊl ÊlFH Êl)i! 
 
        
 
#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); 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

         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); 
       } 
  }       
                  
 
 
 
   
 
 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

                                                                             Ch−¬ng 7 
                                              C¸ch sö dông ch−¬ng tr×nh m« pháng proteus 
 
Giao diÖn cña ch−¬ng tr×nh Proteus nh− sau: 
                    
 
                  §Ó t×m c¸c linh kiÖn cÇn dïng b¹n Ên phÝm P hay click chuét vo nót P ë bªn tr¸i mn  
                   h×nh 
                   Mét cöa sæ sÏ hiÖn ra: 
                   -Trong ®ã cã c¸c th− môc gióp b¹n dÔ dng trong viÖc t×m c¸c linh kiÖn cÇn dïng 
                   -Vi dô nh−  diodes (c¸c lo¹i diot),microcontrollers(c¸c lo¹i vi ®iÒu khiÓn)  
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

                     
 
 
                  Sau khi s¾p xÕp c¸c linh kiÖn ta cã s¬ ®å  hon chØnh nh− sau: 
 
 
                    
 
 
 
 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
                  §Ó ch¹y m« pháng m¹ch ®iÖn ta lm nh− sau: 
                  - Nh¸y chuét ph¶i vo con vi ®iÒu khiÓn ta cÇn khi thÊy nã ®æi mÇu ®á th× ta nh¸y 
                     chuét tr¸i v mét cöa sæ sÏ hiÖn ra nh− sau: 
 
                    
 
                      
                    T¹i « program file chóng ta chØ ®−êng dÉn ®Õn file HEX cÇn ph¶i n¹p cho chip 
                    T¹i « processor clock frequency chóng ta chän tÇn sè giao ®éng cña th¹ch anh 
                    Sau ®ã Ên ok ®Ó hon tÊt 
                    - ®Ó ch¹y m« pháng chóng ta sö dông c¸c nót:     
                     Qu¸ tr×nh ch¹y m« pháng ®−îc minh ho¹ ë h×nh d−íi:                         
                      
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
 
                                                                      CH¦¥NG 8 
                                         H¦íng dÉn sö dông tr×nh biªn dÞch ccs c 
 
Sau khi ci ®Æt phÇn mÒm ch−¬ng tr×nh sÏ cã giao diÖn nh− sau: 
 
                                       
§Ó t¹o mét project míi b¹n h$y chän Project/ New /Pic Winzard . Sau khi ®¸nh 
 tªn file muèn ®Æt  mét cöa sæ sÏ hiÖn ra nh− sau: 
 
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com

 
T¹i môc Device b¹n chän tªn Pic ®ang dïng 
T¹i môc oscilator Frequency b¹n chän tÇn sè giao ®éng cña th¹ch anh 
Sau ®ã Ên ok ®Ó hon tÊt 
Sau khi hon tÊt viÖc lËp tr×nh b¹n Ên F9 ®Ó ch−¬ng tr×nh dÞch sang file HEX 
Víi file Hex ®−îc t¹o ra b¹n cã thÓ n¹p ®−îc cho vi ®iÒu khiÓn 
  
     
CuuDuongThanCong.com https://fb.com/tailieudientucntt
cuu duong than cong . com