You are on page 1of 71

1

Gii thiu .............................................................................................................................................. 2


1.1

Thng s k thut ca b MDA-WinEMS51 ............................................................................... 3

1.2

Bng a ch ca b MDA-WinEMS51 ........................................................................................ 5

Ci t WinIDE studio51 (EMS) .......................................................................................................... 6

Tng quan v WinIDE STUDIO-51 (EMS) ....................................................................................... 12

3.1

Giao din chng trnh ca mn hnh chng trnh WinIDE Studio-51(EMS) ......................... 12

3.2

Cc ch thch ca WINIDE STUDIO-51 (EMS) trn mn hnh chng trnh trn cc bng ..... 13

3.3

Cu trc ca mi Studio .............................................................................................................. 15

3.4

Menu chnh ca WinIDE Studio-51 (EMS) ............................................................................... 19

3.5

Cc ng dn nt n ca WinIDE Studio -51(EMS) .............................................................. 22

3.6

Bin dch m ngun .................................................................................................................... 23

Bn phm, mn hnh ............................................................................................................................ 26


4.1

Gii thiu .................................................................................................................................... 26

4.2

S dng bn phm,mn hnh ....................................................................................................... 26

4.3

Bn phm ..................................................................................................................................... 27

4.4

Mn hnh LCD ............................................................................................................................ 29

4.5

Hot ng c bn ........................................................................................................................ 29

4.5.1

Ghi b nh trong v b nh ngoi ...................................................................................... 30

4.5.2

Thc hin chng trnh ca ngi s dng ........................................................................ 32

Cc v d c th................................................................................................................................... 36

S mch ca b MDA-WinEMS51 ............................................................................................... 64

Bi thc hnh ...................................................................................................................................... 71

Gii thiu

B phn mm MDA-WinEMS51 c ch ra trong hnh 1-1 cha ng tt c cc


thnh phn c bn cn thit hiu c vi iu khin 8051.

Hnh 1-1 :B MDA-WinEMS51 (chnh)

B MDA-WinEMS51 gm c CPU, b nh( Ram v Rom),bn phm, mt mn hnh


LCD, cng RS-232C, LED ma trn,
Mt s thnh phn chnh ca b MDA-WinEMS51:
(1) Chy trnh dch hoc bin dch chng trnh chn.
(2) Bin tp file ngun.
(3) Lu file chn.
(4) chn mt file mi bin xon, trnh dch hoc bin dch.
(5) Giao din v ci t cu hnh kt ni cc thit b n b MDA-WinEMS51.
(6) Vit chng trnh 89C51.
(7) B b vxl 8051
(8) B Dot ma trn,ng c mt chiu,ng c bc.
(9) B b bin i D/A, A/D.
1.1
Thng s k thut ca b MDA-WinEMS51
Mi chc nng ca cc thnh phn trong b MDA-WinEMS51 c m t di y.
1.CPU(B x l trung tm): CPU l b x l trung tm ca b MDA-WinEMS51. B
CPU c dng cho 8051/8031/8751 vi ng h c tn s dao dng l 11.0592[MHz].
2.ROM( vng nh ch c): ROM l thnh phn chnh ca b MDA-WinEMS51. N bao
gm cc chng trnh c bn cho php ngi s dng iu khin b MDAWinEMS51 bng bn phm ,mn hnh LCD, d liu giao tip.
3.SROM( vng nh tnh truy cp ngu nhin): RAM l thnh phn chnh ca b MDAWinEMS51. Thng tin (cu trc v d liu) c th c chn(vit ) n RAM. Thng tin
cng c th c c t vng nh hoc thay i bi ngi s dng.
4.HIN TH: Bao gm mn hnh LCD hin th cc d liu c bn hoc cc thng tin iu
khin. l 16(k t)x2(dng).
5. BN PHM : N bao gm 16 nhn ca h 16, 8 t kha chc nng.
Bn phm c giao tip n h thng Bus bng cc encoder u tin. Thng tin iu
khin v d liu c cha bn trong h thng bi cc key.

6. LOA : c t bn phi so vi trung tm ca b MDA-WinEMS51


Loa c th kim tra m thanh v tng hp.
7. RS-232C : c t bn phi pha trn ca b MDA-WinEMS51.
N s dng tng thch IBM PC giao tip d liu.
8. B VIT 8751/AT89C51: c t pha di ca b MDA-WinEMS51.
N c th c vit bi ngi s dng n b vxl AT89C51.
9. DOT MATRIX LED : c t phn trn dnh ca b AT89C51. N s dng dot
led hiu cu trc v nguyn l hin th. N giao tip vi h thng BUS bi
8255A(PPI).
10. B BIN I A/D: c t bn tri so vi trung tm ca b AT89C51.
Dng ADC0804 chuyn tn hiu t tng t sang s v ngc li.
11. B BIN I D/A: c t bn tri so vi trung tm ca b AT89C51.
N s dng DCA0800( B bin i D/A 8bit) bin i tn hiu s sang tn hiu tng
t v iu khin ng c DC.
12.CHNG TRNH NG C BC: N c t pha trn bn tri so vi trung
tm ca b MDA-WinEMS51. c s dng iu khin ng c bc.
13 NG C MT CHIU: c t pha tri bn di ca b MDA-WinEMS51.
N s dng b bin i D/A iu khin tc ng c DC. N s dng ngt quang
o tc ng c.
14 B KT NI: c t pha tri bn di ca b MDA-WinEMS51. N c s
dng giao tip vi cc thit b ngoi vi.
15 NGUN: t nh bn phi ca b MDA-WinEMS51
Thng s ngun +5V(3A), +12V(1A), -12V(0.5A).

