Sei sulla pagina 1di 20

ADDRESS

E000

ADD ALL THE CONTENTS OF AN ARRAY


OPCODE
LABEL
MNEMONIC
OPERAND
3A FF E0
START:
LDA
E0FF

E003
E004
E007

47
21 00 E1
3E 00

MOV
LXI
MVI

B,A
H,E100
A,00

E009

0E 00

MVI

C,00

E00B
E00C
E00F
E010
E011
E012
E015
E018
E019
E01C

86
D2 10 E0
0C
23
05
C2 0B E0
32 00 E2
79
32 01 E2
76

ADD
JNC
INR
INX
DCR
JNZ
STA
MOV
STA
HLT

M
L2
C
H
B
L1
E200
A,C
E201

L1:

L2:

END

COMMENT
E0FF NO OF
TERMS

A TO CONTAIN
SUM FINALLY
C TO CONTAIN
CARRY FINALLY

E200 SUM
E201 CARRY

MOVE THE ELEMENTS OF AN ARRAY STARTING FROM E100 ONWARDS TO E200 ONWARDS

ADDRESS
E000
E003
E004
E007
E00A
E00B
E00E
E00F
E010
E011
E014

OPCODE
3A FF E0
47
21 00 E1
11 00 E2
7E
12
23
13
05
C2 0A E0
76

LABEL
START:

L1:

END

MNEMONIC
LDA
MOV
LXI
LXI
MOV
STAX
INX
INX
DCR
JNZ
HLT

OPERAND
E0FF
B,A
H,E100
D,E200
A,M
D
H
D
B
L1

COMMENT

ADD THE CONTENTS OF 2 ARRAYS STARTING FROM E100 & E200


AND STORE THE RESULT E300 ONWARDS.
ADDRESS
OPCODE
LABEL
MNEMONIC OPERAND
COMMENT

E000

3A FF E0

E003
E004
E007
E008
E009
E00A
E00B
E00C
E00E
E00F
E010
E013

47
21 00 E1
7E
24
86
24
77
26 E1
23
05
C2 07 E0
76

START:

L1:

END

LDA

E0FF

MOV
LXI
MOV
INR
ADD
INR
MOV
MVI
INX
DCR
JNZ
HLT

B,A
H,E100
A,M
H
M
H
M,A
H,E1
H
B
L1

E0FF NO OF
TERMS

TO SHIFT THE ELEMNETS OF N LENGTH ARRAY BY M LENGTH AT FORWARD


DIRECTION.
ADDRESS
OPCODE
LABEL
MNEMONIC OPERAND
COMMENT

E000
E003
E004
E005
E006
E008
E00B
E00C
E00D
E00F
E010
E011
E012
E013
E014
E017

3A FF E0
47
3D
6F
26 E1
3A FE E0
80
5F
16 E1
7E
12
2B
1B
05
C2 0F E0
76

START:

L1:

END

LDA
MOV
DCR
MOV
MVI
LDA
ADD
MOV
MVI
MOV
STAX
DCX
DCX
DCR
JNZ
HLT

E0FF
B,A
A
L,A
H,E1
E0FE
B
E,A
D,E1
A,M
D
H
D
B
L1

E0FF N

E0FEM

TO SHIFT THE ELEMNETS OF N LENGTH ARRAY BY M LENGTH AT BACKWARD


DIRECTION.
ADDRESS
OPCODE
LABEL
MNEMONIC OPERAND
COMMENT

E000
E003
E004
E007
E00A
E00D
E00E
E00F
E010
E013
E014
E015
E016
E017
E018
E01B

ADDRESS

E000
E003
E004
E007
E009
E00A
E00C
E00F
E010
E011
E012
E015
E016
E019

32 EF E0
47
21 00 E1
11 00 E1
32 EE E0
4F
1B
0D
C2 0E E0
7E
12
13
23
05
C2 13 E0
76

START:

L1:

L2:

