Anda di halaman 1dari 15

Subrutin Delay

8.1 PENGERTIAN SUBRUTIN


Subrutin adalah program singkat yang dibuat dan dapat dipanggil oleh program
utama melalui intruksi tertentu. Program subrutin dibuat pada alamat tertentu yang berbeda
dengan alamat program utama. Pada programnya, subrutin selalu diakhiri dengan intruksi
RET (return).
Program subrutin akan berjalan jika kita memanggilnya dengan intruksi CALL dan
diiringi oleh alamat awal program tersebut disimpan. Ketika mikroprosesor menerima
instuksi CALL maka akan menghentikan secara sementara instruksi yang sedang
dilaksanakan kemudian menyimpan alamat setelah instruksi yang telah dihentikannya
kedalam Stack Pointer (SP) dan mengganti/mengisi alamat pada Programable Counter (PC)
dengan alamat awal subrutin tersebut. Dan program subrutin akan berakhir ketika kita
program menemukan intruksi RET. Maka, program akan kembali menuju program utama.
Program yang biasa dijadikan subrutin delay adalah sebagai berikut:
Delay
Fungsi
Formula, dll.
8.2 SUBRUTIN DELAY
Subrutin delay adalah suatu subrutin yang digunakan untuk men-delay suatu
program utama. Kita dapat membuat dan merancang suatu subrutin delay dengan waktuwaktu yang dibutuhkan oleh program utama atau sesuai dengan keinginan kita.

Bab 8 Subrutin Delay

100

Dalam perancangannya, kita harus mengetahui berapa besar Periode Clock/Time


Clock (Tc) yang dimiliki oleh masing-masing intruksi yang ada pada Trainer MIDICOM
i8085. Berikut merupakan tabel klasifikasi set instruksi berdasarkan jumlah Tc nya :
NO.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

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

utama jika Z=1


Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama jika Z=0
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama jika CY=1
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama jika CY=0
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama jika PE=1
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama jika PE=0
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama jika S=1
Mengakhiri prog. subrutin atau prog.
interupsi, kembali melanjutkan program
utama jika S=0
AM
MC
A 34
D 6F
A [BC]
A [DE]
[BC] A
[DE] A
DE HL
AA+M
A A+ 55
A A+ M + CY
A A+ 77 + CY
AAM
A A 89
A A M CY
A A 45 CY
A A M
A A 88
A A VM

Bab 8 Subrutin Delay

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

Bab 8 Subrutin Delay

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

Mengembalikan data 16 bit dari puncak


STACK ke pasangan register BC
BC TOS
Mengembalikan data 16 bit dari puncak
STACK ke pasangan register DE
DE TOS
Mengembalikan data 16 bit dari puncak
STACK ke pasangan register HL
HL TOS
Mengembalikan data 16 bit dari puncak
STACK ke pasangan register A & F
A & F TOS
Membaca data 8 bit dari input Port
alamat 51H.
A PORT INPUT 51
Mengirim data 8 bit ke port output
alamat 50H.
PORT 50 H A
RESTART n
n(0-7)
Mengamankan isi pasangan REG. BC ke
STACK
TOS BC
Mengamankan isi pasangan REG. DE ke
STACK
TOS DE
Mengamankan isi pasangan REG. HL ke
STACK
TOS HL
Mengamankan isi pasangan REG. A & F
ke STACK
TOS A & F
A [7890]
[7788] A
HL TOS
L [7788]
H [7789]
[9977] A
[9978] A
Memanggil subrutin pada alamat 8899

10

12

13

16

18

Tabel 8.1 Klasifikasi Set Instruksi 8085 berdasarkan jumlah Tc

Bab 8 Subrutin Delay

104

8.3 MACAM-MACAM SUBRUTIN DELAY


a. Subrutin Delay dengan 1 Register 8 bit
n =1

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 :

Dengan acuan seperti di atas kita ketahui bahwa :


Delay minimum diperoleh saat n = 1
Delay maksimum diperoleh saat n = 0, n = 256
RU D1R8

= (14n+32) Tc
= 14( 256 ) + 32
= 3616 Tc = (3616 x 0,326 x 10-6) = 1,178816 ms