1.2
Bng a ch ca b MDA-WinEMS51
Bng 1-1 th hin bng a ch ca b MDA-WinEMS51

Ci t WinIDE studio51 (EMS)

MDA-WinEMS51 c kt ni vi my tnh ngi s dng sau WinIDE Studio51(EMS), chng trnh dnh ring cho MDA-WinEMS51 c cung cp bi MIDAS
ENGINEERING, c ci t trong phn ng dng ca my tnh ngi s dng.
Tuy nhin,nu l mt chng trnh WinIDE Studio-51(EMS) trong my tnh ca
ngi s dng, cc th tc sau y c th c b qua.
WinIDE studio51(EMS) l g?
WinIDE studio51(EMS) c th thc thi trnh hp dch/bin dch trong mt mn hnh ca
Windows bng cch to mt file ngun( ngn ng assembly hoc ngn ng C), l mt
ng dn khc n b MDA-WinEMS51 c tt c cc RAM ni, bng thanh ghi v
SFR( thanh ghi c chc nng c bit) ca b MDA-WinEMS51 c hin th trn mt
mn hnh, v c th tin trnh thc thi chng trnh v tng bc mt ca vic ti tp tin
ca b MDA-WinEMS51.
WinIDE Studio-51 (EMS) ch n gin l x l tt c cc cng vic bng cch n gin
ch cn nhn cc phm chc nng tng ng trong Windows 95/98/2002/XP.
WinIDE studio51(EMS) CD-ROM cung cp bi MIDAS ENGINEERING mt
CD_ROM ch s dng cho b MDA-WinEMS51, v cc iu kin ti thiu v ci t
th tc nh sau.
CC YU CU I VI H THNG S DNG
B vi x l : My tnh da trn b vi x l Pentium(166MHz hoc ln
hn)
H thng hot ng: Microsoft Windows 95/98/2000/XP
RAM : 16MB RAM (nn l 64MB )
cng: 100MB hoc khng gian trng cao hn ca mt a cng
CD-ROM DRIVE

1.Kch p chut vo My Computer sao khi cho a vo CD-ROM. ( t ng


chy l khng thc hin c vi vic cho a vo CD_ROM).

2. Kch p chut vo Setup.exe c cc chng trnh drive trong a CD.

3. c tha thun cp php v kch NEXT nu bn ng vi yu cu trn.

4. ghi tn ngi s dng v tn cng ty nu bn khng phi l ngi s dng c nhn v


kch vo Next.

5. ng dn n th mc MIDAS ENG c to ra v c ch ra trong chng trnh


Window. Xc nhn iu ny v kick vo Next.

6.Ci t ng dn ca WinIDE Studio-51(EMS) c ch ra. Xc nhn iu ny v


clik vo next.

7.trng thi ci t tin trnh ca WinIDE Studio-51(EMS) c ch ra.

8. Nu ci t thnh cng, file thc thi ca WinIDE Studio-51(EMS) c to ra trong


tp folder MIDAS ENG, v ci t thnh cng.

9.Nu WinIDE Studio-51(EMS) c thc thi, logo WinIDE Studio-51(EMS) xut hin.

10. trong trng hp my tnh ngi s dng c kt ni ng, mn hnh WinIDE