END

LDA
MOV
LXI
LXI
LDA
MOV
DCX
DCR
JNZ
MOV
STAX
INX
INX
DCR
JNZ
HLT

E0EF
B,A
H,E100
D,E100
E0EE
C,A
D
C
L1
A,M
D
D
H
B
L2

COUNT THE NO OF ZERO ELEMENTS OF AN ARRAY


OPCODE
LABEL
MNEMONIC OPERAND

3A FF E0
47
21 00 E1
0E 00
7E
FE 00
C2 10 E0
0C
23
05
C2 09 E0
79
32 00 E2
76

START:

L1:

L2:

END

LDA
MOV
LXI
MVI
MOV
CPI
JNZ
INR
INX
DCR
JNZ
MOV
STA
HLT

E0FF
B,A
H,E100
C,00
A,M
00
L2
C
H
B
L1
A,C
E200

E0EFN

E0EEM

COMMENT

ADDRESS

DELETE ZERO ELEMENTS FROM AN ARRAY


OPCODE
LABEL
MNEMONIC
OPERAND

E000

3A FF E0

E003
E004

START:

LDA

E0FF

47
21 00 E1

MOV
LXI

B,A
H,E100

E007
E00A
E00B
E00D
E010
E011

11 00 E1
7E
FE 00
CA 12 E0
12
13

LXI
MOV
CPI
JZ
STAX
INX

D,E100
A,M
00
L2
D
D

E012
E013
E014
E017
E018
E019
E01C
E01E
E01F
E020
E023

23
05
C2 0A E0
7D
BB
CA 23 E0
3E FF
12
13
C3 17 E0
76

INX
DCR
JNZ
MOV
CMP
JZ
MVI
STAX
INX
JMP
HLT

H
B
L1
A,L
E
L4
A,FF
D
D
L3

L1:

L2:

L3:

L4:

COMMENT
E0FF N=array
length
H,Loriginal
array
D,Enew array

Storing only zero


terms. Let no of
zero terms be M

H, L point last
element of the
original array D, E
point last
element of new
array. When L= E,
new array
reaches the end
of old array
storing FF at N-M
locations of the
original array

COUNT THE POSTIVE AND NEGETIVE NOS OF AN ARRAY


ADDRESS
OPCODE
LABEL
MNEMONIC
OPERAND
COMMENT

E000
E003
E004
E007
E009
E00A
E00B
E00E

3A FF E0
47
21 00 E1
0E 00
7E
07
D2 0F E0
23

START:

L1:

LDA
MOV
LXI
MVI
MOV
RLC
JNC
INR

E0FF
B,A
H,E100
C,00
A,M
L2
C

C=no of +ve
numbers

E00F
E010
E011
E014
E015
E018
E01B
E01C
E01F
ADDRESS

0C
05
C2 09 E0
79
32 00 E2
3A FF E0
91
32 01 E2
76

L2:

END

INX
DCR
JNZ
MOV
STA
LDA
SUB
STA
HLT

H
B
L1
A,C
E200
E0FF
C
E201

STORE ONLY +ve NOS OF AN ARRAY


OPCODE
LABEL
MNEMONIC OPERAND

E000

3A FF E0

E003
E004
E007
E00A
E00B
E00C
E00F
E010
E011
E012
E013
E014
E017
E018
E019
E01C
E01E
E01F
E020
E023

START:

LDA

E0FF

47
21 00 E1

MOV
LXI

B,A
H,E100

11 00 E1
7E
07
DA 12 E0
0F
12
13
23
05
C2 0A E0
7D
BB
DA 23 E0
3E FF
12
13
C3 17 E0
76

LXI
MOV
RLC
JC
RRC
STAX
INX
INX
DCR
JNZ
MOV
CMP
JC
MVI
STAX
INX
JMP
HLT

D,E100
A,M

L1:

L2:

L3:

L4:

