Professional Documents
Culture Documents
conio.h. Do trong chng trnh c hai dng khai bo sau u chng trnh:
#include <stdio.h>
#include <conio.h>
Ch thch v du kt thc cu lnh
Trong ngn ng lp trnh C nhng phn c vit trong /*...*/ c gi l phn
ch thch. Mi k t nm trong /*...*/ khi dch chng trnh dich b qua, ta c php
dng chng minh ho cho cc thnh phn chng trnh lm cho chng trnh d
hiu, mch lc. Li ch thch c th xut hin bt k u trong chng trnh v c th
tri trn nhiu dng khc nhau trong chng trnh.
Trong chng trnh vit bng ngn ng C mi cu lnh c th vit trn mt hay
nhiu dng v phi kt thc bng du chm phy(;).
1.2. Cc yu t c bn ca ngn ng C - ANSI
1.2.1 B ch vit
Ngn ng C c xy dng trn b k t sau:
Cc ch ci hoa: A B C .... Z
Cc ch ci thng:a b c ... z
Cc ch s:0 1 2... 9
Cc du chm cu: , . ; : / ? [ ] { } @ # $ % ^ * & ( ) + - = < > ...
Cc du ngn cch khng nhn thy nh du cch, du nhy cch tab, du xung
dng
Du gch ni di _
1.2.2 T kho
L nhng t c mt ngha hon ton xc nh trong chng trnh:
V d: void
struct
class
while ....
1.2.3 Tn
L mt dy k t c dng ch tn hng, tn bin, tn mng, tn hm...Tn
c to thnh t cc ch ci a..z, A..Z, ch s 0..9, du gch di. Tn khng c
bt u bng ch s, cha cc k t c bit nh du cch, du php ton...
Tn khng c t trng vi t kho.
V d: Giai_Phuong_Trinh_Bac2
abc123
Ch :
-Trong ngn ng lp trnh C tn c phn bit ch hoa v ch thng
-Thng thng ch hoa thng c dng t tn cho cc hng, cn cc i lng
khc th dng ch thng.
2.1.4Mt s kiu d liu c bn
- Kiu k t (Char)
a Mt gi tr kiu char chim mt byte v biu din c mt k t trong bng m
ASCII.
- Kiu s nguyn
Mt gi tr kiu s nguyn l mt phn t ca mt tp cc s nguyn m my tnh c
th biu din. Trong ngn ng lp trnh C c nhiu kiu d liu s nguyn vi di gi
tr khc nhau c th:
Kiu
Char
Unsigned char
Int
Unsigned int
Short int
Unsigigned Short
Long Int
Unsigigned Long
Kch thc(byte)
1
1
2
2
2
2
4
4
- Kiu s thc
Mt gi tr kiu s thc l mt phn t ca mt tp cc s thc m my tnh c th
biu din. Trong ngn ng lp trnh C c nhiu kiu d liu s thc vi di gi tr
khc nhau c th:
Kiu
Kch thc(byte)
3
Float
3.4E-38 -> 3.4E+38
Double
1.7E-311 -> 1.7E3+311
Long double
3.4E-4932->3.4E+4932
- Khai bo hng, bin, mng
4
8
10
+ Khai bo hng
+ Hng s thc
c vit theo hai cch sau:
- Dng thp phn gm:Phn nguyn, du chm thp phn, phn thp phn
V d:34.2
-344.122
9 .....
kieu_du_kieu ten_hang=gia_tri_hang;
danh_sach_cac_bien_can_khai_bao;
int x,y;
float a;
ten_bien = gia_tri;
V d: float x=5.;
int n=10;
- ly a ch ca mt bin ta dng ton t & c th nh sau:
&ten_bien
V d:
&x ly a ch ca bin a
&n ly a ch ca bin n
+ Khai bo xu k t.
char str[10]
+ Cc phn t ca mng l mt k t
+ Xu bao gi cng kt thc bng phn t k hiu l NUL(\0)
Mt hng xu k t c t trong du nhy kp
VD: DHSPKT lu gi xu ny th h thng phi dng 1 mng c 7 nh.
k t n a
xu k t a
a0 \
\0
tenmang[chiso]
tenmang[chisodong][chisocot]
V d:
m[0]
m[5]
- bin con tr
Ta c th s dng tn con tr hoc dng khai bo ca n trong cc biu thc
V d:
float *px;
6
y: px l tn con tr
*px dng khai bo ca con tr
- S dng tn con tr: Con tr cng l mt bin nn khi tn ca n xut hin trong
cc biu thc th gi tr ca n s c s dng trong biu thc ny. Ch c mt iu
cn lu y: gi tr ca mt con tr l da ch ca bin no .
V d: float a,*p,*h;
p=&a;/* Gn a ch ca bin a cho p hay ni cch khc cho con tr p tr ti bin a */
h=p;/* Gn con tr p cho con tr h */
*p=5;// a=5
Cc php ton trn con tr
C bn nhm php ton lin quan n con tr v a ch: Php gn, php tng
gim a ch, php truy nhp b nh v php so snh.
+ Php gn
V d: int x,y,*trox,*troy;
char z;
trox=&x;
troy=&y;
trox=(int *)(&z); p kiu
+ Php tng gim a ch
Mt con tr c th cng vi mt gi tr nguyn (int, long) cho kt qu l mt con
tr cng kiu.
V d: int a[10], *tro1, *tro2, *tro3;
tro1=a; tng ng vi tro1=a[0];
tro2=tro1+1;
tro3=tro1+9;
C th my s cung cp cc khong nh lin tip ca mng a nh sau:
a[0]
a[1]
tro1 tro2
a[9]
tro3
+ Hiu hai con tr
Hai con tr cng kiu tr i nhau cho ta mt s nguyn
V d: float x[10],*trox,*troy;
7
int z;
trox=x+1; tng ng trox=&x[1]
troy=&x[5];
z=troy-trox;/* z c gi tr l 4 */
x[0]
x[1]
Ch : Khng c ly tng, hiu, tch, thng, % hai con tr
x[9]
- Khi lnh
- L mt dy cc cu lnh c bao bi cc du { v }
- My coi mt khi lnh tng t nh mt lnh ring l, ch no vit c mt
lnh ring l cng c quyn t vo mt khi lnh. Vic bt u mt khi lnh { v
kt thc mt khi lnh } tng t nh cu lnh hp thnh trong Pascal s dng cp t
kho begin...end.
- u mi khi lnh c th t cc khai bo bin, mng...
- Cc khi lnh c th lng nhau
- Cc bin c khai bo trong khi lnh no th ch c hiu lc trong khi .
- Khi my kt thc phin lm vic vi khi lnh no th tt c cc bin cc b bn
trong khi lnh u b gii phng.
2.3 Biu thc v Cc php ton
2.3.1 Php ton s hc hai ngi
Cc php ton s hc hai ngi c thng k bng sau:
Php ton
+
*
/
%
Ch :
ngha
Php cng
Php tr
Php nhn
Php chia
Php ly phn d
V d
2+4=6
2-3=-1
4*2=8
5/3=1
6/2=0
- Nu php chia hai ton hng u nguyn th php chia cho kt qu l phn
nguyn ca thng hai ton hng .
- Nu mt trong hai ton hng l kiu thc th lc ny kt qu ca php chia cho
ta gi tr ng.
- Php ton ly phn d % ch p dng cho trng hp hai ton hng l s
nguyn.
8
ngha
Php so snh ln hn
Php so snh ln hn hoc bng
Php so snh nh hn
Php so snh nh hn hoc bng
Php so snh bng nhau
Php so snh khc nhau
V d
1>2
2>=2
3<3
4<2
4==5
2!=7
Kt qu
0
1
0
0
0
1
ngha
Php ph nh(not)
Php v (and)
Php hoc(or)
V d
!(3>1)
(2>1)&&(5=2)
(4>3)||(1>8)
Kt qu
0
0
1
a=a+3;
e1?e2:e3
C php cu lnh
if (bt)
cng_vic;
Trong :
- if l t kho
- bt l mt biu thc
- Cng_vic c th l mt lnh n hay mt khi lnh
2.4.1.2. Cu trc r nhnh if dng dy
C php cu lnh
if (bt)
cng_vic1;
else
cng_vic2;
Trong :
- if, else l t kho
- bt l mt biu thc
- Cng_vic1,Cng_vic2 c th l mt lnh n hay mt khi lnh
2.4.2 Cu trc iu khin switch
C php cu lnh
switch ( bieu_thuc)
{ case e1:Khi_lnh_1;[break;]
case e2: Khi_lnh_2;[break;]
.......................
case e2: Khi_lnh_n;[break;]
[default: Khi_lnh_n+1;]
}
Trong : *switch, case, default l cc t kho
* bieu_thuc: l mt biu thc nguyn bt k
* ei:l gi tr nguyn m biu thc c th nhn c. C th l kiu char v
n c th c chuyn i thnh kiu int
11
14
16
Ni
MSB
EA
CY
GATE
TF1
SM0
SMOD
T2
RXD
AC
C/(/T)
TR1
SM1
T2EX
TXD
ET2
PT2
FO
M1
TF0
SM2
-
ES
PS
RS1
M0
TR0
REN
-
/INT0
/INT1
dung
ET1
PT1
RS0
GATE
IE1
TB8
GF1
/SS
T0
EX1
PX1
OV
C/(/T)
IT1
RB8
GF0
MOSI
T1
ET0
PT0
M1
IE0
TI
PD
MISO
/WR
LSB
EX0
PX0
P
M0
IT0
RI
IDL
SCK
/RD
17
Symbol
Name
* ACC
Thanh ghi tch lu
*B
Thanh ghi B
* PSW
T trng thi chng trnh
SP
Con tr ngn xp
DP0L
Byte cao ca con tr d liu 0
DP0H
Byte thp ca con tr d liu 0
* P0
Cng 0
* P1
Cng 1
Symbol
Name
* P2
Cng 2
* P3
Cng 3
* IP
TG iu khin ngt u tin
* IE
TG iu khin cho php ngt
TMOD
iu khin kiu Timer/Counter
* TCON
TG iu khin Timer/Counter
TH0
Byte cao ca Timer/Counter 0
TL0
Byte thp ca Timer/Counter 0
TH1
Byte cao ca Timer/Counter 1
TL1
Byte thp ca Timer/Counter 1
* SCON
Serial Control
SBUF
Serial Data Buffer
PCON
Power Control
* : c th nh a ch bit, x: khng nh ngha
Address
0E0h
0F0h
0D0h
81h
82h
83h
80h
90h
Address
0A0h
0B0h
0B8h
0A8h
89h
88h
8Ch
8Ah
8Dh
8Bh
98h
99h
87h
Reset Values
00000000b
00000000b
00000000b
00000111b
00000000b
00000000b
11111111b
11111111b
Reset Values
11111111b
11111111b
xxx00000b
0xx00000b
00000000b
00000000b
00000000b
00000000b
00000000b
00000000b
00000000b
indeterminate
0xxx0000b
- Thanh ghi ACC: l thanh ghi tch lu, dng lu tr cc ton hng v kt
qu ca php tnh. Thanh ghi ACC di 8 bits. Trong cc tp lnh ca On-chip, n
thng c quy c n gin l A.
- Thanh ghi B : Thanh ghi ny c dng khi thc hin cc php ton nhn v
chia. i vi cc lnh khc, n c th xem nh l thanh ghi m tm thi. Thanh ghi
B di 8 bits. N thng c dng chung vi thanh ghi A trong cc php ton nhn
hoc chia.
- Thanh ghi SP: Thanh ghi con tr ngn xp di 8 bit. SP cha a ch ca d
liu hin ang hin hnh nh ca ngn xp hay ni khc l SP lun tr ti ngn nh
18
AC
FO
RS1
RS0
OV
* CY: C nh. Trong cc php ton s hc, nu c nh t php cng bit 7 hoc
c s mn mang n bit 7 th CY c t bng 1.
* AC: C nh ph (i vi m BCD). Khi cng cc gi tr BCD, nu c mt s
nh c to ra t bit 3 chuyn sang bit 4 th AC c t bng 1. Khi gi tr c
cng l BCD, lnh cng phi c thc hin tip theo bi lnh DA A (hiu chnh thp
phn thanh cha A) a cc kt qu ln hn 9 v gi tr ng.
* F0:
Bank 0
Bank 1
Bank 2
Bank 3
* OV: C trn. Khi thc hin cc php ton cng hoc tr m xut hin mt trn
s hc, th OV c t bng 1. Khi cc s c du c cng hoc c tr, phn
mm c th kim tra OV xc nh xem kt qu c nm trong tm hay khng. Vi
php cng cc s khng du, OV c b qua. Kt qu ln hn +128 hoc nh hn
-127 s t OV=1.
* -:
* P:
lnh ch th s chn hay l ca bit 1 trong thanh ghi tch lu. S cc bit 1 trong A
cng vi bit P lun lun l s chn.
- Thanh ghi PCON: Thanh ghi iu khin ngun.
SMOD -
GF1
GF0
PD
IDL
ET2
ES
ET1
EX1
ET0
EX0
* EA: Nu EA=0, khng cho php bt c ngt no hot ng. Nu EA=1, mi ngun
ngt ring bit c php hoc khng c php hot ng bng cch t hoc xo bit
Enable ca n.
* -: Khng dng, ngi s dng khng nn nh ngha cho Bit ny, bi v n c th
c dng cc b AT89 trong tng lai.
* ET2: Bit cho php hoc khng cho php ngt b Timer 2.
* ES: Bit cho php hoc khng cho php ngt cng ni tip (SPI v UART).
* ET1: Bit cho php hoc khng cho php ngt trn b Timer 1
* EX1: Bit cho php hoc khng cho php ngt ngoi 1.
* ET0: Bit cho php hoc khng cho php ngt trn b Timer 0
* EX0: Bit cho php hoc khng cho php ngt ngoi 0.
- Thanh ghi IP: Thanh ghi u tin ngt.
-
PT2
PS
PT1
PX1
PT0
PX0
TR1
TF0
TR0
IE1
IT1
IE0
IT0
M0
GATE C/(/T) M1
Dnh cho Timer 0
M0
SM1
0
1
0
1
Mode
0
1
2
3
c im
Thanh ghi dch
8 bit UART
Tc Baud
Fosc /12
C th thay i (c t
9 bit UART
9 bit UART
bi b Timer)
Fosc /64 hoc Fosc /32
C th thay i (c t
bi b Timer)
Bng 2.6. Chn Mode trong SCON
* SM2: Cho php truyn tin a x l, th hin Mode 2 v 3. ch 2 hoc 3, nu
t SM2 = 1 th RI s khng c kch hot nu bit d liu th 9 (RB8) nhn c gi
tr bng 0. Mode 1, nu SM2=1 th RI s khng c kch hot nu bit dng c hiu
lc khng c nhn. ch 0, SM2 nn bng 0
* REN: Cho php nhn ni tip. c t hoc xo bi phn mm cho php hoc
khng cho php nhn.
* TB8: L bit d liu th 9 m s c truyn Mode 2 v 3. c t hoc xo bi
phn mm.
23
24
12/
C/ T=0
T1 PIN
TL1
bits 5
C/ T=1
TR1
GATE
1
TH1
bits 8
TF 1
Interrupt
Control
&
Ch 0 ca Timer 1
INT1 PIN/
TL1
bits 8
TH1
bits 8
TF1
Overlow
Flag
Ch 1 ca Timer 1
12/
OSC
C/ T=0
TL1
bits 8
T1 PIN
C/ T=1
GATE
Control
TR1
1
TF 1
Interrupt
&
Reload
TH1
bits 8
INT1 PIN/
Ch 2 ca Timer 1
OSC
Ch 3 ca Timer 0
12/
C/ T=0
TL0
bits 8
T0 PIN
TF 0
Interrupt
C/ T=1
TR0
GATE
1
&
Control
TH0
bits 8
INT0 PIN/
OSC
Interrupt
12/
TF1
TR1
Program Memory
)Read Only(
Data Memory
)Read/ Write(
FFFFh
FFFFh
External
Internal
FFh 89C52
0FFF
EA=0/
External
PSEN/
0000
EA=1 /
Internal
7Fh
Only
00
Cu trc b nh ca AT89C51
SFR
External
000
0
RD /WR /
27
- B nh d liu ni tr.
FFh
Byte 128
cao
C th truy cp
bng a ch gin
tip
80h
7Fh
C th truy cp
bng a ch trc
tip
)SFR(
FFh
80h
C th truy cp
bng a ch trc
tip v gin tip
Byte 128
thp
0
B nh d liu trong
28
B n h d
2.6. Nguyn l truyn tin ni tip ca AT89C51.
- Phng thc truyn tin ni tip(Serial Interface):
H VXL on-chip ny truyn tin ni tip bng cng RxD v TxD, d liu xut
nhp truyn qua cng ni tip bng tc Baud v u qua vng m ni tip SBUF.
Cng truyn ni tip l cng truyn tin 2 chiu, ngha l n c th ng thi truyn v
nhn thng tin cng 1 lc. N cng c kh nng va thc hin chc nng nhn va
thc hin chc nng m, tc l n c th nhn byte k tip trc khi byte c nhn
trc c c t thanh ghi m. (Tuy nhin, nu byte u tin vn cha c c
ti thi im nhn ca byte th 2, th mt trong 2 byte ny s b mt). iu khin cng
ni tip bng thanh ghi SCON, trng thi ca 2 bit SM0 v SM1 trong thanh ghi ny
29
+ Ch 1: 10 bit c truyn (thng qua TxD) hoc nhn (thng qua RxD),
30
+ Ch 2: 11 bit c truyn (thng qua TxD) hoc nhn (thng qua RxD) bao
gm: bit khi ng (c gi tr 0), 8 bit d liu (u tin l LSB), mt bit d liu th 9
c th lp trnh c, v mt bit dng (c gi tr 1). Khi truyn, bit d liu th 9 (TB8
trong SCON) c th c gn gi tr 0 hoc 1. Chng hn nh bit chn l (P trong
PSW) c th c chuyn vo TB8. Khi nhn, bit d liu th 9 c chuyn vo RB8
thanh ghi SCON, trong khi bit dng c lc b. Tc Baud c th lp trnh c
bng 1/32 hoc 1/64 tn s b dao ng.
31
32
Tn s
(Hz)
d.ng
Mode 0 Max: 1M
Mode 2 Max: 375K
Mode 1,3 Max:62,5K
19,2K
9,6K
4,8K
2,4K
1,2K
137,5
110
110
(MHz)
12
12
12
11,059
11,059
11,059
11,059
11,059
11,966
6
12
SMODE
x
1
1
1
0
0
0
0
0
0
0
C/(/T)
Timer
Mode
1
Gi tr np li
X
X
0
0
0
0
0
0
0
0
0
X
X
2
2
2
2
2
2
2
2
1
X
X
FFh
FDh
FDh
FAh
F4h
E8h
1Dh
72h
FEEBh
Mi ngun ngt c th c kch hot hoc khng kch hot bng cch t hoc
xo Bit trong IE. IE cng cha bit c th khng cho tt c cc ngt hot ng EA
(Nu EA=0). Cc ngt ngoi c th c kch hot theo mc hoc theo sn xung, tu
thuc vo gi tr ca cc bit IT0, IT1 trong TCON. Ngt ngoi c 2 c ngt tng ng
l IE0, IE1 cng nm trong TCON. Khi mt ngt c thc hin th c ngt tng ng
ca n b xo bng phn cng. Chng trnh con phc v ngt hot ng ch khi ngt
c kch hot theo sn xung. Nu ngt c kch hot theo mc th ngun yu cu
ngt t bn ngoi iu khin c ngt.
36
37
Ngt
External 0
Timer 0
External 1
Timer 1
Serial Port
Timer 2
Ngun ngt
IE0
TF0
IE1
TF1
RI hoc TI
TF2 hoc
a ch Vc t
0003h
000Bh
0013h
001Bh
0023h
002Bh
(AT89C52)
System Reset
EXF2
RST
0000h
a ch vc t ngt
Lnh RETI thng bo cho b VXL rng th tc ngt ny kt thc, sau ly ra 2
Byte t ngn xp v np li cho PC tr li quyn iu khin cho chng trnh
chnh.
- Cc ngt ngoi:
V cc cht ngt ngoi c to mu mi ln trong mi chu trnh my, nn mt
gi tr cao hoc thp ca u vo s duy tr trong t nht l 12 chu k xung nhp ca b
dao ng m bo to mu. Nu ngt ngoi c kch hot bng sn xung , th
ngun ngt ngoi phi duy tr cht yu cu gi tr cao t nht 1 chu k my v sau
duy tr gi tr thp t nht 1 chu k my na. Vic ny c thc hin m bo rng
qu trnh chuyn tip cho thy ch th yu cu ngt IEx s c xc lp. IEx s t ng
c xo bi CPU khi th tc ngt p ng c gi.
Nu ngt ngoi c kch hot theo mc, th ngun ngt bn ngoi phi duy tr
cho yu cu ny c hi lc cho n khi ngt c yu cu thc s c to ra. Sau
ngun ngt ngoi phi hu yu cu trc khi th tc phc v ngt hon thnh,
nu khng ngt khc s c to ra.
- Vn hnh Single-Step:
Cu trc ngt AT89C51 cho php thc hin cc bc n vi s tham gia ca rt
t phn mm. Nh lu trc y, mt yu cu ngt s khng c p ng khi
mt ngt khc c cng mc u tin vn ang hot ng, n cng khng c p ng
sau khi c lnh RETI cho n khi c t nht mt lnh khc c thc hin. Do
mi khi mt th tc ngt c a vo, th n khng th c a vo ln na cho
n khi t nht mt lnh ca chng trnh ngt c thc hin. Mt cch s dng
c im ny i vi hot ng theo bc n l l lp trnh cho 1 trong nhng ngt
38
Cc ch nh
Cc kiu nh c bit
Con tr
Thuc tnh hm
char
int
long
Number
byte ptr 1
bytes ptr 2
float
R7
R6&R7
R4-R7
generic ptr
R1-R3
42
R5
R4&R5
R3
R2&R3
R4-R7
R1-R3
Gi tr tr v cho hm
Return Type
Register
bit
char
int
long
float
Carry Flag
R7
R6&R7
R4-R7
R4-R7
generic ptr
R1-R3
Description
Color
Type
Infrared
Red
Red
Red
Orange
Green
Yellow
Blue
White
Standard
Super Bright
Low Current
Low Current
-
If (mA)
50
30
30
30
30
20
30
30
35
(V)
1.4
1.7
1.85
1.7
2.0
2.1
2.1
4.5
4.4
Bin Led1 c khai bo (gn cho) chn P1_2 ca vi iu khin bng cu lnh:
44
sbit Led1=P1^2;
Khi gn : Led1= 0; trong hm main th chn P1_0 ca AT89C51 c mc logic l 0V.
Theo s nguyn l: 5V Tr R1 Led1 P1_2 (0 V). C chnh lch p c dng in
qua led Led sng. Chng ta c th tnh tan ch ny d dng gi tr ca in tr. in
p ri trn led l Uak (chn Led vng) ly =2 V. in p chn P1_0 l 0V. in p hai
u tr : 5V - 2V = 3 V. Dng qua tr = dng qua led = xp x 10 mA vy phi chn
in tr c gi tr xp x 3/10*1000=300 .
Khi gn: Led1= 1; tc l chn P1_0 c gi tr 1 tong ng in p ca n l 5V .
Hiu in th gia hai u +5V v P1_0 l 0V . Nn khng c dng qua led Led
tt.Nhng nu trong hm main cc bn vit ch c nh sau: While(1) { Led1=bat;
Led1=tat; } Khi chy debug th vn thy led nhp nhy. Nhng khi np chong trnh
vo chp lp vo mch th led khng nhy hoc ch sng m hoc tt ngm. V lnh
Led1=bat; l lnh 1 chu k my , tn s thch anh l 12 Mhz, 1 chu k my c thi gian
l 1uS. Va bt ln 1 uS ri li tt ngay. Led khng p ng c tn s cao vy nn
khng nhp nhy. Do cn ti hm tr . Bt led ln tr 1 thi gian kh lu(0,5 giy),
ri tt led di kh lu(0,5s) ri li bt li to thnh vng lp s c led nhp nhy. Tc
dng ca cu lnh while(1) . iu kin bn trong vng while l 1 lun lun ng nn
n l vng lp v hn ln. Nu khng c vng while(1) th led ca cc bn ch sng ln
1 ln ri tt
45
46
8 led noi tu +5V qua dien tro han dong vao 8 chan cong 1.
/************************************************************/
/*******************Khai bao bien toan cuc**********************/
sbit Led1=P1^0; //Khai bao bien Led1 kieu bit chan P1.0
sbit Led2=P1^1; // ...
sbit Led3=P1^2;
sbit Led4=P1^3;
sbit Led5=P1^4;
sbit Led6=P1^5;
sbit Led7=P1^6;
sbit Led8=P1^7;//Khai bao bien Led8 kieu bit chan P1.7
/***********************************************************/
/********************Khai bao ham****************************/
/*----------------Delay Ham tao thoi gian tre------------------------------Dau vao: 1 bien thoi gian.
Dau ra: khong
------------------------------------------------------*/
void Delay(unsigned int time) {
unsigned int 1;// Khai bao bien cuc bo
for(i=0; i<time; i++)//Lap tao thoi gian tre
{
; // Khong lam gi
}
}
/***********************************************************/
/*******************Chuong trinh chinh**************************/
void main(void) {
while(1)// Vong lap vo han
{ Led1= 1;// Cho led 1 sang
tre(1000);// Tre 1 khoang thoi gian
Led1= 0;// Tat led 1
tre(1000);// Tre 1 khoang thoi gian
}
48
}
/************************************************************/
iu khin 8 led, chng trnh chnh c sa li nh sau:
void main(void) {
while(1)// Lap vo han
{
Led1= 1;// Cho led 1 sang
Delay(500);// Goi ham tao thoi gian tre
Led1= 0;// Tat led 1
Delay(500);// Goi ham tao thoi gian tre
Led2= 1;// Cho led 2 sang
Delay(500);// Goi ham tao thoi gian tre
Led2= 0;// Tat led 2
Delay(500);// Goi ham tao thoi gian tre
Led3= 1;// Cho led 3 sang
Delay(500);// Goi ham tao thoi gian tre
Led3= 0;// Tat led 3
Delay(500);// Goi ham tao thoi gian tre
Led4= 1;// Cho led 4 sang
Delay(500);// Goi ham tao thoi gian tre
Led4= 0;// Tat led 4
Delay(500);// Goi ham tao thoi gian tre
Led5= 1;// Cho led 5 sang
Delay(500);// Goi ham tao thoi gian tre
Led5= 0;// Tat led 5
Delay(500);// Goi ham tao thoi gian tre
Led6= 1;// Cho led 6 sang
Delay(500);// Goi ham tao thoi gian tre
Led6= 0;// Tat led 6
Delay(500);// Goi ham tao thoi gian tre
Led7= 1;// Cho led 7 sang
Delay(500);// Goi ham tao thoi gian tre
49
10 11
Chong trnh xut ra c cng tong ong vi chong trnh iu khin 8 led tng ci
1 nh sau:
void main(void) {
while(1)// Lap vo han
{
P1=0x01;// Bat led 1
Delay(1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 1
Delay (1000);// Tre 1 khoang thoi gian
P1=0x02;// Bat led 2
Delay (1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 2
Delay (1000);// Tre 1 khoang thoi gian
P1=0x04;// Bat led 3
Delay (1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 3
Delay (1000);// Tre 1 khoang thoi gian
P1=0x08;// Bat led 4
Delay (1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 4
Delay (1000);// Tre 1 khoang thoi gian
P1=0x10;// Bat led 5
Delay (1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 5
Delay (1000);// Tre 1 khoang thoi gian
P1=0x20;// Bat led 6
Delay (1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 6
Delay (1000);// Tre 1 khoang thoi gian
P1=0x40;// Bat led 7
Delay (1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 7
51
{
P1=n; // Dich bit xang trai
Delay (5000);
}
}
}
/****************************************************************/
Debug thy s thay i cc cng.
C hai loi led 7 thanh: Ant chung v Catt chung. Hnh trn l so chn ca hai
loi led. N c cu to nh sau:
53
Thanh tt
B,C cc thanh cn li
Gi tr(P1)
1111 1001
A,B,D,E,G cc thanh cn li
1010 0100 .
1000 0000
3.4.3 Lp trnh :
3.4.3.1 Cch 1: Lp trnh d hiu khng cn phi tnh ton nhng phi vit v copy,
paste v sa nhiu.
54
Code nh sau:
#include <AT89X52.H> /* Khai bao cac bien bit gan voi chan vi ieu khien*/
sbit a = P1^0;
sbit b = P1^1;
sbit c = P1^5;
sbit d = P1^4;
sbit e = P1^3;
sbit f = P1^2;
sbit g = P1^3;
/* Khai bao bien */
long n;// Cho vong for
/* Khai bao ham */
/* Ham tre */
void delay(long time) {
for(n=0; n<time; n++) {
;
}
}
/* Ham tat tat ca cac thanh */
void tat(void) {
a =1; b =1; c =1; d =1; e =1; f =1; g =1;
}
/* Cac ham hien thi chu va so */
void so1(void) {
tat();
a =1; b =0; c =0; d =1;e =1; f =1; g =1;
}
void so2(void) {
tat();
a =0; b =0; c =1; d =0; e=0; f =1; g =0;
}
55
void so3(void) {
tat();
a =0; b =0;c =0; d =0;e =1; f =1; g =0;
}
void so4(void) {
tat();
a =1;b =0; c =0; d =1;e =1; f =0; g =0;
}
void so5(void) {
tat();
a =0; b =1; c =0; d =0; e =1; f =0; g =0;
}
void so6(void) {
tat();
a =0; b =1; c = 0;d =0; e =0; f =0; g =0;
}
void so7(void) {
tat();
a =0; b =0; c =0; d =1; e =1; f =1; g =1;
}
void so8(void) {
tat();
a =0; b =0; c =0; d =0;e =0; f =0; g =0;
}
void so9(void) {
tat();
a =0; b =0; c =0; d =0; e =1;f =0; g =0;
}
void chuA(void) {
tat();
a =0; b =0; c =0;d =1; e =0; f =0; g =0;
}
56
void chuB(void) {
tat();
a =0; b =0; c =0; d =0; e =0; f =0; g =0;
}
void chuC(void) {
tat();
a =0; b =1; c =1; d =0; e =0; f =0; g =1; }
void chuD(void) {
tat();
a =0; b =0; c =0; d =0; e =0; f =0; g =1; }
void chuE(void) {
tat();
a =0; b =1; c =1; d =0; e =0; f =0; g =0; }
void chuF(void) {
tat();
a =0; b =1; c =1; d =1; e =0; f =0; g =0; }
void chuG(void) {
tat();
a =0; b =1; c =0; d =0; e =0; f =0; g =1; }
void chuH(void) {
tat();
a =1; b =0; c=0; d =1; e =0; f =0; g =0; }
void chuI(void) {
tat();
a =1; b =1; c =1; d =1; e =0; f =0; g =1; }
void chuL(void) {
tat();
a =1; b =1; c =1; d =0; e =0; f =0; g =1; }
void chuO(void) {
tat();
a =0; b =0; c =0; d =0; e =0; f =0; g =1; }
void chuP(void) {
57
tat();
a =0; b =0; c =1; d =1; e =0; f =0; g =0; }
void chuR(void) {
tat();
a =0; b =0; c =0; d =1; e =0; f =0; g =0; }
void chuS(void) {
tat();
a =0; b =1; c =0; d =0; e =1; f =0; g =0; }
void chuU(void) {
tat();
a =1; b =0; c =0; d =0; e =0; f =0; g =1; }
void chuY(void) {
tat();
a =1; b =0; c =0; d =0; e =1; f =0; g =0; }
/* Ham chinh */
void main(void) {
while(1) {
so0();
delay(20000);
so1();
delay(20000);
so2();
delay(20000);
so3();
delay(20000);
so4();
delay(20000);
so5();
delay(20000);
so6();
delay(20000);
so7();
delay(20000);
so8();
58
delay(20000);
so9();
delay(20000);
chuA();
delay(20000);
chuB();
delay(20000);
chuC();
delay(20000);
chuD();
delay(20000);
chuE();
delay(20000);
chuF();
delay(20000);
chuG();
delay(20000);
chuH();
delay(20000);
chuI();
delay(20000);
chuL();
delay(20000);
chuO();
delay(20000);
chuP();
delay(20000);
chuR();
delay(20000);
chuS();
delay(20000);
chuU();
delay(20000);
chuY();
59
delay(20000);
}}
3.4.3.2 Cch 2:
Cc bn vit 1 chng trnh n gin ri dng cng c Debug xem s hex ri vit
vo rt ngn gn.
V d: Hm hin th s 1:
void so1(void) {
tat();
P1=0xF5;
}
Cc bn debug cho hin th cng P1 ln. du tch cc n tt(1) , b du tch
cc n cn bt(0). Ri c gi tr hex nh ti hng dn bi trc. Dng cu trc
lnh switch case vit li chng trnh s rt gn.
void Hienthiled(unsigned char x)
// Co 1 bien dau vao de xac dinh xem la hien thi so nao
{
switch(x) {
case 1: {
tat(); P1=0xF5; break;
} // So 1
case 2: {
tat(); P1=0xFF; break;
}// So 2
case 9: {
tat(); P1=0xFF; break;
}// So 9
case 10: {
tat(); P1=0xFF; break;
}// Chu A .
case 20: {
tat(); P1=0xFF; break;
60
}// Chu Y
}
}
Cc gi tr trn ch l v d cc bn rt gn v t copy vo. Vi hm hin th led
cc bn vit hin cc s v cc ch gi hm main ch cn nh sau:
void main (void) {
while(1) {
for(n=0; n<20; n++)
{
Hienthiled(n);
delay(20000);
}
}
61
{
so0(); break;
}// Neu so lan =0 hien so 0 thoat khoi
switch
case 1: {
so1(); break;
}// Neu so lan =1 hien so 1 thoat khoi switch
case 2: {
so2(); break;
}// ....
case 3: {
so3(); break;
}
case 4: {
so4(); break;
}
case 5: {
so5(); break;
}
case 6: {
so6(); break;
}
case 7: {
so7(); break;
}
case 8: {
so8(); break;
}
case 9: {
so9(); break;
}// Neu so lan =9 hien so 9 thoat khoi switch
}
63
}
void main(void) {
while(1) {
Docnutbam(); // Goi ham doc so lan nhan phim
hienthisolannhanphim(i);// Hien thi so lan nhan phim, bien i la bien toan cuc
}
}
3.5.2 c ma trn phm
Nhim v: Qut bn phm 16 phm bm(4x4), xem phm no c bm, cc phm
c nh s t 0 n 15 ri hin th gi tr ra led 7 thanh
so5(); break;
}
case 6: {
so6(); break;
}
case 7: {
so7(); break;
}
case 8: {
so8(); break;
}
case 9: {
so9(); break;
}// Neu so lan =9 hien so 9 thoat khoi switch
}}
Hm qut phm:
/*Khai bao 1 mang 4 phan tu nhu sau:
quetphim[4]={P0=0xFE,0xFD,0xFB,0xF7}
De dua 0 ra lan luot cac hang phim, khi do neu nut nao uoc an thi chan vi ieu khien
se xuong 0.Chu y fai kiem tra phim khoang 100 lan.*/
unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7};
// Dinh nghia so lan quet phim
#define solanquetphim 100 // Cac ban co the thay doi gia tri nay cho phu hop unsigned
char quetbanphim(void) {
unsigned char giatribanphim;// Bien de luu gia tri phim an tu 0 den 15 ma hoa 16 phim
unsigned char x,y;
for(x=0; x<4;x++) {
P1=quetphim[x];// Dua lan luot cac hang xuong 0
for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan
{
if(P1_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung
if(P1_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x
66
67
2: Tr v u dng
4: Gim con tr (ch con tr sang tri) 6 Tang con tr (dch con tr sang phi)
5: Dch hin th sang phi
7: Dch hin th sang tri
8: Tt con tr, tt hin th
A: Tt hin th, bt con tr
C: Bt hin th, tt con tr
E: Bt hin th, nhp nhy con tr
F: Tt con tr, nhp nhy con tr
10: Dch v tr con tr sang tri
14: Dch v tr con tr sang phi
18: Dch ton b hin th sang tri
1C: Dch ton b hin th sang phi
80: Dch con tr v u dng th nht
C0: p con tr v u dng th hai
38: Hai dng v ma trn 5 7
- iu khin LCD qua cc buc sau:
Bc 1 : Chun b phn cng. Dng tuc vt hay ci g bn c xoay bin tr 5 K
iu chnh tng phn ca LCD. Xoay cho n khi cc vung(cc im nh) ca
LCD hin ln th xoay ngc bin tr li 1 cht.
Bc 2 : Khi to cho LCD.
Bc 3 : Gn cc gi tr cho cc bit iu khin cc chn RS,RW,EN cho ph hp
vi cc ch d : Hin th k t ln LCD hay thc hin 1 lnh ca LCD.
Bc 4: Xut byte d liu ra cng diu khin 8 bit d liu ca LCD.
Bc 5: Kim tra c bn xem LCD sn sng nhn d liu mi chua.
Bc 6: Quay vng li bc 1.
3.6.3 Lp trnh:
- c th lp trnh cho LCD ta thm vo th vin string.h ca trnh bin dch
bng cu lnh:
#include <string.h>
- Khai bo cc chn ca LCD gn vi cc cng:
69
void main(void) {
char x;
LCDinit();
LCDputs("8052 MCU",1);
delay(30000);
while(1) {
for(x=0;x<16;x++)// Dich 16 lan.
{
LCDputs("8052 MCU",1);
LCDcontrol(0x18);// Dich hien thi sang trai.
delay(5000);// Tre
}
}
}
3.7 iu khin ng c DC
3.7.1 Mch nguyn ly
73
- V using 0: C 4 bang thanh ghi bn c th chn cho chuong trnh phc v ngt, ci
ny cng khng quan trng. Trong hm ngt cc bn c th b i t using 0, khi vi
iu khin s t sp xp l dng bang thanh ghi no.
74
75
* Hm ngt:
unsigned char dem=0;// Khai bao bien dem de dem tu 1 den 10
unsigned char phantramxung;// Bien chua phan tram xung(0...10)
void timer0(void) interrupt 1 //Ngat timer 0
{ TR0=0;// Dung chay timer 0
TF0=0;// Xoa co, o che do co tu duoc xoa,che do khac can toi cu viet vao day
dem++;
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi dua gia tri 1
ra //chan, xung 5V
else P2_0=0;// Neu dem = phan tram xung
if(dem==10) dem=0;// Neu dem du 10 thi gan lai bang 0 de bat dau chu ki moi
TR0=1;
// Cho chay timer
}
c th thay i rng xung th ta luu rng xung vo 1 bin, v hm ngt khng
cho truyn bin vo ta khai bo bin l bin ton cc c th gn gi tr mi
hm. 100 uS ngt 1 ln xc nh chu k 1000 uS ta cn m t 1 n 10 ta khai
bo bin m.
void timer0(void) interrupt 1 //Ngat timer 0
{
TR0=0;// Dung chay timer 0
TF0=0;// Xoa co
TH0=0xAB;
TL0=0xAB;
.
TR0=1;// Cho chay timer
}
Cu trc hm ngt timer no cung phi theo, do ch 2 t ng np li nn khng
cn gn gi tr cho TH0 v TL0. V bin m s m t 1 n 10 nu bng 10 kt thc
1 chu k 10*100 =1000 uS, ta gn li n bng 0 sang chu k mi.
if(dem<phantramxung) P2_0=1;// Neu bien dem < phan tram xung thi ua gia tri 1
ra //chan, xung 5V
76
77
3.8.1 S cu to:
78
Nhim v:
iu khin Led ma trn 8x8. Hin th dng ch chy MTC.
3.8.3 Nguyn l hot ng:
Mun cho led sng, cp in dng 5V vo hng, 5V vo ct, dng 10mA dn 15 mA.
V d: mun n led v tr 5x4 sng, ta a in p ct 4(P2_3) ln 5V, in p hng
5(P2_5) ln 5V. Hin th ch: thng k cc im sng thnh ch ri cho cc hng ct
in p tng ng. C th dng cng c debug ly gi tr cng tng ng vi cc
79
MC LC
Chng 1 : n li v ngn ng C theo chun ANSI
1.1. Cu trc c bn ca mt chng trnh C 1
1.2. Cc yu t c bn ca ngn ng C ANSI .2
1.2.1 B ch vit.2
1.2.2 T kho .2
1.2.3 Tn.3
2.1.4 Mt s kiu d liu c bn.3
2.3 Biu thc v Cc php ton
.8
.8
85
86