Professional Documents
Culture Documents
Giao Trinh Pic16f877a Hay Ngan Gon PDF
Giao Trinh Pic16f877a Hay Ngan Gon PDF
Chng1
Hin nay trong cc my mc cng nghip v cc thit b phc v sinh hot cho cuc
Sng hu ht u ng dng rng r$i cc thit b in t ,m b x l trung tm l cc con
Chip vi iu khin ht sc thng minh c bit cc Chip ny c th lp trnh c
Bi con ngi! V vy chng ta cn phi nghin cu v pht trin n.
Trn th trng hin nay ph bin rt nhiu loi vi iu khin phong ph v chng loi v
gi c th tng i r ph hp vi iu khin Vit Nam trong ph bin c cc loi nh :
MCS51 ; AVR ca ATMEL , PIC ca MICROCHIP , PSOC ca CYPRESS MICRO
SYSTEM
Hin nay vi s a dng v nhiu chng loi khc nhau ca PIC c bit l tnh n nh ca
chng $ lm cho nhiu ngi thch th v a chung v vy chng $ c ng dng rng
r$i trn ton th gii.
Cm t PIC c vit tt t cm t : peripheral interface controller
(B iu Khin giao tip cc thit b ngoi vi).Khc vi cc b vi x ,b vi iu khin c
tch hp ton b nh RAM , ROM , cc PORTS truy xut ,giao tip ngoi vi trc tip trn
mt con chp ht sc nh gn.
PIC16F877A l mt vi iu khin c kin trc HARVARD (b nh chng trnh v b nh
d liu c truy xut c lp vi nhau) s dng 14 bit cho cc lnh , v tp lnh ca n ch
hu ht ch c mt WORD.
Chng2
Chn RESET ca PIC tch cc mc thp u ny tri ngc hon ton vi h 8051
3)mch dao ng
Trn hnh v ta thy 2 chn 13(OSC1) v chn 14(OSC2) l 2 chn dao ng. Tc dao
ng c xc nh thng qua tn s dao ng ca b to dao ng
S mch dao ng nh hnh v sau:
Chng 3
Cc thanh ghi ny c chc nng iu khin cc hot ng v cc khi giao tip ngoi vi ca
vi iu khin
i) thanh ghi Status
Bit 0-1-2 : dng chn gi tr cho b chia tn cho TIMER0 hoc WDT
Bit 3 :
PSA =1: b chia tn dng cho WDT
PSA =0: b chia tn dng cho TIMER0
Bit 4 :
TOSE =1: chn sng xung l sng tc ng ln chn RA4
TOSE =0: chn sng ln l sng tc ng ln chn RA4
Bit 5 :
TOCS =1: chn xung m trong TIMER0 l xung trn chn RA4
TOCS =0: chn xung m trong TIMER0 l xung ni
Bit 6 :
INTEDG =1: xy ra ngt khi chn RB0 c sn ln
INTEDG =0: xy ra ngt khi chn RB0 c sn xung
Bit 7 :
RBPU =1: cm cho php in tr ko dng PORTB
RBPU =0: cho php in tr ko dng PORTB
III) thanh ghi intcon:
Bit 3:
RBIE =1: cho php ngt trn cc chn RB4-RB7
RBIE =0: cm ngt trn cc chn RB4-RB7
Bit 4:
INTE =1: cho php ngt trn chn RB0
INTE =0: cm ngt trn chn RB0
Bit 5:
TMR0IE =1: cho php ngt bng b TIMER0
TMR0IE =0: cm ngt bng b TIMER0
Bit 6:
PEIE =1: cho php ngt phc v cho thit b ngoi vi
PEIE =0: cm cc ngt phc v cho thit b ngoi vi
Bit 7:
GIE =1: cho php tt c cc ngt c thc hin
GIE =0: cm tt c cc ngt khng c thc hin
Ch :
V tr ca b nh d liu c chia thnh 4 BANK thanh ghi(cc khi , cc vng)
mi thi im , chng ta ch c th truy xut trn 1 BANK thanh ghi no m thi
.Vic
chn BANK no thng qua vic iu khin cc bit 5-6-7 ca thanh ghi STATUS
Chng ta thy rng trong PIC cn rt nhiu cc thanh ghi chc nng khc nhng
chng ta s khng bn n n y.Nu cc bn cn m rng kin thc th c th tham
kho thm trong DATASHEET ca 16F877A
Chng 4
Thanh ghi option: L thanh ghi cho php c ghi dng iu khin thit lp
Thanh ghi t1con: L thanh ghi thit lp cu hnh hot ng cho Timer1
Bit 0:
Bit 1:
dng)
Bit 2:
Bit 3:
Bit 5 -4 :
Thit lp gi tr cho b chia tn
Ta thy rng Pic c rt nhiu ngt ng dng trong nhiu chc nng khc nhau nhng
y chng ta ch cp n mt s ngt c bn sau:
+Ngt do cc timer hoc ngt ngoi :
V c bn hot ng ca cc ngt Timer hoc ngt ngoi hot ng nh sau:
- Xung to ra do b to dao ng hocngun xung bn ngoi s c cung cp cho cc
thanh ghi nh thi tng ng ca cc b nh thi , khi cc b nh thi xy ra trn c
ngt tong ng c bt v mt yu cu ngt c phc v lc ny vi iu khin s
tm ngng cng vic hin ti, hon thnh lnh hin thi ngay tc khc nhy vo
chng trnh phc v ngt ISR. Khi b m chng trnh PC s c y vo ngn
xp STACK v ng thi bit GIE =0 chng trnh r nhnh n a ch vect ngt
0x04 ,ti y vi iu khin s thc hin cc yu cu m ngt i hi .
- Vic thit lp cu hnh cho cc ngt s thng qua cc bit ca cc thanh ghi chc nng
nh sau:
+i vi Timer0 : Bt iu khin l bit TMR0IE(INTCON.5)
+i vi Timer1 : Bt iu khin l bit TMR1IE(PIE.0)
+i vi Timer2 : Bt iu khin l bit TMR2IE(PIE.1)
+i vi ngt ngoi: Bt iu khin l bit INTE(INTCON.4)
+i vi ngt do cc chn RB4 RB7: Bt iu khin l bit RBIE(INTCON.3)
Ch : Trc khi thit lp cc ngt chng ta cn phi cho php ngt ton cc thng
qua vit cho bit GIE =1(INTCON.7)
III) iu ch rng xung( PWM)
Mt trong nhng tnh nng quan trng ca PIC c ng dng rt nhiu l iu ch
rng xung PWM(Pulse Width Modulation)
Bit 5 - 4:????
Chng 5:
- SETUP_CCPx(mode):
Dng trc ht thit lp ch hot ng hay v hiu ho tnh nng CCP
X: tn chn CCP trn chip (vi PIC 16F877A l cc chn RC1-CCP2 ; RC2-CCP1)
Mode: CCP_PWM (bt ch PWM)
- SET_CCPx_DUTY(value)
X: tn chn CCP trn chip
Value: gi tr 8 hay 16 bit
N ghi 10 bit gi tr vo thanh ghi CCPx , nu value ch c 8 bit th n s dch thm 2
bit na 10 bit np vo CCPx
Tu phn gi m gi tr ca value khng phI lc no cng t ti gi tr 1023
Chng6
#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
}
}
}
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
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;
}
}
#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
}
6) dng 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);
}
}
}
7) dng 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);
}
}
}
}
#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);
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);
}
}
Chng 7
CHNG 8