COMMENT
E0FF N=length
of the array
H,Loriginal
array
D,Enew array

L2
D
D
H
B
L1
A,L
E
L4
A,FF
D
D
L3

Storing only +ve


terms. Let no of
+ve terms be M

H, L point last
element of the
original array D, E
point last element
of new array. When
L= E, new array
reaches the end of
old array storing FF
at N-M locations

of the original
array

ADDRESS

TO FIND MAX AND MIN NUMBER OF AN ARRAY


OPCODE
LABEL
MNEMONIC
OPERAND

E000

3A FF E0

E003
E004
E007
E008
E009
E00A
E00B
E00E
E00F
E010
E013
E014
E015
E016
E019
E01A
E01D
E01E
E021

47
21 00 E1
4E
56
7E
B9
DA 0F E0
4F
BA
D2 14 E0
57
23
05
C2 09 E0
79
32 00 E2
7A
32 01 E2
76

ADDRESS

OPCODE

E000
E003
E004
E005
E006
E007
E008
E00B
E00C
E00F

3A 00 E1
07
07
07
07
47
3A 01 E1
80
32 00 E2
76

START:

L1:

L2:

L3:

END

LDA

E0FF

MOV
LXI
MOV
MOV
MOV
CMP
JC
MOV
CMP
JNC
MOV
INX
DCR
JNZ
MOV
STA
MOV
STA
HLT

B,A
H,E100
C,M
D,M
A,M
C
L2
C,A
D
L3
D,A
H
B
L1
A,C
E200
A,D
E201

PACK TWO BCD NUMBERS.


LABEL
MNEMONIC
OPERAND

START:

END

LDA
RLC
RLC
RLC
RLC
MOV
LDA
ADD
STA
HLT

E100

B,A
E101
B
E200

COMMENT
E0FF N=Length
of array

C=MAX
D=MIN

COMMENT

ADDRESS

E000
E003
E005
E006
E007
E008
E009
E00C
E00F
E011
E014

TO UNPACK A BCD NUMBER.


OPCODE
LABEL
MNEMONIC OPERAND

3A 00 E1
E6 F0
07
07
07
07
32 00 E2
3A 00 E1
E6 F0
32 01 E2
76

START:

END

LDA
ANI
RLC
RLC
RLC
RLC
STA
LDA
ANI
STA
HLT

COMMENT

E100
F0

E200
E100
0F
E201

CREATE MOD 100 COUNTER & SHOW THE COUNTS IN DATA FIELD
ADDRESS
OPCODE
LABEL
MNEMONIC OPERAND
COMMENT
E000
3E 00
START:
MVI
A,00
E002
32 F9 FF
STA
FFF9
E005
CD D3 06
L1:
CALL
UPDDT
E008
CD 00 E2
CALL
DELAY
E00B
3A F9 FF
LDA
FFF9
E00E
3C
INR
A
E00F
27
DAA
E010
32 F9 FF
STA
FFF9
E013
FE 00
CPI
00
E015
C2 05 E0
JNZ
L1
E018
C3 00 E0
JMP
START

E200
E203
E204
E205
E206
E209

21 FF FF
2B
7D
B4
C2 03 E2
C9

DELAY:
L2:

LXI
DCX
MOV
ORA
JNZ
RET

H,FFFF
H
A,L
H
L2

ADDRESS

E000
E003
E004
E005
E006
E009
E00A
E00B
E00C
E00F
E010
E011
E012
E013
E014
E015
E016
E019
E01A
E01D

ARRANGE AN ARRAY IN ASCENDING ORDER


OPCODE
LABEL
MNEMONIC
OPERAND

3A FF E0
4F
0D
41
21 00 E1
7E
23
BE
DA 15 E0
57
7E
72
2B
77
23
05
C2 09 E0
0D
C2 05 E0
76

START:

L1:
L2:

L3:

END

