Академический Документы
Профессиональный Документы
Культура Документы
..
ASM-51
-
2010
.. ASM-51.
: : , 2010. ____.
MCS-51.
, ,
: 210401
, 200600.62
, 20020104
06 2009.,
2.
2009 ,
12 ,
.
-
, 20092018 .
-
, , 2010
.. , 2010
30
.................................................. 5
......................................................................................................... 5
............................................................................. 9
......... 9
RG2. ....................................................................... 10
....................................................................... 11
I) ....................................... 11
II). ASM51.................... 14
III) ......................................................................... 15
IV) . ................................................................ 16
...................................................................... 20
V). . ...................................................... 20
VI) 2
. ................................................................................. 22
VII) . ............ 29
- 34
1. ............ 37
2. ...................... 38
3. ..................... 39
4.
2 ...................................................................................................... 39
5.
MCS-51 .................................................................................. 40
6. VS ............................................................ 41
................................................ 42
................................................. 43
31
.............................................................................................. 47
........................................................................... 47
........... 47
RG2. ....................................................................... 48
....................................................................... 49
I) ....................................... 49
II).
. ........................................................................................................ 52
III) ......................................................................... 57
IV) . ................................................................ 58
V).
. ........................................................................................................ 60
V-1) ...................................................................... 62
V-2) - ....................... 64
V-3)
main_prog. ................................................................................. 64
V-4) -
..................................................................................... 68
V-5)
ASCII . .................................................................................................. 74
VI) ....................... 75
VII) ....................................... 76
1. MCS51........................................................................................................................ 76
2. .. 78
8-
4 -> 1,
. .................................................................. 79
............................................................... 80
................................................. 81
............................................................... 85
............................................................... 85
................................................. 86
.................................................................................................. 89
30
.1 ()
ADuC812 MCS-51 (8051).
()
(),
() . , ,
,
/ ( IO). (
, .. ,
) /,
( UART), , ,
.
SDK1.1 ( ).
.
.1 ,
.
RG
/ (
),
, .1.
(),
, , ,
16-
).
MCS-51 :
(Flash, EPROM ROM - CODE),
- DATA,
/ ( - CODE, XDATA.
Flash- ADuC812 8 (0..1FFF).
. ,
64KB (0..FFFF).
64KB,
ADuC812 16MB ( 64 ).
.
.1
: / (~RD, ~WR).
~PSEN (Program Store Enable). .2
MCS-51.
,
,
. ,
: ~WE (Write Enable) ~WR ~OE (Output Enable)
~RD.
(~RD ~PSEN)
(. .1).
+ (.2).
.2
- DATA (256 )
. 128 (0..7F) 4- 8 REG ,
BDATA.
, ,
. 128 (80..FF)
,
SFR (Special Function Register). SFR
.
, , DATA
.
DATA, ,
XDATA (eXternal DATA).
(External Access Enable)
~EA. ~EA=1,
, (),
( ). ~EA = 0,
.
+ ~EA=1. -
,
()
.
-
/ . .1
, ..
() .
(DATA)
- (CODE) ADuC812
(
)
EEPROM,
SFR.
ADuC812
(256 64 = 16). .2
() ( + ). 255
()
.
.30.2-1 ADuC812.
P0..P3 ,
- RxD TxD, ADCi,
/ - ~RD ~WR, Ai,
/ ADi .
(. .30.1).
.30.2-1
, ,
.
.
.
, ,
,
. (),
,
. ,
()
.
/ (AD0..AD7) .
( ALE, #WR, #RD,
#RESET .). ,
#
~. .30.3 ,
EPM3064 .
: 1) C
. .
.30.3
: 1) 62- ,
.. Yx=Y62, 2) A22,A20,A17 A16 ,
( ).
10
RG2.
MOVX @DPTR, A
(AD7, AD6,,AD0)
RG1 ALE (A7, A6,,A0). ,
256- (y0..y255),
(OE, CS
..). .30.3 Yx OE (Output
Enable) RG2. ALE
#WR, RG2 (D7..D0),
. , #RESET .. = 1,
.. . (Q7..Q0),
Qi = 1 , .
RG2. 16
XRAM (64KB)
DPTR=(DPH DPL Data Pointer)
. (8 )
DPP (Data Pointer Page).
,
, A23,A22,A21,A20,A19,A18,A17,A16 = 01010011(BIN)
=53(HEX). Y62 ,
(6210=001111102=3E16). (. .30.3)
:
11
, ,
RG2 0101 0011 0000 0000
0011 1110=53003E(HEX) (DPP)=53h, (DPTR)=003E=3E.
- .
##############################################################
: (DPP)
(DPTR) .
##############################################################
I) .
(IDE) MCS-51 Keil
uVision
.
,
Project | Close Project.
12
,
prMyTimer .
Select Device for Target .
ADuC812 OK.
, ..
C .
,
.
,
.30.4.
13
.30.4
*.a51. . File | New
Text1 . ,
, . File | Save As
,
prMyTimerASM.a51 ( a51).
. Files
Source Group 1
Add Files to Group prMyTimerASM.
Add Close. ,
prMyTimerASM.a51, .
. File |
Save All. , .
( ) , .
View Workbook Mode
14
. . File | New
Text....
. File | Save As
aduc812.h_my .
- #include aduc812.h_my.
II). ASM51.
( )
.
,
.
( ).
( ):
15
##############################################################
: Tochka_Vhoda
,
.
##############################################################
III) .
,
.
/
(000000 FFFFFF = 16).
movx @DPTR, a
.
( ).
CSEG(Code Segment) (),
( ).
CSEG at XXXX
XXXX . jmp Tochka_Vhoda
, ,
0000h
- .
0000h.
ORG Tochka_Vhoda
. ,
- 4000h. main_p ( )
. mov Wr_byte,#0bdh
, R1.
Write 0bdh,3eh,53h
.
_8: jmp _8
END. ,
. , ,
. ,
,
. ,
,
( )
,
.
uVision2.
16
, (UNDEFINED)
, .
DPP.
##############################################################
aduc812.h_my
:
##############################################################
XX 16- ,
-1 .
DPP.
. ,
XX aduc812.h_my.
,
.
IV) .
( ) ,
ASCII
HEX.
Intel HEX .
:0F40000075847F90003F74BDF075840080FE32A0
:00000001FF
ASCII
, 16-(HEX) ,
. :.
. 2 , 0F(15)
, . 4
, 4000 ,
15 ()
. 00(
) 01(. ). 2 A0
256-
17
. .
15(0F): 75 84 7F 90 00 3F 74 BD F0 75 84 00 80 FE 32.
:00000001FF
. 02XXXX060000SS
XXXX - HEX-
, .. . 02
LJMP XXXX. XXXX 16-
(Tochka_Vhoda), . 060000
. SS
-
256-. XXXX=4000h.
( .
Project | Options for Target) Output
HEX-80.
, OK.
IV-I) , HEX- ,
Build Target
Rebuild All
. Project | Build Target.
<F7>.
, 0
Error(s).
. :
RESET
. HEX-
, ( . 10)
18
C:\EMUL\Work\SDK_11\W_hex202.exe.
*.hex, , 4000
HEX-....
... ...
.
, :
.
/ ,
DPP .
VB HEX Loader , ..
.
#### ####
: . Project/Options for
Target . Macros: All Expansions
19
(
*.lst). ,
.
, ,
.
( DPP DPPP).
, ,
, (
). ,
.
. .
File | Open.
. ERROR.
20
, ()
, RESET.
V). .
.
-, .
, ,
- ,
- .
,
-.
- FFFFh
0000h. -
,
.
,
-
.
, -.
0000h, 0003h, 000bh, , 0043h -
MCS-51
(. 3).
,
. .
, ,
- 8 ( 0000 - 3
). ()
, 3-
LJMP XXXX .
21
. ,
(SRAM),
.
, - ,
,
. -, -
,
.
: 0000h,
0003h 0043h -,
( MK MCS51), LJMP 20XX 2000h,
2003h, , 2043h, (XRAM =
eXternalRAM). .
.
2000h, 2003h2043h
,
.
.
,
(..
FFFFh 0000h). ( )
002bh. ,
202bh LJMP T2_int, T2_int
22
()
. T2_int - .
VI)
2 .
T2_int Init_Timer2
( ) 2.
#############################################################
:
!
#############################################################
,
Timer2 . 0, 1 2
2, .. 16-
autoreload . .30.5
.
.30.5
TL2TH2 , : (TL2-.
TH2-.). , .. FFFF 0000,
c TH2 TF2
(
23
).
(RELOAD)
,
RCAP2H RCAP2L
, 0000(HEX),
.. ,
RCAP2H RCAP2L, .
, TF2 ,
,
TF2.,
..
.
2-
( - SFR) T2CON.
:
T2CON ( )
D7
TF2
D6
EXF2
D5
RCLK
D4
D3
TCLK EXEN2
D2
TR2
D1
CNT2
D0
CAP2
TF2 1,
2, .
TR2 - / 2
T2CON (. 1).
T2CON
. TH2 TL2
2. RCAP2H RCAP2L
( . ).
24
1 . 2
, .
(CNT2=0)
(CORE CLOCK).
(CNT2=1)
, T2 .
, (
CNT2=0) (CAP2=0) .
/2. CoreClock =11.059.200 . 11.059.200
/ 12 / 65536 = 14,0625 (. 16-
2^16=65536). 12 (. .30.5 ).
1 / 14.0625 = 0.07 .
1 . ,
1, 921600 = 11059200 / 12 ,
4608(DEC) = 1200(HEX). 200
(Ttimer2=5=0,005). .. 1. 2 200
200 (. .30.5 ).
200
(.. 1)
/2
65536(DEC)=10000(HEX).
1200(hex)
10000(HEX) 1200(HEX) =
EE00(HEX).
#########################################################
: Ttimer2 T
, EE00,
( ) 200
.
1). - (timer2_OverFlow) t2OF=T/Ttimer2
= 1/0.005=200
25
D6
EADC
D5
ET2
D4
ES
D3
ET1
D2
EX1
D1
ET0
D0
EX0
EA = 0 (1 )
EADC 1 0
ETx 1 0 _x
(x=0,1,2)
ES 1 0
UART
EXx 1 0
(x=0,1)
EA=0, ,
D6D0 .
ET2=1 EA=1. EA ,
, D6D0.
.
#############################################################
: 200 EE00
#############################################################
26
..
..
(
):
#include "aduc812.h_my" ;== .
.
Wr_byte EQU R1;== ,
R1
Tochka_Vhoda EQU 4000h;==
t2OF EQU R0;== t2OF ( ) R0
;== t2OF (timer2 OverFlow)
Reg1 EQU 1;== R1, 1-
.
;================================================
Write MACRO Wr_byte, reg_addr, page_num;== -
. -
mov DPP,#page_num;==
mov DPTR,#reg_addr;== .
mov a,Wr_byte;== R1
27
;================================================
CSEG at 0;== (
0000h..FFFFh)
;== .. 0000..1FFF - Flash ,
2000h,
;== =64K (
.. >64K)
jmp Tochka_Vhoda;== (Debugger)
;==
;================================================
ORG 202bh;==
jmp T2_int;== " 2" - T2_int
;================================================
ORG Tochka_Vhoda;==
main_p: ;==
call Init_Timer2
mov Wr_byte,#0bdh;== R1
Write Wr_byte,3eh,53h;== c
28
<F7>
, UNDEFINED
SYMBOL ( , ).
,
. aduc812.h_my
. 1,
2.
:
DPP data 84h;== DPP ( )
TF2 bit 0xxh;== () TF2 (xx
)
..
##############################################################
:
Init_Timer2.
aduc812.h_my. :
DATA, BIT.
##############################################################
, UNDEFINED SYMBOLs -
:
RESET.
, .
,
.
:
, .
,
.
#### ####
29
VII) .
,
( ).
MCS-51 ~Int0 ~Int1
.
,
().
, .
.30.5.1
,
~Int0,1. , -,
EX0 EX1 IE
(. 2), -,
IT0 IT1 TCON Timer Control (. 2). ITx = 1,
.
#############################################################
: 4- -2
aduc812.h_my
#############################################################
Ext1_int (
) ~Int1 ( Ext1_int ).
30
.30.6
#############################################################
:
(.30.6)
.
, IE1 ORG
0013h +2000h = 2013h. jmp
(): Ext1_int.
IE0 (
Ext0_int).
-
.
: 1) ,
Wr_byte , #55h (
), 2)
TR2=1 ( setb TR2), ..
? -5,
.
31
4 : ) 2
( EX0=EX1=1) ) ( IT0=IT01=1)
~Int0,1. setb EX0
~Int0.
.
4- . ,
4- "aduc812.h_my"
<F7>.
##############################################################
. ,
, c
.
~Int0 ,
,
. INT0
(1 -> 0)
.
Ext0_int,
.
.
~Int1 .
.
#### ####
32
( ):
#include "aduc812.h_my" ;== .
.
Wr_byte EQU R1;== ,
R1
Tochka_Vhoda EQU 4000h;==
t2OF EQU R0;== t2OF ( ) R0
;== t2OF (timer2 OverFlow)
Reg1 EQU 1;== R1, 1- .
;================================================
Write MACRO Wr_byte, reg_addr, page_num;== -
. -
mov DPP,#page_num;==
mov DPTR,#reg_addr;== .
mov a,Wr_byte;== R1
33
;================================================
ORG Tochka_Vhoda;==
main_p: ;==
call Init_Timer2
mov Wr_byte,#0bdh;== R1
Write Wr_byte,3eh,53h;==
;==
_8: jmp _8;==
;================================================
Init_Timer2:
mov t2OF,#200d;== 200*0,005=1
mov RCAP2H,#0eeh;== EE00 - 0.005 .
mov RCAP2L,#0
mov TH2,#0eeh;==
mov TL2,#0;
setb ET2;== 2
setb TR2;== -2
..;== P3.2(Int0)
..;==
..;== P3.3(Int1)
..;==
setb EA;==
ret;==
;================================================
T2_int:
clr TF2;== . TF2
djnz t2OF,vyhod;== t2OF t2OF<>0
vyhod
mov t2OF,#200d;== -
200
xrl Reg1,#0ffh;== (
)
Write Wr_byte,3eh,53h ;==
vyhod:
reti;==
;================================================
Ext0_int: ; IE0(Ext0_int)
..;==
reti
;=====================================
Ext1_int: ; IE1(Ext1_int)
.;==
reti
34
;=====================================
END;==
.
"aduc812.h_my"
. Keil uVision (
IDE )
. , ADuC812 "aduc812.h,
#include <aduc812.h>.
, .
,
"aduc812.h_my".
,
,
, . Tochka_Vhoda
47h ( )
(
202bh, 2003h 2013h). .
.
-
, Simulator,
.ini. Simulator.ini :
35
Initialization
File
:
<Cntr+F5> . Debugger |
Memory Map , -
.
<F9>
(breakpoint) ( 60
).
36
. sec Project
Window .
P3.2 P3.3 (. 5.1).
, Parallel Port 3 Timer/Counter
2 . Peripherals | I/O-Ports Peripherals | Timer | Timer2.
.. ).
. T2:
Timer/Counter 2 ( TR2=1). 3 3.
,
.
3 3
.
Timer/Counter 2
TR2. TR2 ,
/ .
:
Ext1_int
.
Ext0_int
.
37
1.
8- (
SFR)
ADuC812 ( MCS-51)
38
2.
()
ADuC812 ( MCS-51)
39
3.
4.
2
(Special Function
Registers SFR)
IE (Interrupt Enable Register)
D7
D6
D5
D4
D3
D2
D1
EA
EADC
ET2
ES
ET1
EX1
ET0
D0
EX0
EA = 0 (1 )
EADC 1 0
40
ETx 1 0 _x
(x=0,1,2)
ES 1 0
UART
EXx 1 0
(x=0,1)
-2 T2CON
D7
D6
D5
D4
D3
D2
D1
D0
TF2
EXF2 RCLK TCLK EXEN2
TR2
CNT2
CAP2
TF2 , 1,
2
TR2 - 2
/ 2 RCAP2L
D7
D6
D5
D4
D3
D2
D1
D0
// 2 RCAP2H
D7
D6
D5
D4
D3
D2
D1
D0
5.
MCS-51
DST,SRC , ()
operand ()
bit
xrl DST,SRC -
anl DST,SRC -
clr bit -
setb bit -
cjne a, operand, address -
,
.
djnz operand, 1 ,
<> 0
movx @dptr,a - /
, DPTR.
movx a,@dptr -
jmp address (
LJMP ..,
AJMP SJMP ).
call address address
.
41
ret ( )
reti (
)
push operand
pop operand
inc operand
mov DST,SRC
6. VS
1) (
):
2) - (
):
.
.
. (, , 8 , , . .)
.
, .
42
Yx=Y15
Tochka_Vhoda
3000h
Ttimer2=50msec
T=3
Yx=Y151
Tochka_Vhoda
5100h
Ttimer2=2.5msek
T=0.5
Yx=Y55
Tochka_Vhoda
2500h
Ttimer2=25msec
T=1
Yx=Y143
Tochka_Vhoda
7000h
Ttimer2=10msec
T=2
Yx=Y199
Tochka_Vhoda
3650h
Ttimer2=50msec
T=4
Yx=Y23
Tochka_Vhoda
2A00h
Ttimer2=20msec
T=5
Yx=Y71
Tochka_Vhoda
4E00h
Ttimer2=8msec
T=1
Yx=Y31
Tochka_Vhoda
5D00h
Ttimer2=4msec
T=1
Yx=Y47
Tochka_Vhoda
6AB0h
Ttimer2=25msec
T=0.5
Yx=Y135
Tochka_Vhoda
44E0h
Ttimer2=40msec
T=2
Yx=Y39
Tochka_Vhoda
5E30h
Ttimer2=50msec
T=0.5
Yx=79
Tochka_Vhoda
2A00h
Ttimer2=20msec
T=2
43
1) : ,
,, , RAM, (ALE, #WR, #RD #PSEN).
2) ADuC812.
3) , 24-
RG2. MOVX @DPTR,A MOVX A,@DPTR
( , ).
8.5.1 MK ccea c pe a
RG2.
4)
( .3).
44
45
6) RCAP2L RCAP2H 2 (
).
46
:
.
47
31
,
ASCII
.
, ,
,
. (),
,
. ,
()
.
/ (AD0..AD7) .
( ALE, #WR, #RD,
#RESET .). ,
#
~. .30.3 ,
EPM3064. 2
, 3 1 0.
.
.
: 1) C
. .
48
.30.3
1) 62- , ..
Yx=Y62, 2) A22,A20,A17 A16 ,
( ).
RG2.
MOVX @DPTR, A
(AD7, AD6,,AD0)
RG1 ALE (A7, A6,,A0). ,
256- (y0..y255),
(OE, CS
..). .30.3 Yx OE (Output
Enable) RG2. ALE
#WR, RG2 . D3..D0 ( 0),
.
RG2. 16 XRAM
(64KB)
DPTR=(DPH DPL Data Pointer) .
(8 )
DPP (Data Pointer Page).
,
, A23,A22,A21,A20,A19,A18,A17,A16 = 01010011(BIN)
=53(HEX). Y62 ,
(6210=001111102=3E16). (. .30.3)
:
49
, ,
RG2 0101 0011 0000 0000
0011 1110=53003E(HEX) (DPP)=53h, (DPTR)=003E=3Eh.
- .
##############################################################
: 53h 3Eh
(DPP) (DPTR)
.
##############################################################
I) .
(IDE) MCS-51 Keil
uVision
.
,
Project | Close Project.
50
,
prMyKey .
Select Device for Target .
ADuC812 OK.
, ..
C .
,
.
,
.30.4.
.30.4
51
*.a51. . File | New
Text1 . ,
, . File | Save As
,
prKey_LED.a51 ( a51).
. Files
Source Group 1
Add Files to Group prKey_LED.a51.
Add Close. ,
prKey_LED.a51,
.
.
File | Save All. , .
( ) , .
View Workbook Mode
prKey_LED.a51 :
#include <aduc812.h> END, ,
, aduc812 ,
.
aduc812.h
.
52
II).
.
,
16- , 1 ASCII
. 5
- ( ).
.
. 5
D0..D3 (
SHIFT LINES) 0 (.. ).
D4..D7 (
RETURN LINES).
, .. ,
D4..D7 +U, ..
1 (D7..D4=1111). ,
.1, .1
( D7..D4=1110). , D7..D4
1111,
.
, 1
D7D6D5D4D3D2D1D0 =
11111110 ( 4 ). .1
, 0 col0 row0
D7D6D5D4D3D2D1D0 = 00010000
53
( 4 ). ,
8-
4-,
8- .
. .
##############################################################
: 2
.
##############################################################
, 30.
, .
54
(
*.lst). ,
. ,
, .
( DPP DPPP).
, ,
, (
). ,
.
. .
File | Open.
55
. ERROR.
, ()
, RESET.
,
, 1.
_8: .. jmp _8.
ASCII ,
A=41h.
56
( ).
( ).
##############################################################
: 3 (53h, 3eh
4000h), ,
.
##############################################################
#include <aduc812.h>
Rd_ROW EQU R2;== R2
Wr_COL EQU R3;== R3
Mask
EQU R4;==
R4
DPP_page_num EQU 53h;==
DPTR_KEYreg_num EQU 3eh;== ()
DPTR_LEDreg_num
EQU 3fh;== ()
(. . 30)
Tochka_Vhoda EQU 4000h;==
;================================================
Write MACRO Wr_byte, reg_addr;== - . -
mov DPTR,#reg_addr;== .
mov a,Wr_byte;== Wr_byte
movx @DPTR,a;== / DPTR
ENDM;==
;================================================
Read MACRO Rd_byte, reg_addr;== - . -
mov DPTR,#reg_addr;== .
movx a,@DPTR;== / DPTR
mov Rd_byte,a;==
Rd_byte
ENDM;==
;================================================
CSEG at 0
jmp Tochka_Vhoda
;================================================
ORG Tochka_Vhoda;==
main_prog: ;==
mov DPP,#DPP_page_num
mov Mask,#00010000b;== = 0001 0000 - ROW0
57
_8: ;==
mov Wr_COL,#11111110b;== 1111 1110 - COL0=0 ( D0)
Write Wr_COL,DPTR_KEYreg_num;== '0'
Read Rd_ROW,DPTR_KEYreg_num;==
mov a,Rd_ROW;==
anl a,Mask;== ROW0 ( D4)
cjne a,#0,_8;== D4<>0, .'1'
Write
Wr_COL,DPTR_KEYreg_num)
.0 col0 (.30.5).
(Read Rd_ROW,DPTR_KEYreg_num mov a,Rd_ROW)
.
58
:
,
Write Read
DPTR_KEYreg_num, .
anl a,Mask (ANd Logic) D4 ( row0)
, cjne a,#0,_8 -
-
_8, (jne), .. 1
. 1 D4=0,
,
Write #31h,DPTR_LEDreg_num,
ASCII 1. jmp _8
.
, ,
.
, ,
. ,
, .
,
( ),
.
,
.
uVision2.
IV) .
( ) ,
ASCII
( . Project |
Options for Target) Output
HEX-80.
, OK.
59
, HEX- ,
Rebuild All
Build Target
. Project | Build Target.
<F7>.
, 0
Error(s).
. :
RESET
. HEX-
, ( . 10)
.
C:\EMUL\Work\SDK_11\W_hex202.exe.
*.hex,
, 4000
HEX-....
... ....
, 1 ..
. .1
ASCII :
.
6 .
VB HEX Loader , .. .
#### ####
60
#############################################################
: 3
(#00010000b, #11111110b 31h), ,
, .
#############################################################
,
.
#### ####
V).
.
. (,
) (row) (column)
.
, ,
.
.
, ,
,
, .
.
( )
(
+U) 1. (
) 0.
.
61
,
1.
row0row3 = 1111.
0
() ,
.
, 8, col1
(D3D2D1D0=1101) row2 (D7D6D5D4=1011).
D7D6D5D4 D3D2D1D0=10111101 -
.
, ,
.
,
: 1) 2)
- .
. .
. , 53,
3e 4000 .
62
V-1)
,
.
. , , .
MCS-51
, x86(x64). ,
R6 (
6), ANL
, 6 (c_R).
CJNE , -
, (cur_ROW),
,
.
anl c_R,#11110000b;== 4 ( D7..D4)
cjne cur_ROW,#11110000b,LED_Display;//==
:
, ,
. , ANL A, R5 (
) 1 , ANL A, 5 ( ) 2
,
( 00101101),
(00100101 00000101).
,
63
# . , MOV A,5
5 (
), MOV A,#5 5
( ).
,
.
mov cur_COL,#fst_COL 0
cur_COL (fst_COL first column, ..
, cur_COL current column ).
( Write) (.
.30.3), 4-
col0 ( D0). Read
R6 (cur_ROW). (6 )
ifelse.
, 2 : 1) 4-
0, , 2) 4 , .. .
.
11110000 4 .
, 1111 ( ),
(Compare and Jump if Not Equal CJNE)
( Scan_2_ASCII) -
ASCII .
64
( ) : 21) 0 ( )
cjne
cur_COL,#end_COL,nxt_COL ( nxt_COL
),
2-2) (
cur_COL) (#end_COL) cjne
, clr key_pressed
ret.
,
, : Scan_2_ASCII
nxt_COL. .
V-2) - .
make_scan_code
. 4
4 (
scan_code). scan_code
Ri,
(),
.
.
V-3)
main_prog.
,
cur_COL
. pv (povtor)
. RL
65
(rotate left) , ..
.
scan_2_ASCII. ,
.
.
,
- .
Scan_Key_Once
, , , key_pressed
. Jump if Not Bit
1, wp.
key_pressed 1,
. ,
- make_scan_code.
,
. Scan_Key_Once
, .
key_pressed 0 Jump
if Bit . Write
- .
66
:
#include <aduc812.h>
DPP_page_num EQU 53h;==
DPTR_LEDreg_num
EQU 3fh;== ()
(. . 30)
Tochka_Vhoda EQU 4000h;==
cur_COL
EQU R5;== " 0" (
) R5
c_C
EQU 5;== (alias) 5
cur_ROW EQU R6;== R6
c_R
EQU 6;== (alias) 6
fst_COL
EQU 11111110b;== " " D0
end_COL EQU 11110111b;== " " D3
;===================================================
DSEG at 8;== (
R0..R7)
scan_code: DS 1;== - scan_code
key_num: DS 1;== key_num
ascii_code: DS 1;== ASCII ascii_code
dno_steka: DS 1;== dno_steka (
)
;===================================================
BSEG;==
key_pressed: DBIT 1;== -
;===================================================
Write MACRO Wr_byte, reg_addr;== - .
-
mov DPTR,#reg_addr;== .
mov a,Wr_byte;== Wr_byte
67
mov Rd_byte,a;==
Rd_byte
ENDM;==
;===================================================
CSEG at 0
jmp Tochka_Vhoda;==
ORG Tochka_Vhoda;==
main_prog: ;==
mov DPP,#DPP_page_num;== ,
.
mov sp,#dno_steka;== sp
clr key_pressed;== " "
_8:
wp: call Scan_Key_Once
jnb key_pressed, wp;== (wp- wait for
pressed)
call make_scan_code
wu: call Scan_Key_Once
jb key_pressed, wu;== (wu- wait for
unpressed)
Write scan_code,DPTR_LEDreg_num;== -
jmp _8;==
;===================================================
Scan_Key_Once:
mov cur_COL,#fst_COL;==
Read cur_ROW,DPTR_KEYreg_num;==
;== if cur_ROW<>1111b then ( )
setb key_pressed;== "-"
anl c_R,#11110000b;== 4 ( D7..D4)
cjne cur_ROW,#11110000b,scan_2_ASCII;//==
;== else ( )
;== if cur_COL<>end_COL then ( )
cjne cur_COL,#end_COL,nxt_COL;==
.
;== else ( - )
clr key_pressed;== "-"
;== end if
68
;== end if
ext:
ret;==
;===================================================
make_scan_code:
mov a,cur_COL;==
anl a,#0fh;== 00001111 .
mov scan_code,a;== -
mov a,cur_ROW;==
anl a,#0f0h;== 11110000 .
orl scan_code,a;== . . -
ret
;===================================================
nxt_COL:;== " "
mov a,cur_COL
rl a;== " 0" ( )
mov cur_COL,a
jmp pv;== "0"
;===================================================
scan_2_ASCII:
jmp ext
;===================================================
END
.
, , -
. , , 8
- D7D6D5D4D3D2D1D0=10111101. - 1 D7D6D5D4D3D2D1D0 = 11101110, ..
#### ####
V-4) -
.
,
-.
. -
: -
, ASCII
( - ).
69
-
. -, ,
. - ,
.
, ,
(key_num) : key_num=n*y+x, x
, y , n (
n=4). .
8 ,
. x=1,
y=2.
8 key_num=4*2+1 =9.
,
, 0
.
-
1, n= 4. 4 4 ,
4 swap.
,
:
70
IF ELSEIF..ENDIF
DSPL,
SCAN, KEYN ASCII.
, -,
, ASCII .
scan_code_2_key_num, ,
- : 1 0, 2 1,
.# 14 D 15.
: , asm-51
,
71
x86(x64). , ADD , #,
ADD A, #.
ADD key_num,
#4 (5 ):
push acc;== ( ,
..
;== -)
mov a, key_num
add a,#4
mov key_num,a
pop acc;==
4 inc .
:
#include <aduc812.h>
DPP_page_num EQU 53h;==
DPTR_KEYreg_num EQU 3eh;== ()
DPTR_LEDreg_num
EQU 3fh;== ()
(. . 30)
Tochka_Vhoda EQU 4000h;==
cur_COL
EQU R5;== " 0" ( )
R5
c_C
EQU 5;== (alias) 5
cur_ROW
EQU R6;== R6
c_R
EQU 6;== (alias) 6
fst_COL
EQU 11111110b;== " " D0
end_COL EQU 11110111b;== " " D3
SCAN
EQU 1;==
KEYN
EQU 2;==
ASCII
EQU 3;==
;======================================================
DSEG at 8;== (
R0..R7)
scan_code: DS 1;== - scan_code
key_num: DS 1;== key_num
ascii_code: DS 1;== ASCII ascii_code
dno_steka: DS 1;== dno_steka (
)
;======================================================
BSEG;==
key_pressed: DBIT 1;== -
;=====================================================
Write MACRO Wr_byte, reg_addr;== - . -
72
mov DPTR,#reg_addr;== .
mov a,Wr_byte;== Wr_byte
movx @DPTR,a;== / DPTR
ENDM;==
;=====================================================
Read MACRO Rd_byte, reg_addr;== - . -
mov DPTR,#reg_addr;== .
movx a,@DPTR;== / DPTR
mov Rd_byte,a;==
Rd_byte
ENDM;==
;=====================================================
CSEG at 0
jmp Tochka_Vhoda;==
ORG Tochka_Vhoda;==
main_prog: ;==
mov DPP,#DPP_page_num;== , .
mov sp,#dno_steka;== sp
clr key_pressed;== " "
_8:
wp: call Scan_Key_Once
jnb key_pressed, wp;== (wp- wait for pressed)
call make_scan_code
wu: call Scan_Key_Once
jb key_pressed, wu;== (wu- wait for
unpressed)
DSPL EQU KEYN;== DSPL = KEYN SCAN ASCII
IF (DSPL = SCAN);==
Write scan_code,DPTR_LEDreg_num;== -
ELSEIF (DSPL = KEYN)
Write key_num,DPTR_LEDreg_num;==
ELSEIF (DSPL = ASCII);== ASCII
ENDIF;==
jmp _8;==
;=====================================================
Scan_Key_Once:
mov cur_COL,#fst_COL;==
73
Read cur_ROW,DPTR_KEYreg_num;==
;== if cur_ROW<>1111b then ( )
setb key_pressed;== "-"
anl c_R,#11110000b;== 4 ( D7..D4)
cjne cur_ROW,#11110000b,scan_2_ASCII;//==
;== else ( )
;== if cur_COL<>end_COl then ( )
cjne cur_COL,#end_COL,nxt_COL;== .
;== else ( - )
clr key_pressed;== "-"
;== end if
;== end if
ext:
ret;==
;=====================================================
make_scan_code:
mov a,cur_COL;==
anl a,#0fh;== 00001111 .
mov scan_code,a;== -
mov a,cur_ROW;==
anl a,#0f0h;== 11110000 .
orl scan_code,a;== . . -
ret
;=====================================================
nxt_COL:;== " "
mov a,cur_COL
rl a;== " 0" ( )
mov cur_COL,a
jmp pv;== "0"
;=====================================================
scan_2_ASCII:
call scan_code_2_key_num
jmp ext
;=====================================================
scan_code_2_key_num:
;== -
mov key_num,#0;== . = 0
mov a,scan_code;== . -
74
nc:
rrc a;==
jnc r;== , "0"
inc key_num;== 1
jmp nc;==
r:
mov a,scan_code;== . -
swap a;== (-
)
nr: rrc a;==
jnc ex;== , "0"
inc key_num;== 4
inc key_num
inc key_num
inc key_num
//REPT 4 ;==
//
inc key_num
//ENDM
jmp nr;==
ex: ret;==
;=====================================================
END
.
, , 0 15 (0000000000001111) .
V-5)
ASCII .
ASCII . ASCII
, .
, - ,
key_ASCII. , ,
ASCII 8,
8 ASCII
movc a, @a + DPTR. ,
.
.
, .
75
DSPL ASCII
( DSPL EQU ASCII) .
ASCII .
#### ####
VI)
,
16 , , 4,
. .
.
,
.
76
.
.
#### ####
VII)
(jnb key_pressed, wp;. jb key_pressed,
wu.). , ,
0 ,
-.
( int0 int1).
, 0 intx .
, , .
1.
MCS-51
DST,SRC ,
operand
bit
xrl DST,SRC -
anl DST,SRC -
orl DST,SRC -
clr bit -
setb bit -
cjne mem, #operand, address -
(mem) , .
movx @dptr,a - /
, DPTR.
movx a,@dptr -
jmp address (
LJMP ..,
AJMP SJMP ).
call address address
.
ret ( )
77
reti (
)
push operand
pop operand
inc operand
mov DST,SRC
jnc address , 0
(.. )
rr a (rl a) ()
()
rrc a (rlc a) ()
swap a
movc a, @a + DPTR
DPTR
78
2.
c ,
EPM3064 4 x 4
COLi RG2 ,
() 0111, 1011, 1101, 1110
0111 ..
.
, .
79
, ROWi
3.3 (.1). ,
0 3 COLi
ROWi, .
(4..7)
.
,
,
key_irq. - -
ROWi. key_irq
~INT0 .
()
3.3 .
COLj=1 COLi=0,
.
8-
4 -> 1,
.
80
Yx=Y88
Tochka_Vhoda
3e00
- 2
Yx=Y32
Tochka_Vhoda
5b00
- 3
Yx=Y40
Tochka_Vhoda
25c0
- A
Yx=Y56
Tochka_Vhoda
7a00
- 4
Yx=Y80
Tochka_Vhoda
3d50
- 7
Yx=Y120
Tochka_Vhoda
2a00
- *
Yx=Y72
Tochka_Vhoda
4ee0
- 5
Yx=Y136
Tochka_Vhoda
5d00
- 0
Yx=Y16
Tochka_Vhoda
6AB0
- 8
Yx=Y24
Tochka_Vhoda
44E0
- #
Yx=Y8
Tochka_Vhoda
5E30
- 9
Yx=144
Tochka_Vhoda
2A00
- B
81
1) : ,
,, , RAM, (ALE, #WR, #RD #PSEN).
2) ADuC812.
3) , 24-
RG2. MOVX @DPTR,A MOVX A,@DPTR
( , ).
8.5.1 MK ccea c pe a
RG2.
4)
1) .
.
82
2) :
83
:
.
84
85
Yx=Y88
Tochka_Vhoda
3e00
- 2
Yx=Y32
Tochka_Vhoda
5b00
- 3
Yx=Y40
Tochka_Vhoda
25c0
- A
Yx=Y56
Tochka_Vhoda
7a00
- 4
Yx=Y80
Tochka_Vhoda
3d50
- 7
Yx=Y120
Tochka_Vhoda
2a00
- *
Yx=Y72
Tochka_Vhoda
4ee0
- 5
Yx=Y136
Tochka_Vhoda
5d00
- 0
Yx=Y16
Tochka_Vhoda
6AB0
- 8
Yx=Y24
Tochka_Vhoda
44E0
- #
Yx=Y8
Tochka_Vhoda
5E30
- 9
Yx=144
Tochka_Vhoda
2A00
- B
86
1) : ,
,, , RAM, (ALE, #WR, #RD #PSEN).
2) ADuC812.
3) , 24-
RG2. MOVX @DPTR,A MOVX A,@DPTR
( , ).
8.5.1 MK ccea c pe a
RG2.
4)
3) .
.
87
4) :
88
:
.
89
1. .. : [ ], -
. ; .
; , [. ]. .:
, 2007 . 87 .: . ( .
).
2. ..
ATMEGA 128 68HC908: [ ], -
. ; . ;
, [. ] . .: , 2007 . 107 .:
. ( . )
3. Kae .B. "
",[ ], - .
; . ; ,
[. ]. .: , 2008 . 92 .: .
( . ).
4. http://faculty.ifmo.ru/electron/cons/raspisanie_current.htm
90
2009 ,
12 ,
.
-
, 20092018 .
: ..., . .. .
( )
1945 .
..
,
,
,
, 1938 .,
-
(1946.). .. c 1945 1978 .
50 , .
, 1978 . 1985 . ...,
.. , .. .
1985 . 2006 . ...,
.. ,
.
2006 . ..., ..
,
.
,
,
.
91
..
:
;
;
, ;
;
.
( .. ):
;
600 ;
18
:
;
;
;
.
92
ASM-51
- -
,
.
..
3 00408 05.11.99
_____________
________
____ .
93
-
-
,
197101, -, ., 49