You are on page 1of 86

Chng 1 : n li v ngn ng C theo chun ANSI

1.1. Cu trc c bn ca mt chng trnh C


Trc tin ta xt v du: Vit chng trnh C hin dng thng bo Cho cc bn
n vi chng trnh C ra mn hnh.
C th chng trnh
/* Chng trnh th d*/
// my first program in C
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();/* Cu lnh xo mn hnh*/
printf(Cho cc bn n vi chng trnh C!);
getch();
}
Khai bo tp tiu
Trong ngn ng lp trnh C khi s dng cc hm chun trong cc th vin chun
chng ta phi khai bo tp tiu (header file) cha cc hm nguyn mu tng ng
cc hm , cc lnh c bt u bng #include theo sau l tp tiu
C hai cch vit nh sau:
Cch 1: #include <[ng dn\] tentep>
V d: #include <a:\Baitap\Bai1.C>
#include <stdio.h>
Cch 2: #include [ng dn\]tentep
V d: #include a:\Baitap\Bai2.C
#include <conio.h>
Cch 1 t ng tm tentep trong th mc INCLUDE
Cch 2 t ng tm tentep trong th mc hin thi nu khng c th tm trong th
mc INCLUDE
Trong th d trn chng ta c s dng hm printf(...) l hm chun c khai bo
trong tp tiu stdio.h v hm getch(), clrscr() c khai bo trong tp tiu
1

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

Khng c dng t kho t tn cho cc hng, bin, mng, hm ....


T kho phi vit bng ch thng
V d t kho vit ng: struct
V d t kho vit sai: Struct

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

Phm vi biu din


-128 -> 127
0->255
-32768->32767
0->65535
-32768->32767
0-> 32767
-2147483648->-2147483647
0-> 4294967295

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

Phm vi biu din

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

- Dng khoa hc(dng m) gm: Phn nh tr v phn m. Phn nh tr l s


nguyn hay s thc dng thp phn, phn m bt u bng E hay e theo sau l s
nguyn
V d: 1234.54E-122
+ Hng s nguyn
- H thp phn bnh thng
VD: 545
- H c s 8(Octal)
Bt u bng s 0 v ch biu din s dng
V d: 024=2010
- H c s 16(Hecxa)
Bt u bng 0x
V d: 0xAB = 16310
+ Hng k t
L mt k t ring bit c t trong hai du nhy n
V d: a

9 .....

Ch : Hng k t biu th m ca k t trong bng m ASCII. Do vy mt hng


k t cng c th tham gia vo cc php ton.
V d:
A+10 c gi tr (65+10=75)
+ Hng xu k t
- L mt dy cc k t t trong hay du nhy ......
- Xu k c lu tr trong mt mng nh lin nhau song cn thm nh cui
cng cha m l 0(k hiu l \0 )
4

V d: Nguyen Van Anh


+ Cch khai bo mt hng
Cch 1:#define Tenhang Giatri
V d: #define MAX 100
Cch 2: const

kieu_du_kieu ten_hang=gia_tri_hang;

V d: const int n=20;


S khc nhau gia nh ngha hng s dng #define v const ch:
* Vi const y l hng s c nh, mt hng s thc s v ch c mt hng s
cha trong nh.
* Vi #define khi gp hng s ny chng trnh dch s lp gi tr hng s ny
vo trong biu thc cn tnh vi s ln thoi mi. iu c ngha l mi khi gp
hng ny my s lp nh cha hng s ny vo .
+ Khai bo bin
- Cc bin trc khi s dng phi khai bo theo mu sau:
kieu_du_lieu
V d:

danh_sach_cac_bien_can_khai_bao;

int x,y;
float a;

- Khi khai bo mt bin ta c th khi u gi tr cho n theo mu sau:


kieu_du_lieu

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

VD: char ch[10]=DHSPKT


- Khai bo mng
Mng l mt dy bin lin tip cng tn nhng khc nhau bi ch s. Tt c cc bin
ny c cng mt kiu l kiu ca mng.
+ Cch khi bo mng
- i vi mng mt chiu
kieu_du_lieu ten_mang[kich_thuc_mang];
- i vi mng hai chiu
kieu_du_lieu ten_mang[kich_thuc_hang][kich_thuoc_cot];
- i vi mng nhiu chiu
kieu_du_lieu ten_mang[kich_thuc_1][kich_thuoc_2]...[kich_thuoc_n];
V d:
int a[10];
float x[3][5];
char x[30];
+ Cch thc truy nhp cc phn t ca mng
Mi phn t ca mng c truy nhp thng qua tn v ch s tng ng, phn t u
tin c ch s l 0.
Cch truy nhp
- Mng mt chiu:

tenmang[chiso]

- Mang hai chiu:

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

2.3.2.Php quan h v logic


Trong ngn ng lp trnh C coi mi gi tr khc khng l ng(TRUE) v mi
gi tr bng khng l sai(FALSE)
Cc php ton quan h sau y cho kt qu l 1 nu iu khin c tho mn v
bng 0 trong trng hp ngc li:
Php ton quan h
>
>=
<
<=
==
!=

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

Cc php ton logic c th hin di bng sau:


Php ton logic
!
&&
||

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

2.3.3. S chuyn i kiu


Vic chuyn i kiu d liu trong C thng din ra t ng trong cc trng
hp sau:
- Khi ton hng trong mt php ton c kiu khc nhau th kiu thp hn c
chuyn thnh kiu cao hn: int->long->float->double
- Khi gn mt gi tr kiu ny cho mt bin(hoc phn t mng) kiu kia.
V d: int c;
c=2.45;/* c s nhn gi tr l 2*/
- Khi truyn gi tr cho cc i s ca hm, trong cu lnh return ca hm.
Ngoi ra ta c th chuyn t mt kiu gi tr ny sang mt kiu gi tr khc bt
k ta mun bng cch p kiu theo mu sau:
(Kii_d_liu)biu_thc
V d:
float c=7.4;
int n;
n=(int)c*3;/* khi n c gi tr 21*/
9

2.3.4 Php tng gim


Trong ngn ng lp trnh C a ra hai php ton mt ngi tng v gim cc
bin (nguyn v thc). Ton t tng ++ s thm 1 vo ton hng ca n, ton t gim
s tr i 1.
V d: n ang c gi tr l 5 th
Sau php ton ++ n c gi tr l 6
Sau php ton n c gi tr l 4
Du php ton ++ v -- c th ng trc hoc ng sau ton hng. Nh vy ta c th
vit: ++n, n++, --n, n-S khc nhau ca ++n v n++ ch: Trong php ton n++ th n tng sau khi gi tr
ca n c s dng, cn trong ++n th gi tr ca n tng trc khi gi tr ca n c
s dng. Trong php ton n-- th n gim sau khi gi tr ca n c s dng, cn trong
--n th gi tr ca n gim trc khi gi tr ca n c s dng.
V d:int x=2,y=4,n=4,m=5;
x+=n++;/* cho kt qu x c ga tr 6*/
y*=++m;/* cho kt qu y c gi tr 24*/
2.3.5 Cu lnh gn
* Trong ngn ng lp trnh C dng du = l du php gn.
V d:

a=a+3;

2.3.6. Biu thc iu kin


Biu thc iu kin c dng:

e1?e2:e3

Trong e1,e2,e3 l cc biu thc no . Gi tr ca biu thc bng e2 nu e1 c gi


tr khc khng, gi tr ca biu thc bng e3 nu e1 c gi tr bng khng. Kiu ca
biu thc iu kin l kiu cao nht gia e2 v e3.
V d:int kq=3,x=5,y=2,z=1;
kq*=(x>y?x+z:y-z);/* cho kt qu kq c gi tr 18*/
2.4 Cc ton t iu khin chng trnh
2.4.1 Cu trc iu khin if
2.4.1.2 Cu trc r nhnh if dng khuyt
10

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

* Nhng phn t trong hai du [ v ] c th c hoc khng


2.4.3 Cu trc lp while
C php cu lnh
while(bt) Cng_vic;
Trong :
- while l t kho
- bt l mt biu thc
- Cng_vic c th l mt lnh n hay mt khi lnh
2.4.4 Cu trc lp do...while
C php cu lnh
do
Cng_vic;
while(bt);
Trong :
- while ,do l t kho
- bt l mt biu thc
- Cng_vic lit k cc cu lnh cn phi thc hin
2.4.5 Cu trc lp for
C php cu lnh
for(bt1;bt2;bt3)
Cng_vic;
Trong :
- for l t kho
- bt1,bt2,bt3 l cc biu thc
- Cng_vic c th l mt lnh n hay mt khi lnh
2.5 Hm, lp trnh hng hm
2.5.1 Cch xy dng mt hm:
Cu trc:
12

[kiu_gi_tr_tr_v] tn_hm([danh sch tham s]);


{
Cc khai bo
............
Cc cu lnh
}
Trong : tn_hm l bt k tn hp l no, [kiu_gi_tr_tr_v] l kiu d liu ca
kt qu tr li cho hm gi n. [danh sch tham s] m t kiu d liu cng th t ca
cc tham s hm nhn c khi n c gi.
Cc khai bo v cc cu lnh trong cp du {} to thnh phn thn ca
hm(khi).
2.5.2 S hot ng ca mt hm
- Cp pht b nh cho cc i v bin ton cc
- Gn gi tr ca cc tham s thc s cho cc i tng ng.
- Thc hin cc cu lnh trong thn hm.
- Khi gp cu lnh return hoc du } cui cng ca thn hm th my s xo cc
i v cc bin cc b khi b nh v hm kt thc.
- Nu hm kt thc bi cu lnh return c cha biu thc th my s tnh ton gi
tr ca biu thc chuyn i kiu ph hp v gn cho tn hm.
2.5.2.1 Bin mng ng
Cc bin, mng dc khai bo bn trong thn ca mt hm gi l bin, mng t
ng. Chng ch c hiu lc trong phm vi hm m chng c khai bo. Khi hm
kt thc phin lm vic th chng b xo khi b nh v tr li nh cho my.
Ch : V chng trnh bt u lm vic t cu lnh u tin ca hm main() v kt
thc khi hm ny kt thc. Do cc bin t ng c khai bo bn trong hm
main() s tn ti trong sut thi gian lm vic ca chng trnh.
2.5.2.2 Bin mng ngoi
L cc bin, mng c khai bo bn ngoi cc hm, chng tn ti trong sut thi
gian lm vic ca chng trnh. Phm vi s dng t v tr c khai bo n cui
13