LDA
MOV
DCR
MOV
LXI
MOV
INX
CMP
JC
MOV
MOV
MOV
DCX
MOV
INX
DCR
JNZ
DCR
JNZ
HLT

E0FF
C,A
C
B,C
H,E100
A,M
H
M
L3
D,A
A,M
M,D
H
M,A
H
B
L2
C
L1

COMMENT

For DESCENDING
order use JNC
instead of JC.

Swapping the two


consecutive values
if first one is
greater than
second one

STORE TWO NOS ALTERNATIVELY AT 256 MEMORY LOCATIONS.


ADDRESS
OPCODE
LABEL
MNEMONIC
OPERAND
COMMENT

E000

11 00 01

E003
E006
E009
E00A
E00B
E00E
E00F
E010
E011
E012
E013
E014
E017

21 00 E2
3A 00 E1
77
23
3A 01 E1
77
23
1B
1B
7B
B2
C2 06 E0
76

START:
L1:

END

LXI

D,0100

LXI
LDA
MOV
INX
LDA
MOV
INX
DCX
DCX
MOV
ORA
JNZ
HLT

H,E200
E100
M,A
H
E101
M,A
H
D
D
A,E
D
L1

256>FF, hence
REG pair is used.
RSLT:E200 TO E2FF
E1001ST NO

E1012ND NO

FIBONACCI SERIES OF N TERMS(E0FFn, FIBONACCI NOS ARE STORED FROM


E100 ONWARDS)
ADDRESS
OPCODE
LABEL
MNEMONIC
OPERAND
COMMENT
E000
3A FF E0
START:
LDA
E0FF
E003
DE 02
SBI
02
E005
47
MOV
B,A
E006
3E 00
MVI
A,00
E008
32 00 E1
STA
E100
E00B
3E 01
MVI
A,01
E00D
32 01 E1
STA
E101
E010
21 00 E1
LXI
H,E100
E013
7E
L1:
MOV
A,M
E014
23
INX
H
E015
86
ADD
M
E016
23
INX
H
E017
77
MOV
M,A
E018
2B
DCX
H
E019
05
DCR
B
E01A
C2 13 E0
JNZ
L1
E01D
E01F
E022
E025
E028
E02B
E02E
E030
E033
E034
E037
E038
E039
E03C
E03F
E040
E043
E044
E047

3E 00
32 FE E0
3A 00 E1
32 F9 FF
CD D3 06
CD 00 E2
26 E1
3A FE E0
3C
32 FE E0
6F
7E
32 F9 FF
3A FE E0
4F
3A FF E0
B9
C2 28 E0
76

DISPLAY:

L2:

END

MVI
STA
LDA
STA
CALL
CALL
MVI
LDA
INR
STA
MOV
MOV
STA
LDA
MOV
LDA
CMP
JNZ
HLT

A,00
E0FE
E100
FFF9
UPDDT
DELAY
H,E1
E0FE
A
E0FE
L,A
A,M
FFF9
E0FE
C,A
E0FF
C
L2

Avoid DISPLAY
subroutine if it is
not required to
display the
Fibonacci
numbers
continuously in
the data field
and HLT the
program after
JNZ L1

FIND THE TWO'S COMPLEMENT OF 16BIT NO. LET THE UPPER AND LOWER
BYTES ARE AT E100 & E101.STORE THE RSLT E200 ONWARDS.

ADDRESS
E000
E003
E004
E005
E008
E009
E00A
E00C
E00F
E012
E013
E016
E018
E01B
E01C
E01F
E020
E023

OPCODE
3A 00 E1
2F
67
3A 01 E1
2F
6F
3E 00
32 00 E2
11 01 00
19
D2 1B E0
3E 01
32 00 E2
7C
32 01 E2
7D
32 02 E2
76

LABEL
START:

L1:

END

MNEMONIC
LDA
CMA
MOV
LDA
CMA
MOV
MVI
STA
LXI
DAD
JNC
MVI
STA
MOV
STA
MOV
STA
HLT