Studio-51(EMS) s c hin ln. Nu khng,m hnh tip theo c hin th.( nu
ngi s dng khng mun kt ni ca MDA-WinEMS51 n my tnh vi RS-232C, "v
DEMO" c thc thi).

Tng quan v WinIDE STUDIO-51 (EMS)

Mt ngi s dng phi bit tng quan v cu trc v cc hng dn hot ng c


chng trnh ca EMS c th pht trin theo ng h thng mong mun vi MDAWinEMS51. V th chng ta cn phi hiu mt cch hon ho.
3.1

Giao din chng trnh ca mn hnh chng trnh WinIDE Studio-51(EMS)

trn l mn hnh chnh ca WinIDE Studio-51(EMS) l h thng tch hp


mi trng pht trin ca MDA-WinEMS51, v trong mi studio v mn hnh c
gii thch cho ngi mi bt u s dng.

3.2
Cc ch thch ca WINIDE STUDIO-51 (EMS) trn mn hnh chng trnh
trn cc bng
1.Thanh trnh n
l thanh trnh n ph ca trnh n chnh, v cc phm tt nt bm thc thi
cc trnh n chnh, v trnh n ph ti mt thi im. Nu con tr c di n v tr
ca nhng nt phm tt ny,mt bng n gip hin ln v a ra cc ch dn cho cc
nt phm tt ny.

2.File studio
Chc nng l chnh sa,bin xon,lu ,tp hp v linh dn,bin dch v nhiu chc
nng khc

3.Internal RAM studio


Ni dung cc d liu bn trong Ram(20H-7FH) ca MDA-WinEMS51 c trnh
by, v ni dung ca cc d liu bn trong ram c th c chnh sa bng chut v bn
phm ca my tnh c nhn.

4. SFR
Gi tr ca SFR( thanh ghi hm c bit) ca MDA-WInEMS51 c ch ra v
cc gi tr ca SFRs c th c chnh sa vi chut v bn phm ca my tnh c nhn.

5 Register bank studio(bng thanh ghi)


Cha ng cc thanh ghi mc ch chung (R0-R7) ca MDA-WinEMS51 c
hin th v ni dung ca cc thanh ghi c th c chnh sa vi chut v bn phm ca
my tnh c nhn.

3.3
Cu trc ca mi Studio
1 file studio: Chc nng l chnh sa,bin xon,lu ,tp hp v linh dn,bin dch hoc
ti mt file ngun c thc thi trong studio ny. Vit chng trnh v hp dch mt file
ngun v ti n n MDA-WinEMS51 c gii thch trong cc chng khc.V file
ngun c th hin trong file studio v c hin th trong file mi thot gn y, v th
ngi s dng khng phi lo lng v file ngun ny.
(1) Nu ngi s dng thc thi v hp dch file ngun v down n xung MDAWinEMS51,con tr lnh ch n v tr ca cu trc nh hnh di y trong file
studio.

(2)Nu trng thi ging nh hnh trn, con tr chut c di n v tr ty ca file


studio v kch chut phi mn hnh ca file s c hin ra nh hnh di y.

(3) click chut vo assembler show s xut hin ca s p ng trnh hp dch c


ch ra nh hnh bn di.

(4) Cc chc nng t (1) n (4) c tnh kh thi ch khi file ngun ca MDA-WinEMS51
c nh a ch.
2. SFR Studio: Ni dung ca cc SFR (chc nng c bit thanh ghi) ca MDAWinEMS51 c hin th.

(1) Tn SFR ca WinIDE Studio-51 (EMS) c th hin vi cc mu , tn bit


trong SFR c th hin vi cc mu en, v ni dung eachSFR c hin th
trongn v t, byte, hoc bit.
(2) Mi mt chuyn ng ti SFR l t c bng cch s dng
chnh ca
mt my tnh hoc nhn vo con tr chut t tern SFR c chn.
(3) i vi cc SFR chn hoc cc ni dung ca SFR chn, mt l i din vi cc
ng chm.
(4) Nu ni dung ca selectedSFR c biu din vi cc bit, v tr bit c di chuyn
vi
v
phm ca mt ring my tnh.
(5) thay i cc ni dung ca SFR c chn, g chng vi s thp lc phn bng
cch s dng

v phm ca mt my tnh c nhn.

(6) Kch i chut vo khu vc bit ca SFR vi con chut hay nhn
i 1-0 hoc 0-1.
3. Register Bank Studio: Cc nh 0-3 ca MDA-WinEMS51 c hin th.

thay

(1)
chuyn sang thanh ghi ca tng phm, s dng hoc
v
phm ca mt my tnh c nhn hoc chut.
(2)
thay i ni dung thanh ghi c chn, g chng vi s thp lc phn bng
cch s dng

v phm

ca mt my tnh c nhn.

4. Internal RAM Studio: Ni dung ca cc d liu b nh RAM 20H


7FH ca MDA-WinEMS51 c hin th.

(1) di chuyn vo b nh d liu ni b, s dng


v
phm ca
mt my tnh c nhn hoc s dng chut.
(2) thay i cc ni dung ca ni b c la chn nh, g vo vi s thp lc phn
bng cch s dng

phm ca mt my tnh c nhn.

3.4
Menu chnh ca WinIDE Studio-51 (EMS)
C mt s menu chnh trong WinIDE Studio-51 (EMS), v c menu con trong mi menu
chnh.

(1) t con tr chut trn menu chn v nhp vo n.


(2) Nhn k t bng ch ci trong ngoc n ca menu chnh vi phm
ca
mt
my
tnh
c
nhn
p.
Cc chc nng ca trnh n chnh nh sau.
1.Tp tin (F): Chn th File hin th nh sau , v thc hin cc menu con c mn hnh
tng ng vi menu con c hin th.

(1) Ctrl + N, Ctrl + P, vv bn cnh cc menu con c ngha l phm nng,


(2) Nhn k t bng ch ci vi phm
con tng ng c thc hin.

ca mt bn phm n c ngha l cc menu

(3) Cc i din + c ngha l phm khc c nhn vi

phm c nhn.

2.Chnh sa:Chn th Edit hin th nh sau, v thc hin cc menu ph c chc nng
tng ng vi menu con thc hin. Cc ch dn hot ng ca Menu ny cng ging nh
hng dn hot ng ca trnh son tho s dng trong Windows ni chung.

(1) Ctrl + A, Ctrl + X,, etc bn cnh nhng menu con c ngha l cc phm nng,
(2) Nhn k t bng ch ci vi phm
ca mt bn phm n c ngha l cc
menu
con
tng
ng
c
thc
hin.
(3) phm + c ngha l phm khc c nhn vi

phm c nhn.

3.Lm vic(W):Chn th Edit hin th nh sau, v thi hnh menu con c chc nng ph
hp vi menu con thc hin

(1) F3, F4, F5etc bn cnh cc menu con c ngha l cc phm nng,
(2) Nhn F3, F4, F5 mt bn phm my tnh c ngha l cc menu con tng ng c
thc
thi.
(3) Cc menu con ca "tp hp v
Lin kt" v "Son tho v
Lin kt "khng thc hin cng mt lc v t long thit lp bi cc tp tin ngun trong
tp studio
4.Chy chng trnh(R).Chn th Run hin th nh sau, v thc hin cc menu con c
chc nng tng ng vi menu con thc hin. Menu con ca menu ny khng hot ng
tr khi mt chng trnh khng c ti v MDA-WinEMS51.

.(1) F6, F7, F9 etc bn cnh cc menu con c ngha l cc phm nng, v hng dn s
cng
ging
nh
(3)
trong
th
Menu.
(2) Cc menu con ca Stop Prongram c th c s dng sau khi mt chng trnh
c chy.
5.Np(D: Chn th Dump hin th nh sau, v thc hin menu con c chc nng tng
ng vi menu con thc hin. Menu con ca menu ny l xem chng trnh v b nh
d liu ca MDA-WinEMS51.

(1) F2, Ctrl + Uetc bn cnh cc menu con c ngha l cc phm nng, v
cc hng dn vn hnh cng ging nh
"Run" menu.
(2) Cc menu con ca "Xem ngn ng C " c vn hnh ch 0 khi cc tp tin ngun
trong tp studio l mt chng trnh ngn ng C.

6.Window(I): Nu ca s c thc thi, cc ca s c la chn


c hin th.
7. Micom Write(M): N c th c gii thch trong v d 4. S dng ca cc n v th
nghim Mt-Chip
8. Help(H): Th Help cung cp cc thng tin cn thit cho vic ngi dng s dng
MDA-WinEMS51 v WinIDE Studio-51 (EMS) nh cu trc bn trong ca 8051. Tham
kho "Help" nu c mt phn bn c th khng hiu khi s dng WinIDE Studio-51
(EMS).
3.5
Cc ng dn nt n ca WinIDE Studio -51(EMS)
WinIDE Studio-51 (EMS) c mt nt tt gim bt rc ri m ngi dng la chn
v thc hin cc menu chnh v cc menu con.

Cc chc nng ca nt tt c tm tt nh sau bng y, v nu ngi dng t con tr


chut vo nt tt, tn ca cc nt phm tt c hin th di nt phm tt vi tr gip .
Nu ngi dng mun s dng WinIDE Studio-51 (EMS) nhanh, ngi s dng c th
lm quen vi nt tt ny.

3.6

Bin dch m ngun

1:Chn loi trnh bin dch.


Trnh bin dch cung cp bi Midas Engineering c th hin bng Keil v IAR.
Mn hnh la chn trnh bin dch s xut hin mt cu hi khi bn nhp vo trnh
n " Thit lp trnh bin dch ".

2:La chn loi trnh bin dch.

3:Thit lp trnh bin dch.


Nu bn chn hp ng t mn hnh la chn hp ng, thm ng dn n tp tin cc
thc thi cc "bin dch".

Xc nh cc bin biu din INCLUDE, v Th vin ch nh ng dn n cc th mc


INC v LIB.
Nu bn xc nh cc tp tin thc thi,ng dn LIB v INC s c t ng xc nh.

Loi trnh bin dch ng dn file thc thi


IAR

C:\MDA\WinEMS51\C\IAR\icc8051.exe

KEIR

C:\MDA\WinEMS51\C\KEIL\c51.exe

4:Bin dch v kt ni.


Phn "Bin dch v lin kt" s cho thy cc hp thoi c to ra khi xy dng mt tp
tin ngun.

Bn phm, mn hnh

4.1
Gii thiu
Chng ny m t "tng tc" hoc "lm th no bn giao tip"
vi b MDA-WinEMS51 ca bn thng qua mn hnh ,bn phm.Cc
chng trnh gim st nm trong ROM 8k byte.
Chng trnh ny c "khi to" hoc sn sng bt c khi no in c bt hoc bt
c khi no bn n nt khi ng li nt n v cho php thc hin cc hot ng di y
bng cch s dng bn phm v mn hnh LCD.
(1):

Kim tra v sa i b nh trong v b nh ngoi ca vi iu khin 8051.

(2):

Kim tra v sa i v tr nh.

(3):

Nhp v bt u thc hin chng trnh ca ring bn.

(4):

nh gi thc hin (debug) ca chng trnh ca bn thng qua ca mn hnh.

4.2
S dng bn phm,mn hnh
Bt ngun b MDA-WinEMS5.Mn hnh LCD hin th thng bo di y.

Nu mn hnh LCD khng hin th thng bo ny, hy lm theo cc bc di y.


Di chuyn JP1 chuyn sang nh du G. Cc JP1 nm phn bn phi trung tm ca b
MDA-WinEMS51 (nh du JP1 chn ch ).

(2) n nt reset ngun.Nt reset ngun nm phn trn ca bn phm b MDAWinEMS51 (n nt ngun mu vng ).
4.3

Bn phm
Vi cc chng trnh bn phm,mn hnhbn g c hai lnh v d liu bng cch
nhn phm c nhn ca bn phm (Mn hnh giao tip vi bn thng qua mn hnh LCD).
Nh th hin trong hnh 4-2, bn phm c chia thnh hai nhm logic;16 t kha h
thp lc phn pha bn phi v 6 phm chc nng pha bn tay tri.

Cc hot ng c nhn ca 6 phm chc nng v 2 phm th nghim id nh ngha di


y.
Nt RESET cho php chm dt bt k hot ng hin ti v quay tr li n trng
thi khi to ca b MDA-WinEMS51, u vo MDA-WinEMS51 > thng bo xut hin
trong mn hnh LCD v mn hnh sn sng nhp lnh.

RES

AD

Phm AD c s dng nhp b nh trong hoc a ch b nh bn ngoi.

DA

Phm DA cho php bn nhp d liu trong b nh hoc b nh bn ngoi.

Phm + c s dng tng b nh hoc b nh bn ngoi.

Cc phm - c s dng gim b nh hoc b nh bn ngoi.

GO

Phm GO c s dng thc hin chng trnh ca bn.

STP

Phm STP c s dng dng executea trn thi gian ca chng trnh
ca bn.

INT

T0

Phm INT c s dng to ra mt ngt bn ngoi i vi vi iu khin 8051.

Phm T0 c s dng to ra mt xung b m thi


gian truy cp vi iu khin 8051.

4.4

Mn hnh LCD
B MDA-WinEMS51 ca bn s dng mn hnh LCD (16 x 2 dng) giao tip
vi bn.Ty thuc tnh trng thi hin ti ca mn hnh, cc thng tin:
(1):

Ni dung hin ti ca mt ng k hoc my PC, PSW, vv

(2):

Mt "vng lp" ca mt m 16.

(3):

Mt du nhc mn hnh.

(4):

Ni dung hin ti ca v tr b nh.

4.5

Hot ng c bn

Khi s dng mn hnh bn phm, bn s c nhc lnh trn mn hnh LCD cc


u vo cn thit.
Khi no mn hnh c i lnh, mt thng bo sau xut hin trong mn hnh
LCD.

4.5.1 Ghi b nh trong v b nh ngoi

4.5.2 Thc hin chng trnh ca ngi s dng


Phng php vo chng trnh ca ngi s dng, c thc hin m t thng qua cc
chng trnh v d sau y.
1.Chng trnh v d.

2. Vo cc chng trnh v d

3. Thc hin cc chng trnh v d

Cc n LED c kt ni vi port1 s c chiu sng.


Cp nht cc gi tr khai bo bin s c hin th.
4.S dng t kha nhy mt bc.
nhy mt bc s dng t kha STP ,bn phi chn cu trc : JNB
ti dng u tin ca chng trnh.

(1)

Thay i chng trnh.

(2)

Thc hin cc phng php sau y

IE1,$

Cc v d c th

V d 1;P_1.C
M t

/* I/O PORT Experiment 1 */


#include <io51.h>
void delay(int i)
{
while(i--);
}
void main(void)
{
data unsigned char led;
led = 0xfe;
do

{
P1 = led;
led = (led<<1) |1;
if((led & 0x10) == 0)
led = 0xfe;
delay( 10000 ) ;

} while(1);

V d 2;P_2.C
/* I/O PORT Experiment 2
-- Traffic signal */
#include

<io51.h>

bit

led1 = P1.0;

bit

led2 = P1.1;

bit

led3 = P1.2;

void

delay( int i )

{
while( i -- );
}
void

main( void )

{
int i;
do

{
led1 = 0;

/* Green LED

delay( 50000 );
led1 = 1;
/*

Green LED 4time flicker */

for( i = 0;

i < 4;

i ++ )

delay( 10000 );
led1 = 0;

on */

delay( 10000 );
led1 = 1;
}
/* Amber LED on */
led2 = 0;
delay( 30000 );
led2 = 1;
/* Red LED on */
led3 = 0;
delay( 30000 );
led3 = 1;
}

while( 1 );

}
V d 3;DOT1.C
M t

/*

DOT Experiment 1
-- Row Display

*/

#include <io51.h>
#define

PPI_A

(*(unsigned char *)0x1c014)

#define

PPI_B

(*(unsigned char *)0x1c015)

#define

PPI_C

(*(unsigned char *)0x1c016)

#define

PPI_CR

(*(unsigned char *)0x1c017)

void

delay( unsigned int del )

{
while( del-- );
}
/* font Display */
void

font_write( unsigned char font,unsigned char font1 )

{
int i;
for(i=0;i<8;i++)
{
PPI_A = font;
PPI_B = font1;
PPI_C = 0x00;

/* col on */

delay ( 10000 );
font = ( font << 1 ) ;

/* red */

font1 =( font1 <<1 ) ; /* green */


PPI_C = 0xff;
}
delay ( 10000 );

/* off */

}
void

main( void )

{
PPI_CR = 0x80;
do

{
font_write( 0x01,0x00 );
font_write( 0x00,0x01 );
font_write( 0x01,0x01 );

} while( 1 );
}
V d 4;Ch6_1.C
M t
Khi bn n nt INT ,led s chuyn

/* External Interrupt0 Experiment */


#include

<io51.h>

data unsigned char


data

unsigned char

tbl[4] = {
led;

interrupt [0x03] void X0_int(void)


{
EA=0;

0xfe,

0xfd,

0xfb,

0xf7

};

led++;
if( led == 4 )

led = 0;

P1 = tbl[led];
EA = 1;
return;
}
void

main( void )

{
led = 0;
PX0 = 1;
IT0 = 1;
EX0 = 1;
EA = 1;

/* Interrupt enable */

P1 = tbl[led];
while(1);
}

V d 5;LCD_1.C
M t

/* LCD Experiment 1 */
#include <io51.h>
#define

PPI_A

(*(unsigned char *)0x1c008)

#define

PPI_B

(*(unsigned char *)0x1c009)

#define

PPI_C

(*(unsigned char *)0x1c00a)

#define

PPI_CR

(*(unsigned char *)0x1c00b)

#define

ALL_CLR

#define

LN21

0xc0

#define

DISP_OFF

0x08

#define

DISP_ON

0x0c

void

0x01

delay( unsigned int del )

{
while( del-- );
}
/* Busy flag check */
void

check_bf(void)

{
data unsigned char

d;

PPI_CR = 0x92;

/*B Port Input Mode */

PPI_C = 0x73;
do

{
PPI_C = 0x76;

/* E = 1 */

d = PPI_B;
PPI_C = 0x72;

/* E = 0 */

} while( d & 0x80 );


PPI_CR = 0x90;
PPI_C =0x73;

/* B Port Output Mode */

}
/* lcd Instruction */
void
{

cmd_write( unsigned char cmd )

check_bf();
PPI_C = 0x74;

/* E = 1 */

PPI_B = cmd;
PPI_C = 0x70;

/* E = 1 */

PPI_C = 0x73;
}
/* 1 Character Display */
void

char_out( char ch )

{
check_bf();
PPI_C = 0x75;
PPI_B = ch;
PPI_C = 0x70;
PPI_C = 0x73;
}
/* String Display */
void

string_out( char *str )

{
while( *str ) {
char_out( *str );

str ++;
delay( 20000 );
}
}
void

main( void )

{
do

{
cmd_write( ALL_CLR );
string_out( "Serial Monitor !" );
cmd_write( LN21 );
string_out( "** ET8051 KIT **" );
cmd_write( DISP_OFF );
delay( 40000 );
cmd_write( DISP_ON );

} while( 1 );
}
V d 6;STEP.C
/* Stepping motor Experiment */
#include <io51.h>
#define

KEY_IN

(*(unsigned char *)0x1c004)

#define

CLR_KEY

#define

PPI_A

(*(unsigned char *)0x1c008)

#define

PPI_B

(*(unsigned char *)0x1c009)

#define

PPI_C

(*(unsigned char *)0x1c00a)

(*(unsigned char *)0x1c000)

#define

PPI_CR

#define

ALL_CLR

#define

LN21

0xc0

#define

LN11

0x80

#define

DISP_OFF

0x08

#define

DISP_ON

0x0e

bit

(*(unsigned char *)0x1c00b)

direction_flag;

unsigned char

pl_counter;

unsigned char

pl_ptr;

const

0x01

unsigned char

pl[4] = {

0xcc, 0x99, 0x33, 0x66


};
union

{
unsigned int

i;

unsigned char

b[2];

5. Experiment
} speed;
/*

LCD Busy flag Check */

void

check_bf( void )

{
data

unsigned char

PPI_CR = 0x92;
PPI_C
do

= 0x73;

d;

PPI_C = 0x76;
d = PPI_B;
PPI_C = 0x72;
} while( d & 0x80 );
PPI_CR = 0x90;
PPI_C = 0x73;
}
/*
LCD Instruction Write
void

*/

lcd_cmd_write( unsigned char cmd )

{
check_bf();
PPI_C = 0x74;

/* E = 1 */

PPI_B = cmd;
PPI_C = 0x70;

/* E = 0 */

PPI_C = 0x73;
}
/* 1 Character Display
void

*/

lcd_char_out( unsigned char ch )

{
check_bf();
PPI_C = 0x75;
PPI_B = ch;
PPI_C = 0x71;

PPI_C = 0x73;
}
/*

String Display

void

*/

lcd_string_out( char *str )

{
while( *str )

lcd_char_out( *str );
str ++;
}
}
void

