100
MNEMONIC
ADD B
ADC D
SUB D
SBB C
INR C
DCR B
DAA
CMP D
ANA D
XRA B
ORA C
CMA
CMC
STC
RAR
RAL
RRC
RLC
EI
DI
NOP
RIM
SIM
HLT
INX H
INX B
INX D
INX SP
DCX B
DCX D
DCX H
DCX SP
PCHL
SPHL
35
RZ
KETERANGAN
A A+ B
A A + D + CY
AAD
A A C CY
C C+ 1
BB1
A BCD
AD
A A D
A A VD
A A VD
A NOT A
CY NOT CY
CY 1
Rotate Accumulator Right
Rotate Accumulator Left
Rotate Right Trough Carry
Rotate Left Trough Carry
Enable Interrupt
Dissable Interrupt
No Operation
Read Inteerpt Mask
Set Interrupt Mask
Halt
HL HL +1
BC BC +1
DE DE +1
SP SP +1
BC BC 1
DE DE 1
HL HL 1
SP SP 1
PC HL
SP HL
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
Bab 8 Subrutin Delay
Tc
101
36
RNZ
37
RC
38
RNC
39
RPE
40
RPO
41
RM
42
RP
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
MOV A,M
MOV M,C
MVI A,34
MVI D,6F
LDAX B
LDAX D
STAX B
STAX D
XCHG
ADD M
ADI 55
ADC M
ACI 77
SUB M
SUI 89
SBB M
SBI 45
ANA M
ANI 88
XRA M
6/12
102
63
64
65
66
67
68
69
70
71
72
73
XRI 77
ORA M
ORI 44
JZ 7788
JNZ 7788
JC 8899
JNC 8899
JPE 8877
JPO 7766
JM 8866
JP 9944
74
CZ 7788
75
CNZ 7788
76
CC 8899
77
CNC 8899
78
CPE 7755
79
CPO7766
80
CM 8866
81
CP 9944
82
83
84
85
86
87
88
89
90
91
91
92
INR M
DCR M
MVI M,66
LXI H,8977
LXI B,ABCD
LXI D,A579
LXI SP,FFFF
DAD B
DAD D
DAD H
DAD SP
JMP 8877
93
RET
A A V77
A A VM
A A V44
Lompat ke alamat 7788 jika Z=1
Lompat ke alamat 7788 jika Z=0
Lompat ke alamat 8899 jika CY=1
Lompat ke alamat 8899 jika CY=0
Lompat ke alamat 8877 jika PE=1
Lompat ke alamat 7766 jika PE=0
Lompat ke alamat 8866 jika S=1
Lompat ke alamat 9944 jika S=0
Memanggil subrutin pada alamat 7788
jika Z=1
Memanggil subrutin pada alamat 7788
jika Z=0
Memanggil subrutin pada alamat 8899
jika CY=1
Memanggil subrutin pada alamat
8899jika CY=0
Memanggil subrutin pada alamat 7755
jika PE=1
Memanggil subrutin pada alamat 7788
jika PE=0
Memanggil subrutin pada alamat 7788
jika S=1
Memanggil subrutin pada alamat 7788
jika S=0
AM+1
MM1
M 66
HL 8977
BC ABCD
DE A579
SP FFFF
HL HL +BC
HL HL +DE
HL HL +HL
HL HL +SP
Lompat tanpa syarat ke alamat 8877
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama
7/10
9/18
10
103
94
POP B
95
POP D
96
POP H
97
POP PSW
98
IN 51
99
OUT 50
100
RST n
101
PUSH B
102
PUSH D
103
PUSH H
104
PUSH PSW
105
106
107
LDA 7890
STA 7788
XTHL
108
LHLD 7788
109
SHLD 9977
110
CALL 8899
10
12
13
16
18
104
n =2
18 Tc
18 Tc
18
7 Tc
7 Tc
4 Tc
10 Tc
7 Tc
2x4 Tc
(10+7) Tc
10 Tc
4n
10( n 1 ) + 7
10 Tc
10
Dari diagram alir diatas, dapat ditentukan Rumus Umum untuk delay dengan 1
register 8 bit, yaitu :
Delay 1R8 = ( 7 + 10 +18 ) + 4n + (10n-3)
= 35 + 4n + 10n-3
Maka, Rumus Umumnya adalah :
RU D1R8 = (14n + 32) Tc
Trainer Midicom memiliki nilai frekuensi clock (fc) sebesar 3,072 MHz. Maka
besarnya periode clock :
= (14n+32) Tc
= 14( 256 ) + 32
= 3616 Tc = (3616 x 0,326 x 10-6) = 1,178816 ms
105
Contoh
Catatan : Jika angka di belakang koma 5 maka bulatkan ke atas dan sebaliknya jika
< 5 maka bulatkan ke bawah.
Masukan ke rumus umum delay 1 register, untuk mencari nilai n.
782 Tc = (14n+32) Tc
(
= 53.571428
(53)10 = (35)16
= 242.544 s
106
Analisa :
Register B diisi dengan nilai n yang telah kita hitung
B!35
Z=0
T
NOP
NOP
RET
18
7 Tc
7 Tc
7r
4 Tc
4 rp
10 Tc
(10p-3)r
7 Tc
4 Tc
4r
10 Tc
(10r-3)
7 Tc
10 Tc
10
Dari diagram alir diatas, dapat ditentukan Rumus Umum untuk delay dengan
12register 8 bit, yaitu :
Delay 2R8 = ( 7 + 10 +18 ) + 7r +4rp +10rp-3r+ 10r-3+4r
107
Contoh
Buat pemisalan nilai p, untuk mencari nilai r dengan cara dimasukan ke rumus umum
delay 2 register.
Misal, p = (50)10 = (32)16
7055 Tc
= 9.78
Catatan : Nilai r harus <256. Jika nilai r >256 maka nilai pemisalan p harus ditambah.
Substitusikan nilai r (dalam decimal) ke rumus umum delay 2 Register 8 bit. Jika n = 9
maka :
D1R8 = (14rp +18r+ 32)
= (14x9x50 +18x9+ 32)
= 6494 Tc
Mencari selisih waktu atau kekurangan waktu.
Selisih waktu = (7055 + 6494) Tc
= 561 Tc
Kekurangan waktu terlalu besar, butuh sisipan instruksi-instruksi yang banyak.
Maka dari itu, kita harus merancang lagi subrutin delay 561 Tc dengan 1 Register 8 bit.
108
= 37.78
(37)10 = (25)16
Substitusikan nilai n (dalam decimal) ke rumus umum delay 1 Register 8 bit. Jika n =
37 maka :
D1R8 = (14n+32) Tc
= (14 x 37 + 32) Tc
= 550 Tc
Mencari selisih waktu atau kekurangan waktu.
Selisih waktu = (561 + 550) Tc
= 11 Tc
Untuk menutupi kekurangan waktu tersebut kita harus menyisipkan instruksiinstruksi yang sesuai jumlah Tc nya. Karena kekurangan waktunya sebesar 11 Tc maka
kita cukup menyisipkan instruksi NOP sebanyak 4 kali dan MVI B, 00 sebanyak satu
kali sebelum RET.
Rancangan subrutin delay 2.3 ms :
Delay 2R
Delay 1R
B!09
B!25
C!32
B!B-1
C!C-1
Y
Y
Z=0
Z=0
T
B!B-1
Y
Z=0
T
NOP
NOP
NOP
NOP
B!00
RET
CALL Delay 1R
RET
109
18
7 Tc
7 Tc
7k
7 Tc
7 kt
4 Tc
4 kts
10 Tc
10 kts -3 kt
7 Tc
4 Tc
4 kt
10 Tc
10 kt -3 k
7 Tc
4 Tc
4k
10 Tc
10-3k
Tc
7 Tc
10 Tc
10
Dari diagram alir diatas, dapat ditentukan Rumus Umum untuk delay dengan 3
register 8 bit, yaitu :
RU D3R8 = (14kts + 18kt + 18k + 32) Tc
Delay minimum diperoleh saat n = 1
Delay maksimum diperoleh saat n = 0, n = 256
RU D2R8
110
Contoh
Buat pemisalan nilai t dan s, untuk mencari nilai k dengan cara dimasukan ke rumus
umum delay 3 register.
Misal, t = s = (60)10 = (3C)16
9202454 Tc
= 178.6947454
(178)10 = (B2)16
Substitusikan nilai k (dalam decimal) ke rumus umum delay 3 Register 8 bit. Jika n =
178 maka :
D1R8 = (14(60)2(178) + 18(60) (178) + 18(178)+ 32) Tc
= 91666676 Tc
Mencari selisih waktu atau kekurangan waktu.
Selisih waktu = (9202454 + 91666676) Tc
= 35778 Tc
Kita harus merancang lagi subrutin delay 35778 Tc dengan 2 Register 8 bit.
Buat pemisalan nilai p, untuk mencari nilai r dengan cara dimasukan ke rumus umum
delay 2 register.
Misal, p = (60)10 = (3C)16
35778 Tc
= 41.66200466
(41)10 = (29)16
Substitusikan nilai r (dalam decimal) ke rumus umum delay 3 Register 8 bit. Jika n =
41 maka :
D1R8 = (14(60)(41) + 18(41)+ 32) Tc
= 35210 Tc
Mencari selisih waktu atau kekurangan waktu.
Selisih waktu = (35778 35210) Tc
= 568 Tc
Bab 8 Subrutin Delay
111
Kita harus merancang lagi subrutin delay 568 Tc dengan 1 Register 8 bit.
Masukan ke rumus umum delay 1 register, untuk mencari nilai n.
568 Tc = (14n+32) Tc
(
= 38.28571429
(38)10 = (26)16
Substitusikan nilai n (dalam decimal) ke rumus umum delay 1 Register 8 bit. Jika n =
38 maka :
D1R8 = (14n+32) Tc
= (14 x 38 + 32) Tc
= 564 Tc
Mencari selisih waktu atau kekurangan waktu.
Selisih waktu = (568 564) Tc
= 4 Tc
Karena kekurangan waktunya sebesar 4 Tc maka kita cukup menyisipkan instruksi
NOP sebanyak 1 sebelum RET.
Rancangan subrutin delay 3 s :
Delay 3R8
B!B2
C!3C
D!3C
D!D-1
Y
Z=0
T
C!C-1
Z=0
T
B!B-1
Y
Z=0
T
CALL Delay 2R8
RET
112
18
10Tc
10
6 Tc
6n+6
10 Tc
(10n+7) Tc
7 Tc
10 Tc
10 Tc
Dari diagram alir diatas, dapat ditentukan Rumus Umum untuk delay dengan 1
register pair 16 bit, yaitu :
RU D1RP = (16n + 51) Tc
Delay minimum diperoleh saat n = 1
Delay maksimum diperoleh saat n = 0, n = 65536
RU D1RP
= (16n + 51) Tc
= (16x65536 + 51) Tc
= 1048627 Tc = (1048627 x 0,326 x 10-6) = 341 ms
113
18
10 Tc
10
10Tc
10r
10 Tc
6rp + 6r
10 Tc
10pr+ 7r
7 Tc
6 Tc
6r + 6
10 Tc
10r + 7
7 Tc
10 Tc
10 Tc
Dari diagram alir diatas, dapat ditentukan Rumus Umum untuk delay dengan 2
register pair 16 bit, yaitu :
RU D2RP = (16rp + 39r + 51) Tc
Delay minimum diperoleh saat n = 1
Delay maksimum diperoleh saat n = 0, n = 65536
RU D1RP
114