You are on page 1of 13

TI LIU LT VK PIC 16F887 VI MPLAB-HI TECH K LED N BS: V Vn Trung

GII THIU

Phn mm MPLAB l mt phn mm dng lp trnh vi iu khin. Vi cc tnh nng ni bt


nh :
+ Lp trnh bng C,ASM : nhng CCS C Compiler vv..
+ Qun l Project d dng.
Bnh thng khi ci t MPLAB. Chng ta cn ci thm cc trnh dch C18, C16 ,C32, l
cc trnh dnh h tr ngn ng C cho MPLAB.
Nhng y ta s dng Hi Tech. L do s dng Hitech C, y l chng trnh bin dch
c Micro chip mua, n l chng trnh ANSI C chun. Vit trn Hitech C cc bn sau ny c
th lm quen vi hu ht cc loi vi iu khin khc trn C. Hin ti c kh nhiu trnh bin
dch nh MIKRO C, CCS C...hu ht cc trnh bin dch ny u c h tr sn mt s hm
thng dng chnh iu ny lm mt i tnh nng ca ngi hc.

xem cc thnh phn trong th vin vi file.h hoc file.c ta c th vo mc sau:

C:\Program Files\HI-TECH Software\PICC\9.71. trong th mc ny c rt nhiu file


Vd:

Ta mun xem th vin cha file .h th vo file include. Ta tm file htc

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.

Cch to Project mi: xem hng dn ti link sau:


http://youtu.be/gLHzB4Ymcwc

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.

PORTx: y l thanh ghi iu khin trng thi ca ngoi vi.


Vd: mun iu khin c portc xut mc 1 ht 8 led sng th:
PORTC=0XFF; // mc 1 led sng, mc 0 led tt.
Mun iu khin chn no , vd: iu khin chn th 0 ca PortA xut mc 1 led sng
th: RA0=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

BI 1: VIT CHNG TRNH IU KHIN 8 LED PORTC CHP TT 3 LN. RI


TT HT. v ng yn chng trnh.

#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
}
}

Bi s 2:Vit chng trnh iu khin 8 led sng lan dn t led1 n led 8


lin tc.

#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

Bi s 3: Vit chng trnh im sng dch chuyn t led 1 n led 8 lin tc

#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);

}
}
}

Bi s 4: Vit chng trnh iu khin 8 led tt dn t led 8 n led 1 lin tc

#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

Bi 6: Vit chng trnh iu khin 16 led sng lan dn lin tc

#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

#define _XTAL_FREQ 4000000


void main(void)
{
unsigned char i,j,a,b,c,d,l,m;
TRISC=0;PORTC=PORTD=0;
TRISD=0;
while(1)
{
__delay_ms(20);
PORTC=0x00;
PORTD=0X00;
__delay_ms(20);
a=0x01;b=0x01;c=0x80;d=0x80;
for(i=0;i<8;i++)
{
PORTC=a;
a=(a<<1);
__delay_ms(20);
}
PORTC=0X00;
__delay_ms(20);

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
}
}
}

PHN GIAO TIP PHM NHN


Phm nhn tc ng vi iu khin mc thp. s dng R=10k in tr treo ln.

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

}
}

Bi 2: vit chng trnh iu khin led,s dng 1 nt nhn A ,nt nhn ny c 2 tc v l


START_STOP. Nhn th 8 led portc sng. Nhn na th 8 led tt.

#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

You might also like