BinToHex( char *buf, int

v )

{
buf[0] = ((v >> 12) & 0x000f);
buf[0] += (buf[0] >= 0x0a) ? 0x37 :
buf[1] = ((v >> 8)

& 0x000f);

buf[1] += (buf[1] >= 0x0a) ? 0x37 :


buf[2] = ((v >> 4)

& 0x000f);

buf[3] += (buf[3] >= 0x0a) ? 0x37 :


buf[4] = 0;
}
void
{

dsp_speed( void )

0x30;

& 0x000f);

buf[2] += (buf[2] >= 0x0a) ? 0x37 :


buf[3] = (v

0x30;

0x30;

0x30;

char

str[17];

lcd_cmd_write( LN11 );
lcd_string_out( " Speed : " );
BinToHex( str, speed.i);
lcd_string_out( str );
}
void

dsp_msg( char *str )

{
lcd_cmd_write( LN21 );
lcd_string_out( str );
}
void

init_timer( void )

{
TR0 = 0;
TH0 = speed.b[0];
TL0 = speed.b[1];
TR0 = 1;
}
/*

Timer0 interrupt Routine

interrupt [0x0b] void

timer0( void )

{
TR0 = 0;
EA = 0;
TH0 = speed.b[0];

*/

TL0 = speed.b[1];
if( !pl_counter ) {

/* Stop Check */

EA = 1;
return;
}
if( pl_counter != 0xff ) pl_counter --;
if( direction_flag )

