Professional Documents
Culture Documents
1.2
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
3.4
3.5
3.6
4.2
4.3
Bn phm ..................................................................................................................................... 27
4.4
4.5
Hot ng c bn ........................................................................................................................ 29
4.5.1
4.5.2
Cc v d c th................................................................................................................................... 36
Gii thiu
1.2
Bng a ch ca b MDA-WinEMS51
Bng 1-1 th hin bng a ch ca b MDA-WinEMS51
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
9.Nu WinIDE Studio-51(EMS) c thc thi, logo WinIDE Studio-51(EMS) xut hin.
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
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.
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.
(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.
(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.
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.
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.
3.6
C:\MDA\WinEMS51\C\IAR\icc8051.exe
KEIR
C:\MDA\WinEMS51\C\KEIL\c51.exe
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):
(2):
(3):
(4):
4.2
S dng bn phm,mn hnh
Bt ngun b MDA-WinEMS5.Mn hnh LCD hin th thng bo di y.
(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.
RES
AD
DA
GO
STP
Phm STP c s dng dng executea trn thi gian ca chng trnh
ca bn.
INT
T0
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):
(2):
(3):
Mt du nhc mn hnh.
(4):
4.5
Hot ng c bn
2. Vo cc chng trnh v d
(1)
(2)
IE1,$
Cc v d c th
V d 1;P_1.C
M t
{
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;
/*
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
#define
PPI_B
#define
PPI_C
#define
PPI_CR
void
{
while( del-- );
}
/* font Display */
void
{
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 */
/* 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
<io51.h>
unsigned char
tbl[4] = {
led;
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
#define
PPI_B
#define
PPI_C
#define
PPI_CR
#define
ALL_CLR
#define
LN21
0xc0
#define
DISP_OFF
0x08
#define
DISP_ON
0x0c
void
0x01
{
while( del-- );
}
/* Busy flag check */
void
check_bf(void)
{
data unsigned char
d;
PPI_CR = 0x92;
PPI_C = 0x73;
do
{
PPI_C = 0x76;
/* E = 1 */
d = PPI_B;
PPI_C = 0x72;
/* E = 0 */
}
/* lcd Instruction */
void
{
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
{
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
#define
CLR_KEY
#define
PPI_A
#define
PPI_B
#define
PPI_C
#define
PPI_CR
#define
ALL_CLR
#define
LN21
0xc0
#define
LN11
0x80
#define
DISP_OFF
0x08
#define
DISP_ON
0x0e
bit
direction_flag;
unsigned char
pl_counter;
unsigned char
pl_ptr;
const
0x01
unsigned char
pl[4] = {
{
unsigned int
i;
unsigned char
b[2];
5. Experiment
} speed;
/*
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
*/
{
check_bf();
PPI_C = 0x74;
/* E = 1 */
PPI_B = cmd;
PPI_C = 0x70;
/* E = 0 */
PPI_C = 0x73;
}
/* 1 Character Display
void
*/
{
check_bf();
PPI_C = 0x75;
PPI_B = ch;
PPI_C = 0x71;
PPI_C = 0x73;
}
/*
String Display
void
*/
{
while( *str )
lcd_char_out( *str );
str ++;
}
}
void
v )
{
buf[0] = ((v >> 12) & 0x000f);
buf[0] += (buf[0] >= 0x0a) ? 0x37 :
buf[1] = ((v >> 8)
& 0x000f);
& 0x000f);
dsp_speed( void )
0x30;
& 0x000f);
0x30;
0x30;
0x30;
char
str[17];
lcd_cmd_write( LN11 );
lcd_string_out( " Speed : " );
BinToHex( str, speed.i);
lcd_string_out( str );
}
void
{
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( 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;
*/
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 = 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
#define
#define
PPI_C
PPI_CR
/* LCD Instruction */
#define
#define
#define
#define
#define
ALL_CLR
LN21
LN11
DISP_OFF
DISP_ON
0x01
0xc0
0x80
0x08
0x0e
time_counter;
void
{
check_bf( void )
data
unsigned char
d;
PPI_CR = 0x92;
PPI_C
do
= 0x73;
{
PPI_C = 0x76;
d = PPI_B;
PPI_C = 0x72;
*/
{
check_bf();
PPI_C = 0x74;
/* E = 1 */
PPI_B = cmd;
PPI_C = 0x70;
/* E = 0 */
PPI_C = 0x73;
}
/* LCD Instruction write */
void
{
check_bf();
PPI_C = 0x75;
PPI_B = ch;
PPI_C = 0x71;
PPI_C = 0x73;
}
/* LCD String write
void
*/
{
while( *str )
lcd_char_out( *str );
str ++;
}
}
void
{
int
t;
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 {
/*
/*
Speed Increment */
da_buf = 128;
flag = 1;
do
{
P1 = da_buf;
if( time_counter >= 30 ) {
/* 2sec delay */
time_counter = 0;
speed_buf /= 2;
/*
" );
lcd_cmd_write( LN21 + 4 );
lcd_string_out( str );
speed_buf = 0;
da_buf ++;
/*
Speed Decrement */
flag = 1;
do
{
P1 = da_buf;
if( time_counter >= 30 )
{
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
routine */
time_counter ++;
EA = 1;
}
S mch ca b MDA-WinEMS51
Bi thc hnh