OPERAND
E100H
H,A
E101H
L,A
A,00
E200H
D,0001H
D
L1
A,01
E200H
A,H
E201H
A,L
E202H

COMMENT

DIVIDE TWO 8 BIT NOS.


LABEL
MNEMONIC OPERAND

ADDRESS

OPCODE

E000
E002
E005
E006
E008
E00B
E00E

0E 00
3A 00 E1
47
FE 00
CA 1A E0
3A 01 E1
57

START:

E00F
E010
E011
E014
E015
E016
E017
E01A
E01C
E01F
E022
E025
E026
E029
E02A
E02D
E030

7A
B8
DA 26 E0
90
0C
57
C3 0F E0
3E FF
32 F9 FF
CD D3 06
C3 30 E0
7A
32 F7 FF
79
32 F8 FF
CD BC 06
76

L1:

L2:

L3:

L4:

MVI
LDA
MOV
CPI
JZ
LDA
MOV

C,00
E100
B,A
00
L2
E101
D,A

MOV
CMP
JC
SUB
INR
MOV
JMP
MVI
STA
CALL
JMP
MOV
STA
MOV
STA
CALL
HLT

A,D
B
L3
B
C
D,A
L1
A,FF
FFF9
UPDDT
L4
A,D
FFF7
A,C
FFF8
UPDAD

COMMENT
CQUOTIENT
E100 DIVISOR

E101 DIVIDEND
DREMAINDER.
Initially set
REMAINDER=DIVISOR
Continue division until
DIVISOR<REMAINDER

If divisor is zero display


FF at data field
denoting UNDEFINED.
Display the result in
address field.
FFF7REMAINDER
FFF8QUOTIENT

ADDRESS

OPCODE

E000
E003
E006
E009
E00A
E00D
E00E
E00F
E011
E014
E015
E016
E019
E01A
E01D
E01E
E021
E024

11 00 00
21 00 00
3A 00 E1
5F
3A 01 E1
47
78
FE 00
CA 19 E0
19
05
C3 0E E0
7C
32 F8 FF
7D
32 F7 FF
CD BC 06
76

DECIMAL NO.

MULTIPLY TWO 8 BIT NOS.


LABEL MNEMONIC OPERAND

START:

L1:

L2:

END

LXI
LXI
LDA
MOV
LDA
MOV
MOV
CPI
JZ
DAD
DCR
JMP
MOV
STA
MOV
STA
CALL
HLT

D,0000
H,0000
E100
E,A
E101
B,A
A,B
00
L2
D
B
L1
A,H
FFF8
A,L
FFF7
UPDAD

COMMENT

E1001ST NO.
D,E 1ST NO.
E1012ND NO.
B2ND NO=LOOP COUNTER.

Check if B==0 or not. If yes


result of multiplication is
zero
Repetitively content of D,E
(1st no)for B (2nd no) times
Store the result to desired
location and display.

FACTORIAL
DECIMAL VALUE
HEXADECIMAL VALUE
0
1D
1H
1
1D
1H
2
2D
2H
3
6D
6H
4
24 D
18 H
5
120 D
78 H
6
720 D
02D0 H
7
5040 D
13B0 H
8
40320 D
9D80 H
9
362880 D
58980 H
Note: - 9! Onwards at least 3 memory locations are needed to store the result. Which are
assumed as E100, E101, E102.

ADDRESS

OPCODE

E000
E002
E005
E008
E00A
E00D
E00F
E011
E014
E016
E019
E01B
E01E
E01F
E021
E022
E023
E025
E028
E029
E02C
E02F
E030
E033
E034
E037
E200
E203
E204
E205
E208
E209
E20A
E20D
E20E
E20F
E210