P1 = pl[pl_ptr];
pl_ptr ++;
if( pl_ptr >= 4 ) pl_ptr = 0;
}
else

{
P1 = pl[pl_ptr];
pl_ptr --;
if( pl_ptr == 0xff ) pl_ptr = 3;

}
TR0 = 1;
EA = 1;
}
5. Experiment
/*
Key Input
char
{

scan( void )

*/

data
do

unsigned char

key;

{
key = KEY_IN;

} while( key & 0x80 );


CLR_KEY = 0;
return( key & 0x1f );
}
/*
Main program
void

*/

main( void )

{
char

in_key;

lcd_cmd_write( ALL_CLR );
speed.i = 0xc000;
dsp_speed();
pl_ptr = 0;
pl_counter = 0;
TMOD = 0x11;
init_timer();
ET0 = 1;
PT0 = 1;
EA = 1;
do {
in_key = scan();

switch( in_key )
case

1 :

/* right 45 */

EA = 0;
pl_counter = 25;
direction_flag = 0;
dsp_msg( "

Right : 45

" );

EA = 1;
TR0 = 1;
break;
case

3 :

/* right 90 */

EA = 0;
pl_counter = 50;
direction_flag = 0;
dsp_msg( "

Right : 90

" );

EA = 1;
TR0 = 1;
break;
case

5 :

/* right 180 */

EA = 0;
pl_counter = 100;
direction_flag = 0;
dsp_msg( "
EA = 1;
TR0 = 1;

Right : 180

" );

break;
case

7 :

/* right

*/

EA = 0;
pl_counter = 0xff;
direction_flag = 0;
dsp_msg( "Right Revolution" );
EA = 1;
TR0 = 1;
break;
case

0 :

/* left 45 */

EA = 0;
pl_counter = 25;
direction_flag = 1;
dsp_msg( "

left :

45

EA = 1;
TR0 = 1;
break;
case

2 :

/* left 90 */

EA = 0;
pl_counter = 50;
direction_flag = 1;
dsp_msg( "
EA = 1;
TR0 = 1;

left

: 90

" );

" );

break;
case

4 :

/* left 180 */

EA = 0;
pl_counter = 100;

direction_flag = 1;
dsp_msg( "

left

: 180

" );

EA = 1;
TR0 = 1;
break;
case

6 :

/* left revolution */

EA = 0;
pl_counter = 0xff;
direction_flag = 1;
dsp_msg( "left revolution" );
EA = 1;
TR0 = 1;
break;
case

0x0e :

/* stop

*/

EA = 0;
TR0 = 0;
pl_counter = 0;
dsp_msg( "
break;

Motor Stop

" );

case

0x13 :

/* speed inc

'+' */

EA = 0;
TR0 = 0;
speed.i += 50;
init_timer();
dsp_speed();
EA = 1;
TR0 = 1;
break;
case

0x14 :
EA = 0;
TR0 = 0;
speed.i -= 50;
init_timer();
dsp_speed();
EA = 1;
TR0 = 1;

break;
}

/* switch */

} while( 1 );
}

V d 7;Ch&_1.C
M t

/* speed dec

'-' */

/*

Timer Experiment 1 */

#include <io51.h>
/* LED BUFFER */
data unsigned char led;
/* --------------------------------------- Timer0 Interrupt service routine */
interrupt [0x0b] void TIMER0(void)
{
TR0 = 0;

/* Timer Stop */

led = ( led << 1 ) | 0x01;


if( ( led & 0x10 ) == 0 )
P1 = led;

led = 0xfe;
/* LED ON */

TH0 = 0;
TL0 = 0;
TR0 = 1;
}
/* -------------------------------------- MAIN program */
void

main( void )

{
TMOD = 0x21;

/* Timer MODE 0 */

TH0 = TL0 = 0;
PT0 = 1;
ET0 = 1;
EA = 1;
led = 0xfe;
P1 = led;
TR0 = 1;
while( 1 );
}
V d 8;DAC.C
M t
Tc ng c mt chiu s c hin th trn mn hnh LCD

t P0,P1 vi mc in p +12V

Kt ni JB vi JC bng cp

/*

DAC

Experiment

*/

#include <io51.h>
#define
PPI_A
#define
PPI_B

(*(unsigned char *)0x1c008)


(*(unsigned char *)0x1c009)

#define
#define

(*(unsigned char *)0x1c00a)


(*(unsigned char *)0x1c00b)

PPI_C
PPI_CR

/* LCD Instruction */
#define
#define
#define
#define
#define

ALL_CLR
LN21
LN11
DISP_OFF
DISP_ON

0x01
0xc0
0x80
0x08
0x0e

/* Rotary Decoder Slot Number */


#define SLOT
14;
/* timer1 counter => Make 1Sec */
int

time_counter;

/* Motor Rotation buffer */


char
speed_buf;
/*
LCD Busy flag check */

void
{

check_bf( void )

data

unsigned char

d;

PPI_CR = 0x92;
PPI_C
do

= 0x73;

{
PPI_C = 0x76;
d = PPI_B;
PPI_C = 0x72;

} while( d & 0x80 );


PPI_CR = 0x90;
PPI_C = 0x73;
}
/* LCD Instruction Write
void

*/

lcd_cmd_write( unsigned char cmd )

{
check_bf();
PPI_C = 0x74;

/* E = 1 */

PPI_B = cmd;
PPI_C = 0x70;

/* E = 0 */

PPI_C = 0x73;
}
/* LCD Instruction write */
void
{

lcd_char_out( unsigned char ch )

check_bf();
PPI_C = 0x75;
PPI_B = ch;
PPI_C = 0x71;
PPI_C = 0x73;
}
/* LCD String write
void

*/

lcd_string_out( char *str )

{
while( *str )

lcd_char_out( *str );
str ++;
}
}
void

BinToBCD( char *buf, int v )

{
int

t;

buf[0] = v / 100 + 0x30;


t = v % 100;
buf[1] = t / 10 + 0x30;
buf[2] = t % 10 + 0x30;
buf[3] = 0;
}
/*

Main Program
void

*/

main( void)

{
char

str[6];

unsigned char
bit

da_buf;

flag;

time_counter = 0;
speed_buf = 0;
lcd_cmd_write( ALL_CLR );
lcd_string_out( " Motor Speed " );
lcd_cmd_write( LN21 + 8 );
lcd_string_out( "RPS" );
TMOD = 0x16;
timer 1 => mode 1 */
TH0 = 256 - SLOT;
TL0 = 256 - SLOT;
ET0 = 1;
TH1 = 0;
TL1 = 0;
ET1 = 1;
TR0 = 1;
TR1 = 1;
EA = 1;
do {

/*

timer 0 => mode 2

/*

Speed Increment */

da_buf = 128;
flag = 1;
do

{
P1 = da_buf;
if( time_counter >= 30 ) {

/* 2sec delay */

time_counter = 0;
speed_buf /= 2;
/*

Speed Display ( rps ) */

BinToBCD( str, speed_buf );


lcd_cmd_write( LN21 + 4 );
lcd_string_out( "

" );

lcd_cmd_write( LN21 + 4 );
lcd_string_out( str );
speed_buf = 0;
da_buf ++;

/*

if( da_buf > 80 ) flag = 0;


}
} while( flag );
/*

Speed Decrement */

flag = 1;
do

{
P1 = da_buf;
if( time_counter >= 30 )

DAC Output Increment */

{
time_counter = 0;
speed_buf /= 2;
BinToBCD( str, speed_buf );
lcd_cmd_write( LN21 + 4 );
lcd_string_out( "

" );

lcd_cmd_write( LN21 + 4 );
lcd_string_out( str );
speed_buf = 0;
da_buf --;
if( da_buf < 69 )

flag = 0;

}
} while( flag );
} while( 1 );
}
/* timer0

interrupt

routine */

interrupt [0x0b] void TIMER0(void)


{
EA = 0;
speed_buf ++;
EA = 1; }
/* timer1

interrupt

routine */

interrupt [0x1b] void TIMER1(void)


{EA = 0;

time_counter ++;
EA = 1;
}

S mch ca b MDA-WinEMS51

Bi thc hnh

You might also like