TÀI LIỆU THAM KHẢO CHO PIC 16F877A 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 ri 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 ri 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. CuuDuongThanCong.com https:fb.comtailieudientucntt 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 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. CuuDuongThanCong.com https:fb.comtailieudientucntt cuu duong than cong . com 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 RA4TOCKI 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. CuuDuongThanCong.com https:
Tài liệu tham khảo cho pic16f877a (đợc viết đào trọng nghĩa- đtvt 3a) c om Chơng1 Giới thiệu tổng quan vỊ hä vi ®iỊu khiĨn pic an co ng Hiện máy móc công nghiệp thiết bị phục vụ sinh hoạt cho Sống hầu hết ứng dụng rộng r i thiết bị điện tử ,mà xử lý trung tâm Chip vi điều khiển thông minh đặc biệt Chip lập trình đợc Bởi ngời! Vì cần phải nghiên cứu phát triển du o ng th Trên thị trờng phổ biến nhiều loại vi điều khiển phong phú chủng loại giá tơng đối rẻ phù hợp với điều khiện Việt Nam phổ biến có loại nh : MCS51 ; AVR cña ATMEL , PIC cña MICROCHIP , PSOC cđa CYPRESS MICRO SYSTEM… cu u HiƯn víi đa dạng nhiều chủng loại khác PIC đặc biệt tính ổn định chúng đ làm cho nhiều ngời thích thú a chuộng chúng đ đợc ứng dụng rộng r i toàn 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 thiết bị ngoại vi).Khác với vi xử ,bộ vi điều khiển đợc tích hợp toàn nh− RAM , ROM , c¸c PORTS truy xuÊt ,giao tiếp ngoại vi trực tiếp chíp nhỏ gọn PIC16F877A vi điều khiển có kiến trúc HARVARD (bộ nhớ chơng trình nhớ liệu đợc truy xuất độc lập với nhau) sử dụng 14 bit cho lệnh , tập lệnh cđa nã chØ hÇu hÕt chØ cã mét WORD CuuDuongThanCong.com https://fb.com/tailieudientucntt Chơng2 Cấu trúc phần cứng PIC16f877a i)bộ nhớ chơng trình pic Không gian nhớ chơng trình PIC khác tuỳ thuộc vào loại Sau số ví dụ: -16C711,16F84 có 1024(1K) -16F877A cã 8192(8K) -17C766 cã 16384(16K) co ng c om II)bé nhớ liệu pic Các ghi đa mục đích cho ngời dùng PIC ô nhớ RAM Mỗi ghi có độ rộng bít cho tất PIC Sau lả vµi vÝ dơ: -12C508 cã 25 Bytes RAM -16C71C cã 36 Bytes RAM -16F877A cã 368 Bytes(plus 256 Bytes of nonvolatile EEPROM) cu u du o ng th an III)C¸C CHÂN CủA PIC 16F877A 1)các chân nguồn Trong sơ đồ mạch 8051 thờng kí hiệu chân cấp nguồn VCC , chân nối mass GND Còn PIC ngợc lại thay VCC = VDD chân GND = VSS Trong PIC 16F877A hình vẽ ta thấy có tất ch©n cÊp nguån nh− sau: - Ch©n 11 , 32 chân VDD (+5v) - Chân 12 , 31 chân VSS (0v) 2)chân reset Trên hình ta thấy chân số 1(MCLR) chân RESET PIC , chân có nhiệm vụ khởi động lại chip chân đợc tích cực CuuDuongThanCong.com https://fb.com/tailieudientucntt Chân RESET PIC tích cực mức thấp trái ngợc hoàn toàn với họ 8051 3)mạch dao động an co ng c om Trên hình vẽ ta thấy chân 13(OSC1) chân 14(OSC2) chân dao động Tốc độ dao động đợc xác định thông qua tần số dao động tạo dao động Sơ đồ mạch dao động nh hình vẽ sau: ng th 4)cổng xuÊt nhËp cu u du o +PORT A vµ ghi TRIS A: Cỉng A cã bit thùc hiƯn chức vào theo chiều việc xác định hớng xuất nhập dợc thực thông qua ghi TRIS A ViƯc ®−a bit ghi TRIS A lên đồng nghĩa với việc đặt chân tơng ứng cổng A chân nhập liệu ViƯc xo¸ bit ghi TRIS A xng đồng nghĩa với việc đặt chân tơng ứng cổng A chân xuất liệu Chân RA4/TOCKI chân đa mục đích với việc vừa chân xuất nhập vừa đầu vào đếm TIMER0 Đầu vào chân RA4 trigger schmitt nên có cực máng hở chế độ nhập cần gắn thêm điện trở kéo dơng cho Các chân khác PORT A đầu vào tín hiệu tơng tự chuyển đổi ADC Sự hoạt động chân chế độ việc điều kiển thích hợp bít ghi ADCON1 vµ CMCON CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om ng co an th +port b vµ ghi tris b: cu u du o ng Cæng B cã bÝt xuÊt nhập theo chiều ,việc chọn chức xuất nhập đợc điều khiển thông qua ghi TRIS B tơng tự nh với PORTS A Ba chân PORT B chân đa chức năng(RB3/PGM,RB6/PGC/RB7/PGD) với ứng dụng nh mạch gỡ rối chơng trình điện áp thấp Mỗi chân PORT B có điện trở kéo dơng bên có giá trị khoảng 47K cho phép hoạt động chế độ thông qua việc set bit RBPU ghi OPTION Việc điện trở kéo bị khoá PORT B chuyển sang chế độ xuất liệu VĐK khởi động Bốn chân PORT B chân từ RB4 đến RB7 chân phục vụ ngắt, chân đợc định hình đầu vào nguyên nhân cho ngắt phát sinh Khi ngắt đợc tạo đồng thời cờ RBIF(INTCON.0) đợc set lên 1, đánh thức VĐK chế độ ngủ(SLEEP) CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om ng co an th + PORT C vµ ghi TRIS C: cu u du o ng PORTC cã tất chân đa mục đích với chức nh : xuất nhập liệu, đặc biệt chân 18(SCL) 23(SDA) chân thực chức giao tiếp với ngoại vi thông qua chuẩn I2C Thanh ghi TRISC tơng tự nh làm nhiệm vụ định nghĩa chân tơng ứng cổng vào hay cỉng CuuDuongThanCong.com https://fb.com/tailieudientucntt +PORT D vµ ghi TRIS D - PORT E vµ ghi TRIS E: cu u du o ng th an co ng c om Hai PORT có chân đa mục đích nhng chủ yếu để xuất nhập đữ liệu ứng dụng khác chung ta không xét Các bạn tham khảo thêm hình dới đây: CuuDuongThanCong.com https://fb.com/tailieudientucntt Chơng cu u du o ng th an co ng c om Các ghi có chức đặc biệt CuuDuongThanCong.com https://fb.com/tailieudientucntt Các ghi có chức điều khiển hoạt động khối giao tiếp ngoại vi vi ®iỊu khiĨn i) ghi Status cu u du o ng th an co ng c om Bit : cờ báo tràn có nhớ từ bit phép cộng có mợn phép trừ Bit : cờ nhớ phụ bị tác động thực phép toán vợt bÝt thÊp Bit : Z=1 nÕu kÕt qu¶ phÐp toán Z=0 kết phép toán khác Bit : PD=1 sau bËt ngn hc lệnh CLRWDT PD=0 lệnh SLEEP đợc thực thi Bit : TO=1 nÕu cã lÖnh SLEEP thùc thi hc lƯnh CLRWDT hc sau bËt ngn T0=0 nÕu WDT bị chàn Bit 6-5: 00: chọn bank 01: chän bank 10: chän bank 11: chän bank Bit 7: 1: chän bank 2,3 0: chän bank 0,1 ii) ghi option_reg: Bit 0-1-2 : dïng để chọn giá trị cho chia tần cho TIMER0 hc WDT CuuDuongThanCong.com https://fb.com/tailieudientucntt Bit : ng th an co ng c om PSA =1: bé chia tÇn dïng cho WDT PSA =0: bé chia tÇn dïng cho TIMER0 Bit : 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 sờng tác động lên chân RA4 Bit : TOCS =1: chọn xung đếm TIMER0 xung chân RA4 TOCS =0: chọn xung đếm TIMER0 xung nội Bit : INTEDG =1: xảy ngắt chân RB0 có sờn lên INTEDG =0: xảy ngắt chân RB0 có sờn xuống Bit : 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 cu u du o III) ghi intcon: Bit 0: Cê báo ngắt cho chân RB4-RB7 RBIF =1: xuất ngắt chân RB4-RB7 RBIF =0: không xuất ngắt chân RB4-RB7 Bit 1: Cờ ngắt cho chân RB0 INTF =1: xuất ngắt chân ngắt RB0 INTF =0: không xuất ngắt chân ngắt RB0 Bit 2: Cờ ngắt cho TIMER0 TMR0IF =1: xảy tràn ghi TMR0 TMR0IF =0: cha xảy tràn ghi TMR0 CuuDuongThanCong.com https://fb.com/tailieudientucntt Bit 3: RBIE =1: cho phép ngắt chân RB4-RB7 RBIE =0: cấm ngắt chân RB4-RB7 Bit 4: INTE =1: cho phép ngắt chân RB0 INTE =0: cấm ngắt chân RB0 Bit 5: TMR0IE =1: cho phép ngắt 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 ngắt phục vụ cho thiết bị ngoại vi c om Bit 7: ng GIE =1: cho phép tất ngắt đợc thực GIE =0: cấm tất ngắt không đợc thùc hiÖn cu u du o ng th an co Chú ý: Vị trí nhớ liệu đợc chia thành BANK ghi(các khối , vùng) thời điểm , truy xuất BANK ghi mà Việc chọn BANK thông qua việc điều khiển c¸c bit 5-6-7 cđa ghi STATUS Chóng ta thÊy PIC nhiều ghi chức khác nhng không bàn đến đây.Nếu bạn cần mở rộng kiến thức tham khảo thêm DATASHEET 16F877A CuuDuongThanCong.com https://fb.com/tailieudientucntt - SETUP_CCPx(mode): Dïng tr−íc hÕt ®Ĩ thiÕt lËp chÕ độ hoạt động hay vô hiệu hoá tính CCP X: tên chân CCP chip (với PIC 16F877A chân RC1-CCP2 ; RC2-CCP1) Mode: CCP_PWM (bật chế ®é PWM) cu u du o ng th an co ng c om - SET_CCPx_DUTY(value) X: tên chân CCP chip Value: giá trị hay 16 bit Nó ghi 10 bit giá trị vào ghi CCPx , value có bit dịch thêm bit để đủ 10 bit nạp vào CCPx Tuỳ độ phân giả mà giá trị value không phảI lúc đạt tới giá trị 1023 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chơng6 Các ví dụ dùng pic 16f877a an co ng c om 1) xuÊt 0-1 c¸c ch©n: cu u du o ng th #INCLUDE //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 RA CHAN RB0 DELAY_MS(500); //TAO TRE 0,5s OUTPUT_LOW(PIN_B0); //XUAT GIA TRI RA CHAN RB0 DELAY_MS(500); OUTPUT_B(255); //DUA GIA TRI RA CAC CHAN CUA PORTB DELAY_MS(500); OUTPUT_B(0); //DUA GIA TRI RA CAC CHAN CUA PORTB DELAY_MS(500); } } CuuDuongThanCong.com https://fb.com/tailieudientucntt co ng c om 2)GIAO TIÕP VíI PHÝM BÊM ng th an #INCLUDE #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 cu u du o 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 3)delay dùng vòng lặp #INCLUDE #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 th ng VOID MAIN() { WHILE(TRUE) { an co ng c om VOID DELAY(INT8 TIMER) { WHILE(TIMER ) { TMR1ON=1; WHILE(TMR1IF==0); TMR1ON=0; TMR1IF=0; } } u cu } } du o 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 4)delay dïng timer kh«ng dïng ng¾t c om #INCLUDE #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 cu u du o ng th an co ng 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 5)delay dïng timer cã dïng ng¾t #INT_TIMER0 //CHUONG TRINH NGAT TIMER0 VOID NGAT_TIMER0() { PORTB=0b10101010; DELAY_MS(200); PORTB=0b01010101; } an co ng #INT_TIMER1 //CHUONG TRINH NGAT TIMER1 VOID NGAT_TIMER1() { PORTC=0b11110000; DELAY_MS(200); PORTC=0b00001111; } c om #INCLUDE #FUSES XT,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #USE DELAY(CLOCK=4000000) #BYTE PORTB=0x06 #BYTE PORTC=0x07 #BYTE PORTD=0x08 u du o ng th #INT_TIMER2 //CHUONG TRINH NGAT TIMER2 VOID NGAT_TIMER2() { PORTD=0b11001100; DELAY_MS(200); PORTD=0b00001111; } cu 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 .c om 6) dïng chÕ ®é counter ng th an co ng #INCLUDE #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; cu u du o 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(I255) { 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 an co ng c om 8) DùNG NGắT NGOàI cu u du o ng th #INCLUDE #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 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); ng 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); } c om } co } u du o ng th an 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) { cu OUTPUT_HIGH(PIN_D7); DELAY_MS(1000); OUTPUT_LOW(PIN_D7); DELAY_MS(1000); } } CuuDuongThanCong.com https://fb.com/tailieudientucntt Chơng Cách sử dụng chơng trình mô proteus ng th an co ng c om Giao diện chơng trình Proteus nh sau: cu u du o Để tìm linh kiện cần dùng bạn ấn phím P hay click chuột vào nút P bên trái hình Một cửa sổ ra: -Trong có th mục giúp bạn dễ dàng việc tìm 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 .c om ng co an cu u du o ng th Sau xếp linh kiện ta có sơ đồ hoàn chỉnh nh sau: CuuDuongThanCong.com https://fb.com/tailieudientucntt an co ng c om Để chạy mô mạch điện ta làm nh sau: - Nháy chuột phải vào vi điều khiển ta cần thấy đổi mầu đỏ ta nháy chuột trái mét cưa sỉ sÏ hiƯn nh− sau: ng th Tại ô program file đờng dẫn đến file HEX cần phải nạp cho chip Tại ô processor clock frequency chọn tần số giao động thạch anh Sau ấn ok để hoàn tất cu u du o - để chạy mô sử dụng nút: Quá trình chạy mô đợc minh hoạ hình dới: CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG HƯớng dẫn sử dụng trình biên dịch ccs c ng th an co ng c om Sau cài đặt phần mềm chơng trình có giao diện nh sau: cu u du o Để tạo project bạn h y chọn Project/ New /Pic Winzard Sau đánh tên file muốn đặt cửa sổ nh− sau: CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du o ng th an co ng c om T¹i mơc Device b¹n chän tên Pic dùng Tại mục oscilator Frequency bạn chọn tần số giao động thạch anh Sau ấn ok để hoàn tất Sau hoàn 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 bạn nạp đợc cho vi điều khiển CuuDuongThanCong.com https://fb.com/tailieudientucntt ... c om II)bé nhí liệu pic Các ghi đa mục đích cho ngời dùng PIC ô nhớ RAM Mỗi ghi có độ rộng bít cho tất PIC Sau lả vài vÝ dô: -12C508 cã 25 Bytes RAM -16C71C cã 36 Bytes RAM -16F877A cã 368 Bytes(plus... thức tham khảo thêm DATASHEET 16F877A CuuDuongThanCong.com https://fb.com/tailieudientucntt Chơng Các ứng dụng pic 16F877a I) đếm định thời: co ng c om 1)Bộ định thời TIMER0 Timer0 định thời PIC1 6F877A... III)CáC CHÂN CủA PIC 16F877A 1)các chân nguồn Trong sơ đồ mạch 8051 thờng kí hiệu chân cấp nguồn VCC , chân nối mass GND Còn PIC ngợc lại thay VCC = VDD chân GND = VSS Trong PIC 16F877A hình vẽ