Bab 8 Subrutin Delay

105

Contoh

Rancang subrutin delay 255 s!


Penyelesaian :
Mencari nilai periode clock dalam Tc

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

Catatan : Nilai n harus selalu dibulatkan ke bawah.


Substitusikan nilai n (dalam decimal) ke rumus umum delay 1 Register 8 bit. Jika n =
53 maka :
D1R8 = (14n+32) Tc
= (14 x 53 + 32) Tc
=

= 242.544 s

Mencari selisih waktu atau kekurangan waktu.


Selisih waktu = (782 + 774) Tc
= 8 Tc
Untuk menutupi kekurangan waktu tersebut kita harus menyisipkan instruksiinstruksi yang sesuai jumlah Tc nya. Karena kekurangan waktunya sebesar 8 Tc maka
kita cukup menyisipkan instruksi NOP sebanyak 2 kali sebelum RET.
Catatan : Jika besar selisih waktunya tidak ada sisipan yang pas, kurangi nilai n.
Menghitung presentasi kesalahan (error) dari subrutin delay yang dibuat.
(
)
% error
=
x 100 %
= 4.88 %

Bab 8 Subrutin Delay

106

Rancangan subrutin delay 255 s :


Delay 1R

Analisa :
Register B diisi dengan nilai n yang telah kita hitung

B!35

sebelumnya, yaitu 35 (heksadesimal dari 53). Perlu diingat


B!B-1

bahwa niali n yang diinputkan ke dalam program harus


Y

Z=0

dalam bentuk bilangan heksadesimal karena prosesor hanya


menerima bilangan heksadesimal. Register B dikurangi sat

T
NOP
NOP
RET

uterus menerus sampai zeroflagnya sama dengan 1.


Dilanjutnkan ke insturksi sisipan yang sebelumnya telah
kita cari. Subrutin di return ke program utama.

b. Subrutin Delay dengan 2 Register 8 bit


n =1
18 Tc

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

Bab 8 Subrutin Delay

107

Maka, Rumus Umumnya adalah :


RU D2R8 = (14rp +18r+ 32) Tc
Delay minimum diperoleh saat n = 1
Delay maksimum diperoleh saat n = 0, n = 256
RU D2R8

= (14rp +18r+ 32) Tc


= (14x2562 +18x256+ 32) Tc
= 922144Tc = (922144 x 0,326 x 10-6) = 300.6 ms

Contoh

Rancang subrutin delay 2.3 ms!


Penyelesaian :
Mencari nilai periode clock dalam Tc

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

= (14rp +18r+ 32) Tc


= (14x50r +18r+ 32) 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.

Bab 8 Subrutin Delay

108

Masukan ke rumus umum delay 1 register, untuk mencari nilai n.


561 Tc = (14n+32) Tc
(

= 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

Bab 8 Subrutin Delay

109

c. Subrutin Delay dengan 2 Register 8 bit


n =1
18 Tc

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

= (14kts + 18kt + 18k + 32) Tc


= (14x2563 + 18 x2562 + 18 x256+ 32) Tc Tc
= 236065312 Tc = (236065312 x 0,326 x 10-6) = 76.96 s

Bab 8 Subrutin Delay

110

Contoh

Rancang subrutin delay 3 s!


Penyelesaian :
Mencari nilai periode clock dalam Tc

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

= (14kts + 18kt + 18k + 32) Tc


= (14(60)2k + 18(60)k + 18k + 32) 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

= (14rp +18r+ 32) Tc


= (14x60r +18r+ 32) 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

CALL Delay 1R8

RET

Bab 8 Subrutin Delay

112

d. Subrutin Delay dengan 1 Register Pair 16 bit


n =1
18 Tc

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

Bab 8 Subrutin Delay

113

e. Subrutin Delay dengan 2 Register Pair 32 bit


18 Tc

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

= (16rp + 39r + 51) Tc


= (16x655362 + 3965536 + 51) Tc
= 6.872203269x1010 Tc
= (6.872203269x1010 x 0,326 x 10-6) = 22403.38266 s

Bab 8 Subrutin Delay

114

Anda mungkin juga menyukai