3E 00
32 00 E1
32 01 E1
3E 01
32 02 E1
26 00
2E 01
3A FF E0
FE 00
CA 37 E0
FE 01
CA 37 E0
5F
16 00
3D
4F
3E 00
CD E2 00
0D
C2 25 E0
32 00 E0
7C
32 01 E0
7D
32 02 E0
76
21 00 00
41
19
D2 09 E2
41
0D
C2 04 E2
54
5D
48
C9

FIND THE FACTORIAL OF A NO.


LABEL
MNEMONIC OPERAND

START:

L1:

END
FACT:
L2:

L3:

MVI
STA
STA
MVI
STA
MVI
MVI
LDA
CPI
JZ
CPI
JZ
MOV
MOV
DCR
MOV
MVI
CALL
DCR
JNZ
STA
MOV
STA
MOV
STA
HLT
LXI
MOV
DAD
JNC
INR
DCR
JNZ
MOV
MOV
MOV
RET

A,00
E100
E101
A,01
E102
H,00
L,01
E0FF
00
END
01
END
E,A
D,00
A
C,A
A,00
FACT
C
L1
E100
A,H
E101
A,L
E102
H,0000
B,C
D
L3
A
C
L2
D,H
E,L
C,B

COMMENT
E100, E101, E102-
00, 00, 01 stored for 0!
And 1!

E0ff no
To check if no is 0.
To check if no is 1.

GENERATE STEPPED WAVEFORM(5 steps)


ADDRESS

OPCODE

LABEL

MNEMONIC

OPERAND

COMMENT

E000

3E 80

START:

MVI

A,80

PA is configured as O/P
Port.

E002
E004
E006
E008
E00B
E00D
E00F
E012
E014
E017
E019
E01B
E01E

D3 CSR
3E 00
D3 PA
CD 00 E2
C6 33
FE FF
C2 06 E0
D3 PA
CD 00 E2
DE 33
FE 00
C2 12 E0
C3 06 E0

OUT
MVI
OUT
CALL
ADI
CPI
JNZ
OUT
CALL
SBI
CPI
JNZ
JMP

CSR
A,00
PA
DELAY
33H
FFH
L1
PA
DELAY
33H
00H
L2
L1

E200
E203
E204
E205
E206
E207
E20A
E20B

21 FF 00
57
2B
7D
B4
C2 04 E2
7A
C9

LXI
MOV
DCX
MOV
ORA
JNZ
MOV
RET

H,00FF
D,A
H
A,L
H
L3
A,D

L1:

L2:

DELAY:
L3:

255(FFH)/5=51=33H

ADDRESS
E000

OPCODE
3E 80

E002
E004
E006
E008
E009
E00B
E00E

D3 CSR
3E 00
D3 PA
3C
FE 00
C2 06 E0
C3 04 E0

ADDRESS
E000
E002
E004
E006
E008
E009
E00B
E00E
E010
E011
E013
E016

OPCODE
3E 80
D3 CSR
3E 00
D3 PA
3C
FE FF
C2 06 E0
D3 PA
3D
FE 00
C2 0E E0
C3 04 E0

GENERATE SAW-TOOTH WAVE


LABEL
MNEMONIC OPERAND
START:
MVI
A,80

L1:
L2:

OUT
MVI
OUT
INR
CPI
JNZ
JMP

COMMENT
PA is configured as O/P
Port.

CSR
A,00
PA
A
00
L2
L1

GENERATE TRIANGULAR WAVE


LABEL
MNEMONIC OPERAND
START:
MVI
A,80
OUT
CSR
L1:
MVI
A,00
L2:
OUT
PA
INR
A
CPI
FF
JNZ
L2
L3:
OUT
PA
DCR
A
CPI
00
JNZ
L3
JMP
L1

COMMENT

Steps of ADC: I.
II.
III.
IV.
V.
VI.
VII.

VIII.

Port configuration (PAI/P, PB O/P)


Channel selection.
Chip enable by sending a pulse (set and reset PC7).
Read digital data and find the EOC (End of Conversion) when P A7 = high (1).
Turn on latch (PC6=high).
Display output.
Turn off latch. (PC6=low)
Run infinite loop to continue the process throughout the entire analog signal.