chng trnh( k c trng hp chng trnh gm nhiu tp ghp ni bng ton t


#include).
2.5.2.3 Bin mng tnh
Cch khai bo
static khieu_du_lieu ten_bien;
V d: static int a,b,x;
Dng khai bo c th t trong(bin, mng tnh trong) hay ngoi(bin, mng tnh
ngoi)
- Cc bin, mng tnh ging bin, mng ngoi ch: Chng u tn ti trong sut thi
gian lm vic ca chng trnh.
- Cc bin, mng tnh khc bin, mng ngoi ch:
* Phm vi hot ng ca bin, mng tnh trong ch gii hn bn trong hm m n
c khai bo. Tuy nhin gi tr ca n vn c lu gi khi ra khi hm v gi tr
ny c th s dng mi khi hm c thc hin tr li.
* Phm vi hot ng ca bin, mng tnh ngoi l t v tr khai bo n cui tp
v khng bao gm cc tp c kt ni bng ton t #include.

Chng 2: n li v vi iu khin AT89C51


2.1. S chn tn hiu ca 80C51/AT89C51.

14

Chc nng ca cc chn tn hiu nh sau:


- P0.0 n P0.7 l cc chn ca cng 0.
- P1.0 n P1.7 l cc chn ca cng 1.
- P2.0 n P2.7 l cc chn ca cng 2
- P3.0 n P3.7 l cc chn ca cng 3
- RxD: Nhn tn hiu kiu ni tip.
- TxD: Truyn tn hiu kiu ni tip.
- /INT0: Ngt ngoi 0.
- /INT1: Ngt ngoi 1.
- T0: Chn vo 0 ca b Timer/Counter 0.
- T1: Chn vo 1 ca b Timer/Counter 1.
- /Wr: Ghi d liu vo b nh ngoi.
- /Rd: c d liu t b nh ngoi.
- RST: Chn vo Reset, tch cc mc logic cao trong khong 2 chu k my.
15

- XTAL1: Chn vo mch khuych a dao ng


- XTAL2: Chn ra t mch khuych a dao ng.
- EA: Truy cp b nh ngoi.
- /PSEN : Chn cho php c b nh chng trnh ngoi (ROM ngoi).
- ALE (/PROG): Chn tn hiu cho php cht a ch truy cp b nh ngoi, khi
On-chip xut ra byte thp ca a ch. Tn hiu cht c kch hot mc cao, tn s
xung cht = 1/6 tn s dao ng ca b VK. N c th c dng cho cc b Timer
ngoi hoc cho mc ch to xung Clock. y cng l chn nhn xung vo np
chng trnh cho Flash (hoc EEPROM) bn trong On-chip khi n mc thp.
- /EA/Vpp: Cho php On-chip truy cp b nh chng trnh ngoi khi /EA=0, nu
/EA=1 th On-chip s lm vic vi b nh chng trnh ni tr (trng hp cn truy
cp vng nh ln hn dung lng b nh chng trnh ni tr, th b nh chng
trnh ngoi cng c s dng). Khi chn ny c cp ngun in p 12V (Vpp) th
On-chip m nhn chc nng np chng trnh cho Flash bn trong n.
- Vcc: Cung cp dng ngun cho On-chip (+ 5V).
- GND: ni Mass.
2.2. S khi

16

Cc thnh phn chnh:


2.3. Cc thanh ghi chc nng c bit.
SFR m nhim cc chc nng khc nhau trong On-chip. Chng nm RAM bn
trong On-chip, chim vng khng gian nh 128 Byte c nh a ch t 80h n
FFh. Cu trc ca SFR bao gm cc chc nng th hin bng 2.3 v bng 2.4.
Thanh
ghi
IE
IP
PSW
TMOD
TCON
SCON
PCON
P1
P3

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

a ch, ngha v gi tr ca cc SFR sau khi Reset

- 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

s dng cui cng (gi l nh ngn xp). Gi tr ca n c t ng tng ln khi


thc hin lnh PUSH trc khi d liu c lu tr trong ngn xp. SP s t ng
gim xung khi thc hin lnh POP.
- Thanh ghi DPTR: Thanh ghi con tr d liu (16 bit) bao gm 1 thanh ghi
byte cao (DPH-8bit) v 1 thanh ghi byte thp (DPL-8bit). DPTR c th c dng nh
thanh ghi 16 bit hoc 2 thanh ghi 8 bit c lp. Thanh ghi ny c dng truy cp
RAM ngoi.
- Ports 0 to 3: P0, P1, P2, P3 l cc cht ca cc cng 0, 1, 2, 3 tng ng.
Mi cht gm 8 bit. Khi ghi mc logic 1 vo mt bit ca cht, th chn ra tng ng
ca cng mc logic cao. Cn khi ghi mc logic 0 vo mi bit ca cht th chn ra
tng ng ca cng mc logic thp. Khi cc cng m nhim chc nng nh cc
u vo th trng thi bn ngoi ca cc chn cng s c gi bit cht tng ng.
Tt c 4 cng ca on-chip u l cng I/O hai chiu, mi cng u c 8 chn ra, bn
trong mi cht bit c b Pullup-tng cng do nng cao kh nng ni ghp ca
cng vi ti (c th giao tip vi 4 n 8 ti loi TTL).
- Thanh ghi SBUF: m d liu ni tip gm 2 thanh ghi ring bit, mt thanh
ghi m pht v mt thanh ghi m thu. Khi d liu c chuyn ti SBUF, n s i
vo b m pht, v c gi y ch bin thnh dng truyn tin ni tip. Khi d
liu c truyn i t SBUF, n s i ra t b m thu.
- Cc Thanh ghi Timer: Cc i thanh ghi (TH0, TL0), (TH1, TL1) l cc
thanh ghi m 16 bit tng ng vi cc b Timer/Counter 0 v 1.
- Cc thanh ghi iu khin: Cc thanh ghi chc nng c bit: IP, IE, TMOD,
TCON, SCON, v PCON bao gm cc bit trng thi v iu khin i vi h thng
ngt, cc b Timer/Counter v cng ni tip. Chng s c m t phn sau.
- Thanh ghi PSW: T trng thi chng trnh dng cha thng tin v trng
thi chng trnh. PSW c di 8 bit, mi bit m nhim mt chc nng c th.
19

Thanh ghi ny cho php truy cp dng mc bit.


CY

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:

C 0 (C hiu lc vi cc mc ch chung ca ngi s dng)

* RS1: Bit 1 iu khin chn bng thanh ghi.


* RS0: Bit 0 iu khin chn bng thanh ghi.
Lu : RS0, RS1 c t/xo bng phn mm xc nh bng thanh ghi ang hot ng
(Chn bng thanh ghi bng cch t trng thi cho 2 bit ny)

Bank 0
Bank 1
Bank 2
Bank 3

RS1 (PSW. 4) RS0 (PSW. 3)


0
0
0
1
1
0
1
1
Bng Chn bng thanh ghi

* 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.
* -:

Bit dnh cho ngi s dng t nh ngha(Nu cn).

* P:

C chn l. c t ng t/ xo bng phn cng trong mi chu trnh

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

* SMOD: Bit to tc Baud gp i. Nu Timer 1 c s dng to tc


20

baud v SMOD=1, th tc Baud c tng ln gp i khi cng truyn tin ni tip


c dng bi cc kiu 1, 2 hoc 3.
* -: Khng s dng, cc bit ny c th c dng cc b VXL trong tng lai.
Ngi s dng khng c php t nh ngha cho cc bit ny.
* GF0, GF1: C dng cho cc mc ch chung (a mc ch).
* PD: bit ngun gim. t bit ny mc tch cc vn hnh ch ngun
gim trong AT89C51. Ch c th ra khi ch bng Reset.
* IDL: bit chn ch ngh. t bit ny mc tch cc vn hnh kiu Idle (Ch
khng lm vic) trong AT89C51.
Lu : Nu PD v IDL cng c kch hot cng 1 lc mc tch cc, th PD c u
tin thc hin trc. Ch ra khi ch bng 1 ngt hoc Reset li h thng.
- Thanh ghi IE: Thanh ghi cho php ngt
EA

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

* - : Khng dng, ngi s dng khng nn ghi 1 vo cc Bit ny.


* PT2: Xc nh mc u tin ca ngt Timer 2.
21

* PS: nh ngha mc u tin ca ngt cng ni tip.


* PT1: nh ngha mc u tin ca ngt Timer 1.
* PX1: nh ngha mc u tin ca ngt ngoI 1.
* PT0: nh ngha mc u tin ca ngt Timer 0.
* PX0: nh ngha mc u tin ca ngt ngoI 0.
- Thanh ghi TCON : Thanh ghi iu khin b Timer/Counter
TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

* TF1: C trn Timer 1. c t bi phn cng khi b Timer 1 trn. c xo


bi phn cng khi b vi x l hng ti chng trnh con phc v ngt.
* TR1: Bit iu khin b Timer 1 hot ng. c t/xo bi phn mm
iu khin b Timer 1 ON/OFF
* TF0: C trn Timer 0. c t bi phn cng khi b Timer 0 trn. c xo bi
phn cng khi b vi x l hng ti chng trnh con phc v ngt.
* TR0: Bit iu khin b Timer 0 hot ng. c t/xo bi phn mm
iu khin b Timer 0 ON/OFF.
* IE1: C ngt ngoi 1. c t bi phn cng khi sn xung ca ngt ngoi 1
c pht hin. c xo bi phn cng khi ngt c x l.
* IT1: Bit iu khin ngt 1 to ra ngt ngoi. c t/xo bi phn mm.
* IE0: C ngt ngoi 0. c t bi phn cng khi sn xung ca ngt ngoi 0 c
pht hin. c xo bi phn cng khi ngt c x l.
* IT0: Bit iu khin ngt 0 to ra ngt ngoi. c t/xo bi phn mm.
- Thanh ghi TMOD: Thanh ghi iu khin kiu Timer/Counter
GATE C/(/T) M1
Dnh cho Timer 1

M0

GATE C/(/T) M1
Dnh cho Timer 0

M0

* GATE: Khi GATE=1 v TRx =1, b TIMER/COUTERx hot ng ch khi


chn INTx mc cao. Khi GATE=0, b TIMER/COUNTERx s hot ng ch khi
TRx=1.
* C/(/T): Bit ny cho php chn chc nng l Timer hay Counter.
- Bit ny =0 th thc hin chc nng Timer
22

- Bit ny =1 th thc hin chc nng Counter


* M0, M1: Bit chn Mode, xc nh trng thi v kiu Timer/Counter:
- M1=0, M0=0: Chn kiu b Timer 13 bit. Trong THx di 8 bit, cn TLx di 5 bit.
- M1=0, M0=1: Chn kiu b Timer 16 bit. THx v TLx di 16 bit c ghp tng.
- M1=1, M0=0: 8 bit Auto reload. Cc thanh ghi t ng np li mi khi b trn. Khi
b Timer b trn, THx di 8 bit c gi nguyn gi tr, cn gi tr np li c a
vo TLx.
- M1=1, M0=1: Kiu phn chia b Timer. TL0 l 1 b Timer/Counter 8 bit, c iu
khin bng cc bit iu khin b Timer 0, Cn TH0 ch l b Timer 8 bit, c iu
khin bng cc bit iu khin Timer 1.
- M1=1, M0=1: Timer/Counter 1 Stopped
- Thanh ghi SCON:
SM0
SM1
SM2
REN TB8
RB8
TI
RI
SCON l thanh ghi trng thi v iu khin cng ni tip. N khng nhng cha
cc bit chn ch , m cn cha bit d liu th 9 dnh cho vic truyn v nhn tin
(TB8 v RB8) v cha cc bit ngt cng ni tip.
* SM0, SM1: L cc bit cho php chn ch cho cng truyn ni tip.
SM0
0
0
1
1

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

* RB8: L bit d liu th 9 c nhn Mode 2 v 3. Mode 1, nu SM2=0 th


RB8 l bit dng c nhn. Mode 0, RB8 khng c s dng.
* TI: C ngt truyn. c t bi phn cng ti cui thi im ca bit th 8 trong
Mode 0, hoc u thi im ca bit dng trong cc Mode khc. bt k qu trnh
truyn ni tip no, n cng phi c xo bng phn mm.
* RI: C ngt nhn. c t bi phn cng ti cui thi im ca bit th 8 trong
Mode 0, hoc gia thi im ca bit dng trong cc Mode khc. bt k qu trnh
nhn ni tip no (tr trng hp ngoi l, xem SM2), n cng phi c xo bng
phn mm.
2.4. Khi to thi gian v b m (Timer/Counter).
On-chip AT89C51 c 2 thanh ghi Timer/Counter di 16 bit, l: Timer 0 v
Timer 1. Trong On-chip AT89C52, ngoi Timer 0 v Timer 1 n cn c thm b
Timer 2. C 3 b Timer ny u c th c iu khin thc hin chc nng thi
gian hay b m, thng qua thanh ghi TMOD.
Khi thanh ghi Timer/Counter lm vic kiu Timer, th sau mi chu k my ni
dung trong thanh ghi c gia tng thm 1 n v. V vy thanh ghi ny m s chu k
my. Mt chu k my c 12 chu k dao ng, do tc m ca thanh ghi l 1/12
tn s dao ng.
Khi thanh ghi Timer/Counter lm vic kiu Counter, xung nhp bn ngoi c
a vo m T0 hoc T1. Ni dung thanh ghi c tng ln khi c s chuyn
trng thi t 1 v 0 ti chn u vo ngoi T0 hoc T1.
Do xung nhp bn ngoi c tn s bt k nn cc b Timer (0 v 1) c 4 ch
lm vic khc nhau lu chn: (13 bit Timer, 16 bit Timer, 8 bit auto-reload(t lp
lai), split Timer(nh thi chia tch)).
Timer 0 v Timer 1:
Trong AT89C51 v AT89C52 u c cc b Timer 0 v 1. Chc nng Timer hay
Counter c chn la bi cc bit iu khin C/(/T) trong thanh ghi TMOD. Hai b
Timer/Counter ny c 4 ch hot ng, c la chn bi cp bit (M0, M1) trong
TMOD. Ch 0, 1 v 2 ging nhau cho cc chc nng Timer/Counter, nhng ch
3 th khc. Bn ch hot ng c m t nh sau:

24

+ Ch 0: C 2 b Timer 0 v 1 ch 0 c cu hnh nh mt thanh ghi 13


bit, bao gm 8 bit ca thanh ghi THx v 5 bit thp ca TLx. 3 bit cao ca TLx khng
xc nh chc chn, nn c lm ng. Khi thanh ghi c xo v 0, th c ngt thi
gian TFx c thit lp. B Timer/Counter hot ng khi bit iu khin TRx c
thit lp (TRx=1) v, hoc Gate trong TMOD bng 0, hoc /INTx=1. Nu t
GATE=1 th cho php iu khin Timer/ Counter bng ng vo ngoi /INTx, d
dng xc nh rng xung.
Khi hot ng chc nng thi gian th bit C/(/T)=0, do vy xung nhp t b dao
ng ni, qua b chia tn cho ra tn s f=fosc/12 c a vo m trong
OSC

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/

thanh ghi Timer/Counter. Khi hot ng chc nng b m th bit C/(/T)=1, lc


xung nhp ngoi a vo s c m.
+ Ch 1: hot ng tng t nh ch 0, ch khc l thanh ghi Timer/Counter
c s dng c 16 bit. Xung nhp c dng kt hp vi cc thanh ghi thi gian byte
thp v byte cao (TH1 v TL1). Khi xung Clock c nhn, b Timer s m tng ln:
0000h, 0001h, 0002, Khi hin tng trn xy ra, c trn s chuyn FFFFh v 0000h,
v b Timer tip tc m. C trn ca Timer 1 l bit TF1 trong TCON, n c c
hoc ghi bi phn mm, xem hnh 2.5 (Timer/Counter 1 Mode 1: 16 bit Counter).
Timer
Clock

TL1
bits 8

TH1
bits 8

TF1

Overlow
Flag
Ch 1 ca Timer 1

+ Ch 2: Ch ny ca thanh ghi Timer cng hot ng tng t nh 2 ch


trn, nhng n c t chc nh b m 8 bit (TL1) vi ch t ng np li, nh
hnh 2.6. Khi xy ra hin tng trn TL1, khng ch thit lp bit TF1 m cn t
25

ng np li cho TL1 bng ni dung ca TH1, c thit lp bi phn mm. Qu


trnh np li cho php ni dung ca TH1 khng b thay i. Ch 2 ca
Timer/Counter 0 cng tng t nh Timer/Counter 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

+ Ch 3: ch ny, chc nng Timer/Counter 0 v chc nng


Timer/Counter 1 khc nhau. B Timer 1 ch 3 ch cha chc nng m ca n,
kt qu ging khi t TR1=0. B Timer 0 ch 3 thit lp TH0, TL0 nh l 2 b
m ring bit. Mch Logic i vi ch 3 ca Timer 0 th hin hnh 2.7. B m
TL0 c iu khin bi cc bit: C/(/T), GATE, TR0, /INT0 v khi m trn n thit
lp c ngt TF0. B m TH0 ch c iu khin bi bit TR1, v khi m trn n
thit lp c ngt TF1. Vy, TH0 iu khin ngt Timer/Counter 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

2.5. B nh chng trnh v b nh d liu ni tr.


Tt c cc b Flash Microcontrollers ca Atmel u t chc cc vng a
ch tch bit i vi b nh chng trnh v b nh d liu, c m t hnh di
y. Cc vng nh chng trnh v d liu tch bit cho php b nh d liu c
truy cp bi a ch 8 bit, c th c lu tr vi tc cao v c vn hnh bi mt
26

b CPU 8 bit. Tuy nhin, a ch b nh d liu 16 bit cng c th c to ra thng


qua thanh ghi con tr d liu (DPTR).

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 /

- B nh chng trnh ni tr.


B nh chng trnh ca AT89C51 c t chc nh th hin hnh trn. Khng gian
nh cc i ca b nh ny chim 64 Kbyte, c nh a ch t 0000h n FFFFh,
trong c 4 Kbyte Flash ni tr bn trong n v c nh a ch t 0000h n
0FFFh. Do c th m rng thm 60 Kbyte b nh chng trnh bn ngoi, c
nh a ch t 1000h n FFFFh. Tuy nhin b VK ny cng c th s dung ton b
b nh chng trnh ngoi bao gm 64 Kbyte c nh a ch t 0000h n FFFFh.
Cng t hnh trn ta thy, thng qua vic chn mc logic cho bit /EA c th la
chn truy cp b nh chng trnh ni tr (4Kb), b nh chng trnh m rng
ngoi tr (60Kb), hoc ton b b nh chng trnh ngoi tr bn ngoi On-chip
(64Kb). C th, khi /EA = 1 th b VK s dng c b nh chng trnh ni tr v
ngoi tr. Ngc li, khi /EA = 0 th b VK ch s dng b nh chng trnh ngoi
tr.
Mi khi c Reset, b VK s truy cp b nh chng trnh ti a ch khi
u l 0000h, sau nu c ch ngt c s dng th n s truy cp ti a ch quy
nh trong bng vecter ngt.

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

AT89C51 c b nh d liu chim mt khong khng gian b nh c lp vi b nh


chng trnh. Dung lng ca RAM ni tr h VK ny l 128 Byte, c nh a
ch t 00h n 7Fh. Phm vi a ch t 80h n FFh dnh cho SFR. Tuy nhin b
VK cng c th lm vic vi RAM ngoi tr c dung lng cc i l 64 Kbyte
c nh a ch t 0000h n FFFFh.
- Vng nh 128 Byte thp
Vng nh 128 Byte thp c nh a ch t 00h n 7Fh, c chia thnh 3 vng
con nh th hin hnh 2.10.
- Vng th nht c ln 32 Byte c nh a ch t 00h n 1Fh bao gm 4 bng
thanh ghi ( bng 0...bng 3), mi bng c 8 thanh ghi 8 bit. Cc thanh ghi trong mi
bng c tn gi t R0 n R7. Vng RAM ny c truy cp bng a ch trc tip
mc Byte, v qu trnh chn s dung bng thanh ghi no l ty thuc vo vic la
chon gi tr cho RS1 v RS0 trong PSW.
- Vng th 2 c ln 16 Byte c nh a ch t 20h n 2Fh, cho php truy cp
trc tip bng a ch mc bit. B VK cung cp cc lnh c kh nng truy cp ti
vng nh 128 bit ny (nu truy cp dng mc bit th vng ny c a ch c nh
t 00h n 7Fh) mc bit..
- Vng nh cn li gm 80 Byte c a ch t 30h n 7Fh c dnh ring cho ngi
s dng lu tr d liu. y c th xem l vng RAM a mc ch. C th truy cp
vng nh ny bng a ch trc tip hoc gin tip thng qua cc thanh ghi (R0 hoc
R1) dng mc Byte.

28

- Vng nh 128 Byte cao (dnh cho SFR)


Vng nh ny c nh a ch t 80h n FFh, v c truy cp bng a ch trc
tip.

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

thit lp nn 4 ch hot ng giao tip ni tip chun nh sau:

+ Ch 0: D liu ni tip vo v ra s thng qua chn RxD. Chn TxD a ra


xung nhp ng h. 8 bit d liu c truyn/nhn ni tip, vi bit LSB c thc
hin u tin. Tc Baud c c nh bng 1/12 tn s ca b dao ng.

+ Ch 1: 10 bit c truyn (thng qua TxD) hoc nhn (thng qua RxD),
30

trong gm c: 1 bit khi ng (c gi tr 0), 8 bit d liu (u tin l LSB), v 1 bit


dng (c gi tr l 1). Khi nhn, bit dng c chuyn vo RB8 ca thanh ghi SCON.
Tc Baud c th thay i c.

+ 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

+ Ch 3: 11 bit c truyn (thng qua TxD) hoc c nhn (thng qua


RxD) bao gm: 1 bit khi ng (c gi tr 0), 8 bit d liu (u tin l LSB), 1 bit d
liu th 9 c th lp trnh c, v 1 bit dng (c gi tr 1). Trn thc t, ch 3
ging ch 2 mi gc tr tc Baud. Tc Baud ch 3 l kh bin v
c xc nh theo b Timer 1.

32

Trong c 4 ch trn, vic truyn c bt u bi bt k mt lnh no m s


dng thanh ghi SBUF nh l mt thanh ghi ch. Vic nhn c bt u ch 0
khi RI=0 v REN=1. i vi cc ch khc, vic nhn c bt u khi bit REN=1.
2.5.6.3. Cc tc Baud:
+ Tc Baud ch 0 c c nh, v bng Tn s b dao ng/12
+ Tc Baud ch 2 ph thuc vo gi tr ca bit SMOD trong thanh ghi
PCON. Nu SMOD=0 (gi tr sau khi reset), th tc Baud =1/64 tn s ca b dao
ng. Nu SMOD=1 th tc Baud =1/32 tn s ca b dao ng.
Tc Baud ch 2 = (2SMOD*Tn s b dao ng)/64
Trong AT89C51, cc tc Baud ch 1 v 3 do Timer 1 quyt nh, Trong
AT89C52 tc Baud ca cc ch ny c th c quyt nh bi Timer 1 hoc
Timer 2, hoc c hai (mt b timer xc nh tc truyn, b kia xc nh tc
nhn).
33

2.5.6.4. S dng Timer 1 to ra cc tc Baud :


Khi b Timer 1 c dng to tc Baud, th cc tc Baud cc ch
1 v 3 do tc trn ca timer 1 v gi tr ca SMOD quyt nh:
Tc Baud ch 1 v 3 = (2SMOD*(Tc trn ca timer 1))/32
Ngt ca Timer 1 s mt tc dng trong ng dng ny.
Bn thn b Timer c th c thit lp thc hin chc nng thi gian hay b
m bt k mt trong 3 ch hot ng. Trong hu ht cc kiu ng dng, n
thng c thit lp thc hin chc nng thi gian, hot ng ch Autoreload (na byte cao ca TMOD = 0010b). Trong trng hp ny, tc baud c
tnh bng cng thc:
Tc Baud ch 1 v 3 = (2SMOD*Tn s b dao ng)/(32*(12*[256-(TH1)])
Ta c th nhn c cc tc Baud rt thp vi b Timer 1 bng cch lm cho
ngt ca timer 1 c tc dng, v thit lp Timer 1 hot ng nh mt b m thi
gian 16 bit (Na byte cao ca TMOD=0001b). Bng 2.8 lit k cc tc Baud khc
nhau thng c s dng v cch chng c th nhn c t Timer 1.
Tc Baud

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

Bng . Cc tc Baud c to ra khi s dng Timer 1


2.7. C ch ngt trong On-chip AT89C51
- Phn loi ngt trong On-chip:
B AT89C51 c tt c 5 Vectors ngt bao gm: 2 ngt ngoi (/INT0 v /INT1), 2 ngt
ca khi thi gian (Timer 0, 1), v ngt cng truyn tin ni tip.
34

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.

Cc ngt trong, vi ngt Timer/Counter 0, 1 c pht sinh bi c ngt TF0,


TF1. Hai c ngt ny c thit lp khi thanh ghi Timer/Counter thc hin quay
vng, ti thi im S5P2 ca chu trnh my. Khi mt ngt c thc hin th c ngt
tng ng pht sinh ra ngt s b xo bng phn cng trong On-chip.
Ngt cng ni tip c pht sinh bi cc ngt RI, TI, SPIF thng qua phn t
Logic OR, khi chng trnh con phc v ngt c kch hot th cc c ngt pht sinh
tng ng c xo bng phn mm. Cc ngt trong c th c php hoc khng
uc php kch hot bng cch t hoc xo mt bit trong IE.
-.Cc bc thc hin ngt.
Theo ng trnh t, s dng cc ngt trong Flash Microcontroller, cn thc hin cc
bc nh sau:
- t bit EA trong IE mc logic 1.
35

- t bit cho php ngt tng ng trong IE mc logic 1.


- Bt u chng trnh con phc v ngt ti a ch ca ngt tng ng .
(Xem bng a ch Vector ca cc ngun ngt)
Ngoi ra, i vi cc ngt ngoi, cc chn /INT0, /INT1 phi c t mc 1. V tu
thuc vo ngt c kch hot bng mc hay sn xung, m cc bit IT0, IT1 trong
TCON c th cn phi t mc 1.
ITx=0: Kch hot bng mc
ITx=1: Kch hot bng sn xung.
- Mc ngt u tin trong on-chip:
Mi ngun ngt c th c lp trnh ring cho 1 hoc 2 mc u tin bng cch t
hoc xo 1 bit trong IP ca SFR. Mi ngt u tin mc thp c th c ngt bng
ngt u tin mc cao hn nhng khng th ngt bng ngt c mc u tin mc
thp hn c. Mt ngt u tin mc cao c th c ngt bi bt k ngun ngt
no khc.
Nu c yu cu ngt ca 2 mc u tin cng nhau (cng 1 lc), yu cu ca mc
u tin cao hn s c phc v (Ngt no c mc u tin cao hn s c phc v).
Nu cc yu cu ngt c cng mc u tin, th th t quay vng bn trong s quyt
nh ngt no c phc v.
Th t u tin ngt t cao xung thp ca AT89C51 nh sau:
IE0, TF0, IE1, TF1, RI hoc TI.
-. Nguyn l iu khin ngt ca AT89:
Cc c ngt c thit lp ti thi im S5P2 ca mi chu k my. Chu k my tip
theo sau chu k my c c ngt c thit lp, th chng trnh con c thit lp khi
c lnh gi LCALL. Lnh LCALL pht sinh nhng li b cm hot ng khi gp cc
tnh hung sau:
a- ng thi c ngt vi mc u tin cao hn hoc bng ngt ang phc v.
(Mt ngt c mc u tin bng hoc cao hn ang sn sng c phc v)
b- Chu k my hin hnh khng phi l chu k my cui cng ca lnh ang
thc hin.
c- Lnh ang thc hin l RETI hoc bt k lnh no ghi vo thanh ghi IE hoc
IP.

36

H thng ngt ca AT89C51


Bt k mt trong 3 iu kin ny xut hin s cn tr vic to ra LCALL i vi
chng trnh phc v ngt. iu kin 2 m bo rng, lnh ang thc hin s c
hon thnh trc khi tr ti bt k chng trnh phc v no. iu kin 3 m bo
rng, nu lnh ang thc hin l RETI hoc bt k s truy cp no vo IE hoc IP, th
t nht mt lnh na s c thc hin trc khi bt k ngt no c tr ti. Chu
trnh kim tra vng c lp li vi mi chu trnh my, v cc gi tr c kim tra l
cc gi tr m xut hin thi im S5P2 ca chu trnh my trc . Nu mt ch
th ngt c hiu lc nhng khng c p ng v cc iu kin trn v nu ch th ny
vn cha c hiu lc khi iu kin cn tr c loi b, th ngt b t chi ny s
khng c phc v na.
LCALL do phn cng to ra s chuyn ni dung ca b m chng trnh vo
ngn xp (Nhng khng ghi vo PSW) v np li cho PC mt a ch ph thuc vo
ngun gy ngt ang c phc v, nh bng di y:

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

ngoi(chng hn /INT0) c kch hot theo mc.


Nu chn /INT0 c duy tr mc thp, th CPU s chuyn ngay n th tc
ngt ngoi 0 v dng cho ti khi INT0 c nhn xung t thp ln cao ri xung
thp. Sau n s thc hin lnh RETI, tr li nhim v chng trnh, thc hin mt
lnh, v ngay sau nhp li th tc ngft ngoi 0 i xung nhp tip theo ca
P3.2. Mi bc ca nhim v chng trnh c thc hin vo mi thi im chn
P3.2 c nhn xung.
2.8 Kt ni c bn ca vi iu khin 8051

Chng 3: C cho vi iu khin 8051


3.1 Keil C cho vi iu khin
3.1.1 Keil Compiler C51 bao gm phn m rng (cho ANSI C) cho:
39

cc vng v kiu b nh ca 8051

Cc ch nh

Cc kiu nh c bit

Cc kiu bin d liu c bit

Bin Bit v bin bit d liu

Cc thanh ghi c bit

Con tr

Thuc tnh hm

3.1.2Nhng kiu d liu ring ca C51


Nhng kiu d liu ring ca C51
- bit
static bit done_flag=0;
- sbit
sbit EA= oxAF; /*defines EA to be the SFR bit at 0xAF*/
- sfr(Special Function Registers, 0x80-0xFF)
sfr P0 = 0x80; /* Port-0, address 80h*/
sfr P2 = 0xA0; /* Port-2, address 0A0h */
- sfr16
sfr16 T2=0xCC; /* Timer 2: T2L 0CCh, T2H 0CDh
Cc ch nh (Memory Models)
- SmallModel Tt c cc bin c mc nh xp xp ht trong b nh d liu trong
Tt c cc i tng, nh stack phi c t trong internal RAM
- Compact Model Tt c cc bin c mc nh xp xp trong mt page ca external data memory
C th c cung cp ln nht 256 bin
Chm hn ch SmallModel
- Large Model Tt c cc bin c mc nh xp xp trong external data memory
Data Pointer (DPTR) c s dng nh a ch
40

Truy nhp b nh khng hiu qu


To ra nhiu m hn cc ch small v compact model
- Cc con tr b nh c bit (Memory-specific Pointers)
Bao gm cc kiu nh c bit trong con tr
C th c s dng truy nhp cc vng nh nh trc
char data *str;
int xdata *numtab;
long code *powtab;
B nh chng trnh

code c th m rng ti 64Kbyte b nh chng trnh

char code text[] = ENTER PARAMETER;

Truy nhp bi lnh MOVC @A+DPTR

B nh chng trnh th ch cho php c (trong chng trnh)v khng th ghi


vo khi chng trnh ang thc hin.
B nh d liu
C ti 256 bytes ca b nh d liu trong
- data : Vng nh 128 bytes u tin ca internal memory
char data var1;
- idata : Tt c vng nh 256 bytes ca internal data memory
float idata x,y,z;
- bdata : Vng nh 16 bytes ca vng nh nh a ch bit ca internal data
memory (20h ti 2Fh)
char bdata flags;
B nh d liu m rng
- xdata ch bt k vng nh no trong khng gian 64KByte ca vng nh d liu
m rng unsigned long xdata array[100];
- pdata ch 1 page ca 256 bytes ca vng nh m rng
unsigned char xdata vector[10][4][4];
Vnh nh cc thanh ghi c bit
- SFRs c m t nh cc bin trong C
41

- sfr (ging nh t kha char hoc int)


sfr P0 = 0x80; /*Port0, address 80h*/
- sfr16 truy nhp 2 SFRs nh 16-bit SFR
- sfr16 T2 = 0xCC /*Timer 2; T2L 0CCh, T2H 0CDh)
- sbit cho php truy nhp ti tng bit ring ca cc thanh ghi SFR
sfr PSW=0xD0;
sfr IE=0xA8;
sbit EA=IE^7;
sbit OV=0xD0^2;
sbit CY=0xD7;
3.1.3 Hm vi phn nh ngha m rng.
Trong KeilC c hm vi phn nh ngha m rng cho php :
nh r cc hm nh th tc ngt
Chn register bank s dng
Chn ch nh
Hm quy
Cu trc hm m rng:
[return_type] funcname ([args]) [{small|compact|large}][reentrant][interrupt n][using n]
Trong :
small, compact, large Ch nh
reentrant - Hm quy
interrupt n- Ngun ngt (bng vector ngt)
using - Chn bank thanh ghi

Truyn tham s qua cc thanh ghi:


Argument

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

MSB in R6, LSB in R7


MSB in R4, LSB in R7
bit IEEE format-32
,Memory type in R3
MSB R2, LSB R1

nh ngha ch nh cho mt hm:


#pragma small /*default small model */
extern int calc (char i, int b) large reentrant;
extern int func (char i, float f) large;
extern void *tcp (char xdata *xp, int ndx) small;
int mtest (int i, int y){ /*small model*/
return (i*y + y*i + func(-1, 4.75);}
int large_func (int i, int k) large { /*large model*/
return (mtest(i,k) * 2)}

3.1 Project 1 Led n


3.1.1 Mch v nguyn ly hot ng
y l s nguyn l ca 1 led. Led n c s dng nh mt phng tin
truyn tn hiu, c nhiu nh sn xut Led vi cc hnh dng kch thc v mu sc
khc nhau.
43

m bo Led c sng th dng qua Led phi c m bo ln hn hoc


bng dng in hnh, v cng phi ch y m bo dng in qua Led phi nh hn
dng in max. Vi mi loi Led, in p ri trn Led s khng i thng khong t
1.4 ti 4 V do ngi ta thng phi mc thm mt in tr c gi tr c tnh theo
cng thc cho trn hnh v:

Color

Type

Infrared
Red
Red
Red
Orange
Green
Yellow
Blue
White

Standard
Super Bright
Low Current
Low Current
-

Typical current Maximal current Voltage drop Ud


Id (mA)
30
20
20
2
10
2
20
20
25

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

Mt Led n c ni vi chn ca vi iu khin nh hnh bn, gi s chn l P1.2


vy lm th no iu khin cho Led sng, tt:

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

3.2.2 Chng trnh mu


/*----------------------------------------------------------------------------nh ngha P1.2
-----------------------------------------------------------------------------*/
sbit Led1 = P1^2;

/* SFR cho P1.2 */

/*----------------------------------------------------------------------------Chng trnh chnh MAIN


-----------------------------------------------------------------------------*/
void main (void)
{
/*----------------------------------------------Vng lp sau lin tc cho Led1 sng ri tt
-----------------------------------------------*/
while (1)
{
Led1=0; /*Led sang*/
Delay(500);/*Giu cho led sang de nhin thay*/
Led1=0; /*Tat Led*/
Delay(500);/*Giu cho led tat de nhin thay*/
}
}
/*-----------------------------------------------------------------------------*/

46

3.3 Project 2 dy 8 Led n

3.3.1 Nguyn l hot ng:


Led ni t chn vk xung t vy nu chn vi iu khin 5V th led s sng, nu
chn vi iu khin 0V th led s ti. in p 5V v sao led khng chy m li cn sng
yu? V vi iu khin 8051 ch c th cung cp dng nh khng 10mA 1 chn
nn led sng yu. Cn nu mun led sng p th lp nh sau t dong 5V chn di
ca led - chn ngn ca led chn vi iu khin.
3.3.2 Lp trnh :
Trc ht iu khin 1 led tng Led mt. iu khin 1 led th ch vic gn chn ni
vi led d bng 0 hoc 1, th in p chn s l 0V hoc 5V, ty vo in p n
s sng hoc ti.
/*==================================================== Mo ta:
ieu khien led don.
Phan cung:

8 led noi tu +5V qua dien tro han dong vao 8 chan cong 1.

Thach anh: 12 Mhz


=====================================================*/
/***********************************************************/
#include <AT89X51.H>
47

/************************************************************/
/*******************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

Led7= 0;// Tat led 7


Delay(500);// Goi ham tao thoi gian tre
Led8= 1;// Cho led 8 sang
Delay(500);// Goi ham tao thoi gian tre
Led8= 0;// Tat led 8
Delay(500);// Goi ham tao thoi gian tre
}
}
Vi chong trnh ny chng ta c th cho th t cc led tt bt khc nhau c cc
kiu nhy khc nhau.
3.3.3 iu khin ra c cng
Nu cc bn nhm chn vi vic iu khin tng chn 1 vit code rt tn cng cc bn
c th xut gi tr ra c cng. Trc ht cc bn cn nm cc iu nh sau:
- Mt cng c 8 bit t hp, 8bit c 2 = 256 trng thi. Khi cc bn a ra cng 1 gi tr
a (thp phn) t 0 n 255 th s a s c i ra h nh phn ri a ra cc bit( chn)
ca cng. V d:
Nu c lnh:
P1=1;
v 1(10) nn chn P1_0(bit 0) s bng 1(5V) cn li cc t P1_1(bit 1) n P1_7(bit 7)
s bng 0(0V).
P1=10;
v 10(10) = 0000 0001 = 0000 1001(2)(2) th s c P1_0 v P1_3 bng 1(5V) cn li
cc chn khc s l 0(0V).
- Cc bn c th a ra cng 1 gi tr s hex t 0 n ff tng ng t 0 n 255. Cc
s c s trong h hex. (HEX)0 1 2 3 4 5 6 7 8 9 A B C D E F (10)
12

10 11

13 14 15 Cch s hex ra s thp phn: c s hex : N=abf1 i ra h s 10

N(10)=1.160 + 15.161+ 11.162+ 10.163(16). i s nh phn sang hex: Gp 4 s nh


phn thnh 1 s hex: V d: 0010 0001(2)(16) 1 4 s u c bit 1 = 1 nn 1x20= 2
4 s sau c bit 0 =1 nn 1x2=1. Cch a ra nh sau:
V d lnh P1=1; tong dong vi P1=0x01;
P1=10; tong ong vi P1=0x0A;
50

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

Delay (1000);// Tre 1 khoang thoi gian


P1=0x80;// Bat led 8
Delay (1000);// Tre 1 khoang thoi gian
P1=0x00;// Tat led 8
Delay (1000);// Tre 1 khoang thoi gian
}
}
Nh vy g code vn mi tay lm d dt c mc ch 8 n nhy lin tip cc bn
c th lm nh sau:
/******************Ham chinh****************************/
void main(void) {
unsigned char n; // Khai bao them bien n cho vong for
while(1)// Lap vo han
{
P1=0x01;// Bat led 1
for(n=0 ; n<8;n++)// Lap 8 lan
{
P1=P1<<1; // Dich trai 1 bit
Delay (1000);
}
}
}
/***********************************************************/
Debug quan st s thay i ca cng 1 d thy c tc dng php dch bit xang tri.
hiu thao tc xut ra cng, chn, cc cc bn lm 1 v d na nh sau:
/***********************Ham chinh*******************************/
void main(void) {
unsigned char n; // Khai bao them bien n cho vong for
while(1)// Lap vo han
{
P1=0x01;// Bat led 1
for(n=0 ; n<256;n++)// Lap 8 lan
52

{
P1=n; // Dich bit xang trai
Delay (5000);
}
}
}
/****************************************************************/
Debug thy s thay i cc cng.

3.4 Project 3: iu khin Led 7 thanh


3.4.1 Hnh dng v cu to:

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:

Mch lp s dng led Ant chung nhu sau:

53

3.4.2 Nguyn l hot ng:


Khi cm ngun vo mch tt c cc chn ca cc cng IO ca VK l 5V( Nu cng
P0 khng lp in tr treo th s l 0V). Nhn s mch khng c chnh lch in p
nn khng c n no sng. Chng ta mun sng thanh no ch vic a ra in p 0V
chn vi iu khin ni vi thanh .
Thanh hin
hin th s 1:
hin th s 2:

Thanh tt
B,C cc thanh cn li

Gi tr(P1)
1111 1001

A,B,D,E,G cc thanh cn li

1010 0100 .

hin th s 8: Tt c cc thanh khng thanh no

1000 0000

Bt th 8 P1.7 khng dng.


Ngoi ra led 7 thanh cn c th hin th 1 s ch
hin th ch B: Ging s 8
Hin th ch A:

A,B,C,E,F,G D 1000 1000

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

3.5 Phm nhn


3.5.1 m s ln phm bm gii hn t 0 n 9 hin th ra led 7 thanh.

61

3.5.1.1Nguyn l hot ng:


- Phn nt bm: (khi khng c t 104) ban u chn P1.0 mc cao +5V, nu bm nt
2 u nt bm thng vi nhau. Chn P1.0 thng vi GND. Led sng do c chnh p.
Chn P1.0 thng t. Nu c t 104 t in c np in, khi bm nt t in s
phng in t cc dong sang cc m lm chn P1.0 thng vi GND nhng lu v 0 V
hn 1 cht.
- Do tip im c kh ca nt bm nn khi bm nt n s c 1 s xung in. T 104 c
tc dng gim nhiu . T 104 cng c th b i khng lp v ta c th kh nhiu
bng phn mm.
3.5.1.2 Lp trnh:
Code bi trc gi nguyn: son thm mt s hm nh sau hm c phm bm.
Hm c s ln n phm
y l code cc hm b sung:
unsigned char i=0;// Khai bao them bien toan cuc de dem so lan an nut
unsigned char Docnutnbam(void)// Ham tra lai gia tri unsigned char
{ if( P1_0 ==0)// Neu nut duoc bam
{
delay(300);// Tre 1 khoang thoi gian qua xung nhieu
while(P1_0 ==0) // Cho toi khi nha tay khoi nut bam
{
;//Khong lam gi
}
i++;// Nha tay thi tang i
if( i ==10) i=0;// Quay vong gia tri cua i
}
return i;
}
void hienthisolannhanphim(unsigned char solan) {
switch(solan)// Tuy vao so lan
{
case 0:
62

{
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

3.5.2.1 Nguyn l qut phm:


- V sao mch phm u theo ma trn. Nu c t 16 nt bm bnh thng phi
dng 16 chn vi iu khin. Nu u theo dng ma trn th ch mt 8 chn ta cng c
th c c 16 phm bm.
- C 2 cch qut phm theo ct v theo hng, ti chn cch qut theo ct, qut theo
hng cc bn c th lm tong t.
- Bc 1 : Ta a chn P1.0 ni vi ct 1 xung 0V.Ri ta kim tra gi tr logic ca
cc chn P1.4,P1.5,P1.6,P1.7.Nu phm 1 c bm th hng 1_ P1.4 s c gi tr bng
0.
Nu phm 2 c bm th hng 2_ P1.5 s c gi tr bng 0. Nu phm 3 c bm th
64

hng 3_ P1.6 s c gi tr bng 0. Nu phm 4 c bm th hng 4_ P1.7 s c gi tr


bng 0. Ta cn c vo xc nh xem phm no c bm.
- Bc 2 : Ta a chn P1.1 ni vi ct 2 xung 0V.Ri ta kim tra gi tr logic ca
cc chn P1.4,P1.5,P1.6,P1.7.Nu phm 5 c bm th hng 1_ P1.4 s c gi tr bng
0.
Nu phm 6 c bm th hng 2_ P1.5 s c gi tr bng 0. Nu phm 7 c bm th
hng 3_ P1.6 s c gi tr bng 0. Nu phm 8 c bm th hng 4_ P1.7 s c gi tr
bng 0. Ta cn c vo xc nh xem phm no c bm. Tng t ta thc hin
cho cc ct cn li. Ta s dng cu lnh if kim tra.
3.5.2.2 Lp trnh:
- To 1 project mi, copy phn hin th cc s 09 cc ch AY ca bi trc. Ri
b sung cc hm sau. Hm hin th phm n.
void phim_duoc_an(unsigned char phim) {
switch(phim)// Tuy vao so lan
{
case 0: {
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: {
65

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;

//Quet 4 hang phim

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

if(P1_6==0) giatribanphim=2+4*x;// La may ma gia tri cua


if(P1_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung.
}
}
return(giatribanphim);
} Hm Main.
void main(void) {
unsigned char i;
while(1) {
i=quetbanphim();
phim_duoc_an(i);
}
}

3.6 Ghp ni vi LCD

67

3.6.1 Nguyn l hot ng ca LCD:


- Chn VCC, V v VSS: Cc chn VEECC, V: Cp dong ngun - 5v v t
tong ng th V0 c dng iu khin tong phn ca LCD. - Chn chn thanh
ghi RS (Register Select): C hai thanh ghi trong LCD, chn RS(Register Select) c
dng chn thanh ghi, nh sau: Nu RS = 0 th thanh ghi m lnh c chn cho
php ngi dng gi mt lnh chng hn nh xo mn hnh, a con tr v u dng
v.v Nu RS = 1 th thanh ghi d liu c chn cho php ngi dng gi d liu
cn hin th trn LCD.
- Chn c/ ghi (R/W): u vo c/ ghi cho php ngi dng ghi thng tin ln
LCD khi R/W = 0 hoc c thng tin t n khi R/W = 1.
- Chn cho php E (Enable): Chn cho php E dc s dng bi LCD cht d
liu ca n. Khi d liu c cp dn chn d liu th mt xung mc cao xung thp
phi c p n chn ny LCD cht d liu trn cc chn d liu. Xung ny phi
rng ti thiu l 450ns.
- Chn D0 - D7: y l 8 chn d liu 8 bt, c dng d gi thng tin ln LCD
hoc c ni dung ca cc thanh ghi trong LCD. hin th cc ch ci v cc con s,
chng ta gi cc m ASCII ca cc ch ci t A n Z, a n f v cc con s t 0 - 9
n cc chn ny khi bt RS = 1.
Cng c cc m lnh m c th c gi n LCD xo mn hnh hoc a con
tr v u dng hoc nhp nhy con tr.
- Ch :Chng ta cng s dng RS = 0 kim tra bt c bn xem LCD c sn
sng nhn thng tin. C bn l bt D7 v c th c c khi R/W = 1 v RS = 0 nh
sau:
Nu R/W = 1, RS = 0 khi D7 = 1 (c bn 1) th LCD bn bi cc cng vic bn
trong v
s khng nhn bt k thng tin mi no. Khi D7 = 0 th LCD sn sng nhn
thng tin mi. Lu chng ta nn kim tra c bn truc khi ghi bt k d liu no ln
LCD.
3.6.2 M (Hex) Lnh n thanh ghi ca LCD
1: Xo mn hnh hin th
68

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

/* RS chon thanh ghi


=0 ghi lenh
=1 ghi du lieu
RW doc ghi
=0 ghi
=1 doc
E cho phep chot du lieu
xung cao xuong thap toi thieu 450 ns.
Bit co ban D7
khi RS=0 RW=1 neu D7=1 LCD ban
D7=0 LCD san sang.
*/
sfr LCDdata = 0xA0;// Cong 2 , 8 bit du lieu P0 co dia chi 0x80, P1 0x90 , P2 0xA0
sbit BF = 0xA7; // Co ban bit 7 sbit RS = P3^5; sbit RW = P3^4; sbit EN = P3^3;
- Vit 1 s hm iu khin LCD nhu sau:
* Hm kim tra LCD c bn hay khng:
void wait(void) {
long n = 0;
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=1;// Doc tu LCD
LCDdata=0xFF;// Gia tri 0xFF
while(BF){
n++;
if(n>100) break;
}// Kiem tra co ban
// Neu ban dem n den 100 roi thoat khoi
while EN=0;// Dua xung cao xuong thap de cho
RW=0;// Doc tu LCD
}
* Hm iu khin LCD thc hin 1 lnh:
void LCDcontrol(unsigned char x) {
70

EN=1;// Dua chan cho fep len cao


RS=0;// Chon thanh ghi lenh
RW=0;// Ghi len LCD
LCDdata=x;// Gia tri x
EN=0;// Xung cao xuong thap
wait();// Doi LCD san sang
}
Hm c 1 bin u vo l cc gi tr trong bng m lnh ca LCD.
* Hm khi to LCD:
void LCDinit(void) {
LCDcontrol(0x30);//Che do 8 bit.
LCDcontrol(0x30);
LCDcontrol(0x30);
LCDcontrol(0x38);// 2 dong va ma tran 5x7
LCDcontrol(0x0C);// Bat con tro
LCDcontrol(0x06);// Tang con tro xang fai
LCDcontrol(0x01);// Xoa man hinh
}
* Hm l nh cho LCD hin th 1 k t :
void LCDwrite(unsigned char c) {
EN=1;// Cho phep muc cao
RS=1;// Ghi du lieu
RW=0;// Ghi len LCD
LCDdata=c;// Gia tri C
EN=0;// Xung cao xuong thap
wait();// Cho
}
Hm c 1 bi n du vo l m ca k t trong bng ASCII.
* Hm l nh cho LCD hin th 1 xu k t ( dng ch):
void LCDputs(unsigned char *s,unsigned char row) {
unsigned char len;
if(row==1)
71

LCDcontrol(0x80);// dich con tro ve dau dong 1


else
LCDcontrol(0xC0);// dich con tro ve dau dong 2
len=strlen(s);// Lay do dai bien duoc tro boi con tro
while(len!=0)// Khi do dai van con
{
LCDwrite(*s);// Ghi ra LCD gia tri duoc tro boi con tro
s++;// Tang con tro
len--;// Tru do dai
}
}
Hm hin th 1 s integer:
void LCDwritei(int d) {
unsigned char i,j,k,l;
i=d%10;// Chia lay phan du, duoc chu so hang don vi
d=d/10;// Chia lay phan nguyen, duoc nhung chu so da bo hang don vi
j=d%10;// Duoc chu so hang chuc
d=d/10;// Nhung chu so da bo hang don vi va hang chuc
k=d%10;// Duoc hang tram
l=d/10;// Duoc hang nghin
LCDwrite(48+l);// Hien thi ki tu trong bang ascii
LCDwrite(48+k);// Trong bang ascii so 0 co co so thu tu la 48
LCDwrite(48+j);
LCDwrite(48+i);
}
Hm c 1 bin u vo l s int ln dn hng nghn cn hin th.
* Hm tr:
void delay(long time) {
long n;
for(n=0;n<time;n++) ;
}
* Hm main:
72

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

Nhim v: To ra xung c d rng thay i, 10 cp, tn s 1Khz, iu khin tc


ng c (10 cp tc ).
3.7.2 Lp trnh:
- Cch to xung c rng thay i bng VK.
+ Cch 1: Nh cc bn iu khin nhp nhy 1 con led, l to ra 1 xung 1 chn
ca vi iu khin, nhng xung c rng c nh, tn s ln, cch bn c th iu
chnh li hm delay tn s ca n ng 1 Khz. Tuy nhin v l dng hm delay nn
trong
thi gian c xung ln 1(5V) v thi gian khng c xung(0V) vi iu khin khng lm
g c, hn na to xung bng vic delay m cc bn c nhu cu cn 2 b pht xung 2
knh, c cng tn s m khc rng xung th tr nn rt kh khn. Cho nn chng ta
dng b nh thi Timer ca vi diu khin trong trng hp ny rt tin.
+ Cch 2: Dng ngt Timer ca b vi iu khin. Trc ht nhc li v ngt ca vi
iu khin:
+ Ngt l g ? tr li cu hi ny ti xin trch on v ngt timer:
- Hm ngt: Cu trc: Void Tnhm(void) interrupt ngunngt using bangthanhghi
{ // Chuong trinh phuc vu ngat o ay }
+ Hm ngt khng uc php tr li gi tr hay truyn bin vo hm.
+ Tn hm bt k.
+ interrupt l t kha phn bit hm ngt vi hm thung.
+ Ngun ngt t 0 ti 5 theo bng vector ngt.
+ Bng thanh ghi trn ram chn t 0 n 3.
Ty theo bn vit hm ngt cho ngun no bn chn ngun ngt t bng sau:

- 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

- Hm ngt khc hm bnh thung ch no. Hm bnh thung v d hm delay, c khi


bn gi n th n s uc thc hin, c ngha l n c v tr c nh trong tin trnh
hm main, c ngha l bn bit n xy ra khi no. Cn hm ngt th khng c tin trnh
c nh, iu kin ngt c th xy ra bt k lc no trong tin trnh hm main v c khi
no c iu kin ngt th hm ngt s uc gi t ng.
- s dng ngt ta phi lm cc cng vic sau:
1) Khi to ngt: dng ngt no th cho php ngt hot ng bng cch gn gi tr
tng ng cho thanh ghi cho php ngt IE( Interrupt Enable):
IE l thanh ghi c th x l tng bt. V d : bn mun cho php ngt timer 1 bn dng
lnh: ET1=1; Khng cho php na bn dng lnh : ET1=0; Hoc bn c th dng lnh
IE= 0x08; th bit 3 ca thanh ghi IE tc(IE) s ln 1. Nhng cch th nht tin hn.
2) Cu hnh cho ngt: Trong 1 ngt n li c nhiu ch v d: vi ngt timer. Bn
phi cu hnh cho n chy ch no, ch timer hay counter, ch 16 bit, hay 8
bit, bng cch gn cc gi tr tuong ng cho thanh ghi TMOD( Timer MODe).
3)Bt u chng trnh c ngt:
-Truc khi bt u cho chy chuong trnh ta phi cho php ngt ton cc uc xy ra
bng cch gn EA (Enable All interrupt) bng 1, th ngt mi xy ra.
-Thng th ngay vo u chng trnh (hm main) trc vng while(1) chng ta t
cng vic khi to, cu hnh v cho php kim tra ngt.
void khoitaotimer0(void)// Ham khoi tao
{
EA=0;// Cam ngat toan cuc
TMOD=0x02;// Timer 0 che do 2 8 bit auto reload
TH0=0x9B;// Gia tri nap lai 155 doi ra so hex
TL0=0x9B;// Gia tri khoi tao 155 doi ra so hex
ET0=1;// Cho phep ngat timer 0
EA=1;// Cho phep ngat toan cuc
TR0=1;// Chay timer 0 bat dau dem so chu ki may
}

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

else P2_0=0;// Neu dem = phan tram xung


Cu lnh ny kim tra nu m nh hon phantramxung th s ua ra cng gi tr 1,
bng hoc ln hn s a ra gi tr 0. Khi vo chng trnh chnh ta ch vic thay i
gi tr bin phantramxung th rng xung s thay i. * Hm main:
void main(void) {
khoitaotimer0();
while(1) {
phantramxung=9;
delaylong(20000);
phantramxung=4;
delaylong(20000);
}
}
Gi s khi cc bn gn
phantramxung=4;
Th c mi 100uS ngt xy ra 1 ln, v kim tra
bin dm. Ln u m=1 <4 nn gi tr P2_0 = 1 mc cao, ln th 2 , 200 uS, dem
=2<4 P2_0 = 1 mc cao, ln th 3, 300uS, dem=3<4, P2_0=1 mc cao, ln th 4,
400uS, dem =4 <4 sai, P2_0=0, bt du xung mc thp, c xung t cao xung thp,
dem = 5<4 sai , P2_0=0 mc thp, , dem =10 <4 sai P2_0 mc thp d 1000 uS ,
400uS cao, 600uS
thp quay vng dem=0, ngt ln th 11, dem=1 < 4 , P2_0=1 mc cao, c xung thp
ln cao. PWM 2 chn P2_0 v P3_5, cc bn khai bo thm 1 bin
phantramxung2 v ua thm dng l nh sau vo hm ngt. if(dem<phantramxung)
P3_5=1;// Neu bien dem < phan tram xung thi ua gia tri 1 ra //chan, xung 5V
else P3_5=0;// Neu dem = phan tram xung

77

3.8 Ghp ni Matrix Led


- Dng Led:

3.8.1 S cu to:

3.8.2 S kt ni Matrix Led 8x8:

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

led sng. Ging nh qut bn phm, a in p 0V ra tng ct ni vi cng 0. Nh


vy s c 8 gi tr: 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F phi a vo
1 mng 8 phn t, ri sau a vo 1 vng for tng dn 1 bin tng phn t mng
ct[8]. Vi mi ln 1 chn cng 0 ln 5V ta dng cng 2 a ra 1 gi tr 8 bt iu
khin trong 1ct nhng n no sng. V d mun hng 1 v hng 3 sng th hng 1 v
3 c gi tr 5V cn cc hng khc 0V, ta c gi tr 8 bt sau: 0x05 ( 1010 000). Ti
mi thi im ch c mt s n trn 1 ct sng, nhng do ta qut 8 ct vi tn s
nhanh, v mt c hin tung lu nh nn ta thy trong 1 thi im ta thy ton b k t.
Vi 8 ct ln lut bng 5V ta phi a ra tng ng 8 gi tr 8 bit ra cng 2, do ta
fi lu 8 gi tr vo 1 mng 8 k t_ kytu1[8], ta s vit cc k t trn 7 ct. mi
k t s cch nhau 1 ct khng sng. Ta khai bo mng kytu1[9] c 9 phn t v phn
t u tin c gi tr y ra cng 2 l 0xff tt ton b ct .
Qu trnh iu khin hin th nh sau: Ct 1, hng 1, ct 2 hng 2, , ct 8 , hng 8.
lm ch chy: Thm 1 bin vo iu khin th t hin th hng. Hin 1 ch
trn led nh trn a ra: Ct 1, hng 1, ct 2 hng 2, , ct 8 , hng 8. Mun ch
dch chuyn sang tri ta hin th nh sau: Ct 1, hng 2, ct 2 hng 3, , ct 7,
hng 8,ct 8 , hng 1 k t sau. Ct 1, hng 3, ct 2 hng 4, , ct 7 hng 1 k t
sau,ct 8 , hng 2 k t sau.
3.8.4 Lp trnh
#include <REGX51.H> /* Cot tu P2.0 den P2.7 Hang tu P0.0 den P0.7 De quet dua
muc logic 5v lan luot ra cong P2 */
/* Ham tre */
void delay(long time) {
long n;
for(n=0; n<time; n++) {
;}
}
unsigned char kytu1[9];// Mang 9 phan tu chua gia tri cac hang day ra cong 2 unsigned
char k=0;// Bien xac dinh cac ky tu
/* Ham nap gia tri hien thi cac ky tu vao mang kytu1 co 8 gia tri dua ra va 1 gia tri
khong bat den nao de cac ky tu cach nhau 1 cot */
80

void mahoa(unsigned char x) {


switch(x) {
// Dau trang
case 0: {
kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00; kytu1[4]=0x00;
kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break;
} // Chu M
Case 1: { kytu1[0]=0x00; kytu1[1]=0xFF; kytu1[2]=0x02; kytu1[3]=0x04;
kytu1[4]=0x08; kytu1[5]=0x04; kytu1[6]=0x02; kytu1[7]=0xFF; kytu1[8]=0x00;
break;
} // Chu T
case 2: {
kytu1[0]=0x00; kytu1[1]=0x01; kytu1[2]=0x01; kytu1[3]=0x01; kytu1[4]=0xFF;
kytu1[5]=0x01; kytu1[6]=0x01; kytu1[7]=0x01; kytu1[8]=0x00;
break;
} // Chu C
case 3: {
kytu1[0]=0x00; kytu1[1]=0x7E; kytu1[2]=0x81; kytu1[3]=0x81; kytu1[4]=0x81;
kytu1[5]=0x81; kytu1[6]=0x42; kytu1[7]=0x00; kytu1[8]=0x00;
break;
} // Dau trang
case 4: {
kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00; kytu1[3]=0x00; kytu1[4]=0x00;
kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00; kytu1[8]=0x00;
break;
}
}
} /* Ham quet led ma tran_ vua hien thi vua dich ky tu dan sang trai*/
void hienthi(void) {
unsigned char n,m,lap;
unsigned char cot[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
81

// Cac phan tu quet cot


for(m=0; m<8 ; m++)// Dich hien thi
{ for(lap=0; lap<10; lap ++) // Lap hien thi
{ for(n=0; n<8 ; n++)// Quet cot
{
if((n+m)<9 )// Neu n+m < 9 hien thi ky tu 1
{
mahoa(k); // Nap cac gia tri ma hoa ky tu dua ra cac hang (Cong P0)
P2=cot[n]; // Day gia tri 5V ra cong P2 (cac cot)
P0=kytu1[n+m];// Day cac gia tri cac hang (ma hoa ky tu) ra cong P0(cac hang)
delay(45);// Tre du de led sang
}
if((n+m) > 7)// Neu n+m >7 hien thi ky tu 2 {
mahoa(k+1);// Nap gia tri ma hoa ky tu tiep de dua ra cac hang(Cong P0)
P2=cot[n];// Day gia tri logic 5V ra cong P2(cac cot)
P0=kytu1[n+m-8];// Day cac gia tri cac hang (ma hoa ky tu) ra cong P0(cac hang)
delay(45);// Tre du de led sang
}
P2=0x00;// Day cac cot xuong muc thap
P0=0x00;// Dua cac hang xuong thap de tat toan bo cac led.
}
}
}
}
void main(void) {
while(1)// Vong lap vo han.
{
hienthi(); // Hien thi 2 ky tu dau tien dau trang va chu M
k=k+1; // Tang k de hien thi chu M va chu T lan tiep
if(k==4) k=0;// Quay vong hien thi
}
}
82

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

2.3.1 Php ton s hc hai ngi

.8

2.3.2.Php quan h v logic 9


2.3.3. S chuyn i kiu9
2.3.4 Php tng gim 10
2.3.5 Cu lnh gn 10
2.3.6. Biu thc iu kin..11
2.4 Cc ton t iu khin chng trnh ..11
2.4.1 Cu trc iu khin if ..11
2.4.1.2 Cu trc r nhnh if dng khuyt. 11
2.4.1.2. Cu trc r nhnh if dng dy 11
2.4.2 Cu trc iu khin switch .11
2.4.3 Cu trc lp while 12
2.4.4 Cu trc lp do...while 12
2.4.5 Cu trc lp for 12
2.5 Hm, lp trnh hng hm .13
2.5.1 Cch xy dng mt hm ..13
2.5.2 S hot ng ca mt hm ..13
2.5.2.1 Bin mng ng 14
2.5.2.2 Bin mng ngoi ...14
2.5.2.3 Bin mng tnh .14

Chng 2: n li v vi iu khin AT89C51


2.1. S chn tn hiu ca 80C51/AT89C51. 15
83

2.2. S khi ..16


2.3. Cc thanh ghi chc nng c bit. .17
2.4. Khi to thi gian v b m (Timer/Counter). 24
2.5. B nh chng trnh v b nh d liu ni tr. 27
2.6. Nguyn l truyn tin ni tip ca AT89C51 30
2.5.6.3. Cc tc Baud ..34
2.5.6.4. S dng Timer 1 to ra cc tc Baud .35
2.7. C ch ngt trong On-chip AT89C51 36
2.8 Kt ni c bn ca vi iu khin 8051 40

Chng 3 C cho vi iu khin 8051


3.1 Keil C cho vi iu khin .41
3.1.1 Nhng kiu d liu ring ca C51 41
3.1.2 Hm vi phn nh ngha m rng 43
3.2 Project 1 Led n .45
3.2.1 Mch v nguyn ly hot ng 45
3.2.2 Lp trnh ...47
3.3 Project 2 dy 8 Led n 48
3.3.1 Nguyn l hot ng ..48
3.3.2 Lp trnh ..48
3.3.3 iu khin ra c cng ...51
3.4 Project 3 iu khin Led 7 thanh .54
3.4.1 Hnh dng v cu to 54
3.4.2 Nguyn l hot ng .55
3.4.3 Lp trnh ..55
3.5 Phm nhn ..62
3.5.1 m s ln phm bm gii hn t 0 n 9 hin th ra led 7 thanh. ....62
3.5.1.1Nguyn l hot ng: 63
3.5.1.2 Lp trnh ...63
3.5.2 c ma trn phm ................................................................................................65
3.5.2.1 Nguyn l qut phm: .......................................................................................65
3.5.2.2 Lp trnh ...........................................................................................................66
3.6 Ghp ni vi LCD .................................................................................................68
84

3.6.1 Nguyn l hot ng ca LCD ...........................................................................69


3.6.2 M (Hex) Lnh n thanh ghi ca LCD ............................................................69
3.6.3 Lp trnh ..............................................................................................................70
3.7 iu khin ng c DC .........................................................................................74
3.7.1 Mch nguyn ly ..................................................................................................74
3.7.2 Lp trnh ..............................................................................................................75
3.8 Ghp ni Matrix Led .............................................................................................79
3.8.1 S cu to ...................................................................................................79
3.8.2 S kt ni Matrix Led 8x8 .........................................................................79
3.8.3 Nguyn l hot ng ...........................................................................................80
3.8.4 Lp trnh .............................................................................................................81

85

86

You might also like