Professional Documents
Culture Documents
Hoc KeilC
Hoc KeilC
Cc bc thc hin.
Bn xem hnh minh ha cho d dng
__________________
Khi bn vit theo cch th nht th trnh bin dch s tm kim file .h hoc .c ny trong th mc hin ti cha
d n ca bn, nu khng c th s tm kim trong th mc Inc trong th mc ci t KeilC.
Vit theo cch th hai th trnh bin dch s tm lun trong th mc /INC lun.
c th s dng ng cc file .h cho cc vi iu khin ca mnh th bn nn m th mc /inc trong th mc
ny c cc th mc con nh tn ca hng sn xut. V d nh ca Atmel th bn tm trong th mc /Atmel
th s thy c file reg51.h ,.. Bn m tng file nn m khm ph s c nhiu iu hay y.
2/nh ngha cc macro cho chng trnh sng sa. Vic nh ngha ny c dng bng t kha #define
V d: bn nh ngha led1 l P1_0 tc l led1 c ni vi chn 0 ca Port 1.
Code:
3/ Cc hm ngt nh ngt timer0, timer1, ngt ni tip, ngt ngoi. Ti s ni chi tit ci ny sau. Cn by
gi ti ch gii thiu s s thi.
V d bn dng ngt ni tip l ngt 4 trong bng vector ngt th hm s c dng nh sau:
Code:
C php cc ngt khc cng tng t ch thay s 4 bng s th t ca ngt trong bng vector ngt.
4/ Cc hm con nh Delay, khi to,.. nh:
Code:
void main(void){
// vit m y
}
Hm tr delay()
ng l ra ti phi gii thiu cho cc bn cc header file trc nhng ti qun mang theo mong cc bn
thng cm. Ti xin gii thiu dng delay trc .
C l vic lp trnh cho vi iu khin mt hm khng th thiu l tr: nh tr khi bn nhy led chng hn(
v d n gin nht), ...
Vic gy tr trong Keil C c th c nhiu cch khc nhau:
Hm delay c tham s l thi gian cn gy tr tnh theo ms
1/Dng vng lp while, for
dng kiu no th cng n gin ch l vng lp m thi. Trong vng lp ny chng ta s chng lm g c nn
vi iu khin s b mt thi gian trong cc vng lp ny.
Vi tn s thch anh 11.0582 MHz th mi vng lp khi cc bn debug s thy l chng ta mt thi gian thc
khong 8.28 us. Do c th gy tr 1ms th cc bn cn dng xp x 121 vng lp kiu ny.
Do hm s nh sau:
Code:
Vic chuyn i gia vng for vi while trong trng hp ny rt n gin thi. Nhng khi bn li phi
khai bo thm mt bin m nh th s tn b nh. Chng trnh trn l ti u nht ri.
2/Dng timer0,timer1,..
Ci ny ti xin phn tch sau cng vi vic gii thiu cc #include. c th h thng ht c. Cho n c
logic. Ch nu ti a ra lun cc bn mi hc s khng hiu l n u ra.
C l ngi dng Keil C ln u tin gp tr ngi khi dng #include l khng bit lit k cc header file
no cn thit cho ng dng ca mnh.
c th bit c header file no dng cho vi iu khin ca mnh th cc bn m th mc ci Keil C ra, tm
n th mc C51/INC bn s thy mt lot cc th mc ca cc hng nh Atmel,Dalas,.. Ti xin ly v d
mt file regx51.h trong th mc /Atmel. Bn m file ln s thy u ca n nh sau:
/
Code:
*-------------------------------------------------------------------------AT89X51.H
Header file for the low voltage Flash Atmel AT89C51 and AT89LV51.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
Chng t file ny dng cho con AT89C51 v AT89LV51 ri. Khi bn s thm header file ny vo chng
trnh ca mnh.
Cn lm th no mnh lm vic vi cc thnh ghi, cc port nh trong ASM by gi. Cu tr li trong file
ny:
Code:
#ifndef __AT89X51_H__
#define __AT89X51_H__
/*-----------------------------------------------Byte Registers ; nh ngha cc thnh ghi cc a ch trong RAM
------------------------------------------------*/
sfr P0
= 0x80;
sfr SP
= 0x81;
sfr DPL
= 0x82;
sfr DPH
= 0x83;
sfr PCON
= 0x87;
sfr TCON
= 0x88;
sfr TMOD
= 0x89;
sfr TL0
= 0x8A;
sfr TL1
= 0x8B;
sfr TH0
= 0x8C;
sfr TH1
= 0x8D;
sfr P1
= 0x90;
sfr SCON
= 0x98;
sfr SBUF
= 0x99;
sfr P2
= 0xA0;
sfr IE
= 0xA8;
sfr P3
= 0xB0;
sfr IP
= 0xB8;
sfr PSW
= 0xD0;
sfr ACC
= 0xE0;
sfr B
= 0xF0;
/*-----------------------------------------------P0 Bit Registers ; nh ngha cc cng ca Port 0 v port ny l thanh ghi 8 bt nh
c a ch trc tip
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit
sbit
sbit
sbit
sbit
sbit
P0_2
P0_3
P0_4
P0_5
P0_6
P0_7
=
=
=
=
=
=
0x82;
0x83;
0x84;
0x85;
0x86;
0x87;
0x02
0x02
#define GF0_
#define GF1_
0x04
0x08
#define SMOD_
0x80
/* Alternate definition */
sbit
sbit
sbit
sbit
sbit
sbit
sbit
TI
RB8
TB8
REN
SM2
SM1
SM0
=
=
=
=
=
=
=
0x99;
0x9A;
0x9B;
0x9C;
0x9D;
0x9E;
0x9F;
= 0xAF;
RXD
TXD
INT0
INT1
T0
T1
WR
RD
=
=
=
=
=
=
=
=
0xB0;
0xB1;
0xB2;
0xB3;
0xB4;
0xB5;
0xB6;
0xB7;
/*
/*
/*
/*
/*
/*
/*
/*
Cc bn nhn trn thy l cc thanh ghi, cc port qu l ging nh vi ASM phi khng. Do vy vic lp trnh
cc bn s lm vic trc tip vi cc cc a ch ca Ram m c nh ngha trn
/*-----------------------------------------------Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR
0 /* 0x03 External Interrupt 0 */
#define TF0_VECTOR
1 /* 0x0B Timer 0 */
#define IE1_VECTOR
2 /* 0x13 External Interrupt 1 */
#define TF1_VECTOR
3 /* 0x1B Timer 1 */
#define SIO_VECTOR
4 /* 0x23 Serial port */
void tnham(void)
Tng t vi cc ngt khc. Bn thay s 0 bng s th t cc ngt tng ng cc ngt tng ng.
Code:
Tip tc vi 2 ngt cn li
Cc bn lu l vdk nhy n bng vector ngt th bn phi enable ngt .
V d: bn mun ngt ni tip th phi cho nh sau:
Cc bn xem l thanh ghi IE trong file regx51.h, thanh ghi ny nh c a ch bit
Code:
Mai ti s vit tip. Bn FPT cha mc ADSL cho nn vit bi hi chm, mong thng cm, i vi ngy na
khi mc ri mnh s vit bi lin tc v ch ny. Cung phu hn na.
Hm ngt trong keilC
=
=
=
=
=
0
1
2
3
4
:
:
:
:
:
ngt
ngt
ngt
ngt
ngt
ngoi 0
timer0
ngoi 1
timer1
ni tip
# include "regx51.h"
// ham gay tre
void delay(int time){
while(time--){
unsigned char j = 122;
while(j--);
};
}
// ham thiet lap ban dau
void init(){