Professional Documents
Culture Documents
GII THIU
Trong mc include c file v cc loi pic s dng. ta tm ti file pic16f887.h trong file
ny, c nh ngha cc Thanh ghi lin quan cho pic. Cc bn tham kho nh.
Page 1
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
B th vin htc.h tch hp file Pic16f887.h Cho nn khi s dng ch cn khai bo file
htc.h ny. Hoc chng ta c th ly trc tip file pic16f877.h cng c.
THANH GHI:
TRISx : y l thanh ghi chn hng . tc l mun Portx l ng vo hoc ra:
Nu: 1 l ng vo
0 l ng ra
Vd: mun c PORTC l ng ra: th ta khai bo nh sau: TRISC=0X00, Nu l ng vo:
PORTC=0XFF;
Nu ch mun mt chn l ng vo th:
Vd: Chn th nht ca portc l ng vo: TRISC0=1.
ANSEL V ANSELH
- Pic16f887 c 14 knh ADC(AN0 AN13) dng chung vi cc chn I/0. 2 thanh ghi
ny, quy nh trng thi cc chn l tn hiu tng t,hay tn hiu s.
+ chn chn no l chn tng t th :
ANS2=1 // chn AN2 l chn tn hiu tng t
+ chn chn no l chn tn hiu s:
ANS1= 0 // Chn AN1 l chn tn hiu s.
Cn nu khai bo:
ANSEL = 0X00 // AN0 n AN7 l s.
ANSELH = 0XFF // AN8 n AN13 l tng t
IU KHIN LED N:
Phn cng:
Page 2
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
#include <htc.h>
#define _XTAL_FREQ 4000000 // khai bao dong nay ,de su dung lenh delay,ta khong phai
viet ham delay. htc da ho tro.
//dung thach anh 4 mhz
void main()
{ int i;
ANSEL=0;ANSELH=0; //khai bao cac chan AN l tn hieu so, neu co dieu khien o day.
TRISC=0X00; PORTC=0x00;
while(1)
{
for(i=0;i<3;i++)
{
PORTC=0X00;
__delay_ms(50);
PORTC=0XFF;
Page 3
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
__delay_ms(50);
}
while(1); //sau khi het 3 lan thi gap ham while(1) luon dung. nen thuc hien hoai. dung yen
}
}
#include <htc.h>
#define _XTAL_FREQ 4000000 // khai bao dong nay ,de su dung lenh delay,ta khong phai
viet lai. htc da ho tro.
//dung thach anh 4 mhz
void main()
{
unsigned char i;
unsigned int a;
ANSEL=0;ANSELH=0;//KHAI BAO CAC CHAN AN ,NEU CO TAC DONG O NGO
VAO HOAC RA THI SD
TRISD=0X00; //PORTD LA NGO RA
while(1)
{
PORTD=0X00;
__delay_ms(20);
a=0x01;
for(i=0;i<8;i++)
{
PORTD=a;
a=(a<<1)|0x01; //phep or,de giu lai bit
__delay_ms(20);
}
}
}
Page 4
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
#include <htc.h>
#define _XTAL_FREQ 4000000
void main()
{
unsigned char a,i;
TRISC=0X00;
PORTC=0X00;
while(1)
{
a=0x01;
PORTC=0X00;
__delay_ms(50);
for(i=0;i<8;i++)
{
PORTC=a;
a=(a<<1);
__delay_ms(50);
}
}
}
#include <htc.h>
#define _XTAL_FREQ 4000000
void main()
{ unsigned char i,a;
Page 5
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
TRISC=0X00;
PORTC=0XFF;
while(1)
{
a=0XFF;
PORTC=0XFF;
__delay_ms(50);
for(i=0;i<9;i++)
{
PORTC=a;
a=(a>>1)&0x7F;
__delay_ms(50);
}
}
}
Bi s 5: Vit chng trnh iu khin 8 led sng dn t led 1 n led 8 lin tc (ma ri)
void main()
{ unsigned char a,b,c,i,j,k,m;
while(1)
{
TRISC=0X00;//
PORTC=0x00;
k=9;
for(i=0;i<8;i++)
{
k--;
a=PORTC;
c=0x01;
for(j=0;j<k;j++)
{
b=a;
a|=c;
PORTC=a;
__delay_ms(20);
a=b;
c=c<<1;
}
}
}
Page 6
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
#include <htc.h>
#define _XTAL_FREQ 4000000
void main(void)
{
unsigned char i,j,a,b;
TRISC=0;
TRISD=0;
while(1)
{
PORTC=0x00;
PORTD=0x00;
__delay_ms(20);
a=1;b=1;
for(i=0;i<8;i++)
{
PORTC=a;
a=(a<<1)|0x01;
__delay_ms(20);
}
for(j=0;j<8;j++)
{
PORTD=b;
b=(b<<1)|0x01;
__delay_ms(20);
}
}
}
Bi 7: Vit chng trnh iu khin im sng dch chuyn t led 1 n led 16,sau
chy ngc li t led16 v led 1,chng trnh lp li lin tc
#include <htc.h>
Page 7
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
for(j=0;j<8;j++)
{
PORTD=b;
b=(b<<1);
__delay_ms(20);
}
PORTD=0X00;PORTC=0X00;__delay_ms(20);
for(l=0;l<8;l++)
{
PORTD=c;
c=(c>>1);
__delay_ms(20);
}
PORTD=0X00;
__delay_ms(20);
for(m=0;m<8;m++)
{
PORTC=d;
d=d>>1;
__delay_ms(20);
Page 8
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
}
}
}
Bi 8: Vit chng trnh iu khin 8 led tt dn t led 1 n led 8 (3 ln),sau sng lan
dn t led 8 v led1(4 ln) v chng trnh lp li lin tc. Yu cu xy dng hm 8 led tt
dn v 8 led sng lan dn.
#include <htc.h>
#define _XTAL_FREQ 4000000
void tatdan1_8();
void sangdan8_1();
void tatdan1_8()
{
unsigned char i,a;
PORTC=0XFF;
a=0xff;
__delay_ms(50);
for(i=0;i<9;i++)
{
PORTC=a;
a=(a<<1)&0xfe;
__delay_ms(50);
}
}
///ham sang dan 8led tu 8 den 1
void sangdan8_1()
{ unsigned char i,a;
PORTC=0X00;
__delay_ms(50);
a=0x80;
for(i=0;i<8;i++)
{
PORTC=a;
a=(a>>1)|0x80;
__delay_ms(50);
}
}
//chuong trinh chinh
void main(void)
Page 9
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
{ int i,j;
TRISC=0X00;
PORTC=0XFF;
while(1)
{
for(i=0;i<3;i++)
{
tatdan1_8(); //goi ham
}
for(j=0;j<4;j++)
{
sangdan8_1(); //goi ham
}
}
}
Bi 1: vit chng trnh,khi nhn nt A th led portc.0 sng. Nhn nt b portc.0 tt.
(Nt nhn p ng ngay lp tc khi va c nhn)
#include <htc.h>
#define _XTAL_FREQ 4000000
#define NUTA RB0 //DINH NGHI NUT NHAN A
#define NUTB RB1 // DN NUT NHAN B
#define LED RC0 // DN BIEN LED LA O CHAN RC0
#define DUOC_NHAN 0 //dinh nghia nut nhan
#define KHONG_NHAN 1
void main()
{
ANSEL=ANSELH=0;//NUT NHAN A,B ANH HUONG DEN TIN HIEU NGO VAO LA SO
TRISB=0X03; // TUONG DUONG VOI 0b00000011 , 2 bit cuoi cung la ngo vao
TRISC0=0 ; //CHAN C.0 LA NGO RA.
LED=0; // BAN DAU LED TAT
while(1)
{
if(NUTA==DUOC_NHAN) // TUONG DUONG VOI IF(!NUTA)-CO NGHIA LA
NUTA==0
{
LED=1;
Page 10
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
}
if(NUTB==DUOC_NHAN)
{
LED= 0;
}
}
}
/*CH : TA C THE SD: IF(!RB0) CO NGHIA LA NEU NUT A DUOC NHAN.
NHUNG DO CHNG TA INH NGHIA, NN TA XAI NUTA LA DUOC.
NUT NHAN,KHI TAC DONG L P NG NGAY LAP TUC*/
Bi 2: vit chng trnh,khi nhn nt A th led portc.0 sng. Nhn nt b portc.0 tt.
(Nt nhn p ng ngay sau khi th ra)
#include <htc.h>
#define _XTAL_FREQ 4000000
#define NUTA RB0 //DINH NGHI NUT NHAN A
#define NUTB RB1 // DN NUT NHAN B
#define LED RC0 // DN BIEN LED LA O CHAN RC0
#define DUOC_NHAN 0
#define KHONG_NHAN 1
void main()
{
ANSEL=ANSELH=0;//NUT NHAN A,B ANH HUONG DEN TIN HIEU NGO VAO LA SO
TRISB=0X03; // TUONG DUONG VOI 0b00000011 , 2 bit cuoi cung la ngo vao
TRISC0=0 ; //CHAN C.0 LA NGO RA.
LED=0; // BAN DAU LED TAT
while(1)
{
if(NUTA==DUOC_NHAN) // tuong duong voi if(!nuta)-co nghia la nuta==0
{
while(NUTA==DUOC_NHAN) {;} //khi nao tha ra thi moi thuc hien lenh tiep theo
LED=1;
}
if(NUTB==DUOC_NHAN)
{
while(NUTB==DUOC_NHAN){;}
LED= 0;
}
Page 11
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
}
}
#include <htc.h>
#define _XTAL_FREQ 4000000
void main()
{
ANSEL=ANSELH=0;//TIN HIEU SO
TRISC=0X00;
TRISB0=1; //CHAN RB0 LA NGO VAO
PORTC=0X00;
while(1)
{
while(RB0) {;}//khi khong nhan,ko lam gi tiep
while(!RB0) {;} //khi duoc nhan ko lam gi,khi nha ra moi lam
PORTC=0XFF;//sang 8 led
while(1)
{
if(!RB0)//NEU DUOC NHAN
{
while(!RB0) {;}/*trong khi con nhan,thi dung yen o ham while nay.tha ra moi lam lenh o ben
duoi*/
PORTC=0X00; //tat led
break; // thoat khoi vong lap while(1) thu 2./
}
}
}
}
/*LUU Y: LENH BREAK CO TAC DUNG: KHI GAP LENH BREAK. CHUONG TRINH
SE THOAT KHOI VONG LAP DANG CHUA NO.
VA SE LAM CAU LENH TIEP THEO O NGOAI VONG LAP */
Bi 3: vit chng trnh iu khin led,s dng nt nhn B. nhn nt th 8 led sng ti xen
k nhau.( s dng hm delay t vit)
Page 12
TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung
#include <htc.h>
#define _XTAL_FREQ 4000000
int i=0; //khai bao bien i la bien toan cuc
void delay(unsigned int t)
{
while(t--);
}
void main()
{
ANSEL=ANSELH=0;
TRISB1=1;// NGO VAO NUT NHAN B.1
TRISC=0; //NGO RA 8 LED PORTC
PORTC=0;
while(1)
{
if(!RB1) //neu chan rb1 duoc nhan
{ while(!RB1) {;} //trong khi dang con nhan thi ko lam gi ca.tha ra moi thuc hien
do
{
PORTC=0XAA; delay(10000);
PORTC=0X55; delay(10000);
i++;
}
while(i<10); // SANG XEN KE 10 LAN.
Page 13