ADDRESS

OPCODE

LABEL

E000
E002
E004
E006
E008
E00A
E00C
E00E
E010
E012
E013
E016
E018
E01A
E01C
E01F
E022
E024
E026

3E 90
D3 CSR
3E 00
D3 PC
3E 0F
D3 CSR
3E 0E
D3 CSR
DB PA
07
C2 10 E0
3E 0D
D3 CSR
DB PA
32 F9 FF
CD D3 06
3E 0C
D3 CSR
C3 08 E0

START:

L2:

L1:

ADC
MNEMONIC

MVI
OUT
MVI
OUT
MVI
OUT
MVI
OUT
IN
RLC
JNC
MVI
OUT
IN
STA
CALL
MVI
OUT
JMP

OPERAND

A,90
CSR
A,00
PC
A,0F
CSR
0E
CSR
PA
L1
A,0D
CSR
PA
FFF9
UPDDT
A,0C
CSR
L2

COMMENT
Port config.
PAi/p, PBo/p
Selection of
Channel 0
Set and Reset PC7 to
Enable ADC chip.
0Fset ,0Ereset
Read PA and check
continuously if
PA7 =1 for EOC.
If PA7 =1, turn on
LATCH by setting
PC6 bit and then
display the digital
o/p data.
Turn off LATCH by
resetting PC6 bit.
Infinite Loop.

DCM (DC MOTOR)


LATCH BITS: (LDS are at common anode hence to turn them on reset corresponding bits)

BITS

L7

L6

L5

L4

L3

L2

L1

L0

NAME

LD1

LD2

LD3

DTR1

DTR2

SPEED

DONT
CARE

DONT
CARE

Should be
glow to
indicate
ANTI CLK
WISE.
Rotation
0=ANTI
CLK WISE
1= does
not glow

Should be
glow to
indicate
Motor is
rotating.
0=when
motor
rotates
1=when
motor is
stopped

1=CLK
WISE
0=ANTI
CLK WISE

0=CLK
WISE
1=ANTI
CLK WISE

0=to
rotate
motor
1=to stop
running
motor

usually
reset
i.e. 0

usually
reset
i.e. 0

Should be
glow to
FUNCTION indicate
CLK WISE
rotation.
0=CLK WISE
1=does not
glow

SET both as 1 to
STOP MOTOR.

CONTROL WORDS
L5
L4
L3

BITS

L7

L6

L2

L1

L0

NAME

LD1

LD2

LD3

DTR1

DTR2

SPEED

DONT
CARE

DONT
CARE

CLK
WISE=50H

ANTI CLK
WISE=88H

STOP THE
MOTOR=FFH

0/1

0/1

ADDRESS

OPCODE

E000
E002
E004

3E 50
D3 LATCH
76

ADDRESS

E000
E002
E004

START:
END

MVI
OUT
HLT

3E 88
D3 LATCH
76
OPCODE

E000
E002
E004

3E FF
D3 LATCH
76

START:
END

MVI
OUT
HLT

END

MVI
OUT
HLT

COMMENT

A,88
LATCH

STOP RUNNING DCM


LABEL
MNEMONIC OPERAND

START:

COMMENT

A,50
LATCH

ROTATE DCM ANTI CLK WISE


OPCODE
LABEL
MNEMONIC OPERAND

ADDRESS

ADDRESS

ROTATE DCM CLK WISE


LABEL
MNEMONIC OPERAND

COMMENT

A,FF
LATCH

RUN DCM SLOWLY (PWM)


OPCODE
LABEL
MNEMONIC OPERAND

E000
E002
E004
E007
E009
E00B
E00E

3E 88
D3 LATCH
CD 00 E2
3E FF
D3 LATCH
CD 00 E2
C3 00 E0

START:

MVI
OUT
CALL
MVI
OUT
CALL
JMP

A,88
LATCH
DELAY
A,FF
LATCH
DELAY
START

E200

21 10 08

DELAY:

LXI

H,0810

E203
E204
E205
E206
E209

2B
7D
B4
C2 03 E2
C9

L2:

DCX
MOV
ORA
JNZ
RET

H
A,L
H
L2

COMMENT

Try to
remember
this value

Rotation(Degree)
180

LOOP COUNTER(LC)
180/1.8=100D, There are 4 coils.
Hence LC=100/4=25D=19H
90/1.8=50, LC=50/4=12.5 which is not possible
to set.
Hence take LC=48/4= 12D=0CH run the loop 0C
times and after outside the loop excite only
two coils

90

ADDRESS

STEPPER MOTOR(180 deg clockwise)


OPCODE
LABEL
MNEMONIC OPERAND

COMMENT

A,80
CSR
B,19
A,0E
PC
DELAY
A,0D
PC
DELAY
A,0B
PC
DELAY
A,07
PC
DELAY
B
L1

Configure PC as o/p
port.

END

MVI
OUT
MVI
MVI
OUT
CALL
MVI
OUT
CALL
MVI
OUT
CALL
MVI
OUT
CALL
DCR
JNZ
HLT

21 FF 10

DELAY:

LXI

H,10FF

Change the value if


required

2B
7D
B4
C2 03 E2
C9

L2:

DCX
MOV
ORA
JNZ
RET

H
A,L
H
L2

E000
E002
E004
E006
E008
E00A
E00D
E00F
E011
E014
E016
E018
E01B
E01D
E01F
E022
E023
E026

3E 80
D3 CSR
06 19
3E 0E
D3 PC
CD 00 E2
3E 0E
D3 PC
CD 00 E2
3E 0E
D3 PC
CD 00 E2
3E 0E
D3 PC
CD 00 E2
05
C2 O6 E0
76

START:

E200
E203
E204
E205
E206
E209

L1:

B=19H=LOOP CNTR.

Consecutively excite
the 4 coils one after
another with proper
delay.
For clockwise
0E0D0B0E
For anticlockwise
070B0D0E

ADDRESS

STEPPER MOTOR(90 deg clockwise)


OPCODE
LABEL
MNEMONIC OPERAND

E000

3E 80

E002
E004
E006
E008
E00A
E00D
E00F
E011
E014
E016
E018
E01B
E01D
E01F
E022
E023
E026
E028
E02A
E02D
E02F
E032
E035

D3 CSR
06 19
3E 0E
D3 PC
CD 00 E2
3E 0E
D3 PC
CD 00 E2
3E 0E
D3 PC
CD 00 E2
3E 0E
D3 PC
CD 00 E2
05
C2 O6 E0
3E 0E
D3 PC
CD 00 E2
3E 0E
D3 PC
CD 00 E2
76

E200
E203
E204
E205
E206
E209

START:

MVI

A,80
CSR
B,0C
A,0E
PC
DELAY
A,0D
PC
DELAY
A,0B
PC
DELAY
A,07
PC
DELAY
B
L1
A,0E
PC
DELAY
A,0D
PC
DELAY

END

OUT
MVI
MVI
OUT
CALL
MVI
OUT
CALL
MVI
OUT
CALL
MVI
OUT
CALL
DCR
JNZ
MVI
OUT
CALL
MVI
OUT
CALL
HLT

21 FF 10

DELAY:

LXI

H,10FF

2B
7D
B4
C2 03 E2
C9

L2:

DCX
MOV
ORA
JNZ
RET

H
A,L
H
L2

L1:

COMMENT
Configure PC as o/p
port.
B=0CH=LOOP CNTR.

Consecutively excite
the 4 coils one after
another with proper
delay. Total 48 times
it runs.

Additional 2 times to
make 50 times run.
50*1.8=90 deg

Change the value if


required

Potrebbero piacerti anche