Anda di halaman 1dari 16

SIKLUS MESIN

& MENGHITUNG WAKTU TUNDA


Siklus Mesin

Siklus Mesin (Machine Cycle). Untuk CPU menjalankan


setiap instruksinya dibutuhkan beberappa ciklus
clock. Pada keluarga 8051, siklus clock ini
kemudian disebut dengan machine cycle. Berserta
siklus mesin-nya. Untuk menghitung tundaan waktu,
kita menggunakan daftar ini. Pada keluarga 8051,
lama dari siklus mesin tergantung pada frekuensi
dari kristal osilator yang terhubung pada sistem
8051. Kristal osilator ini bersama dengan rangkaian
pendukung di dalam chip, membentuk sumber clock
bagi CPU 8051
Frekeunsi dari kristal osilator yang dapat dihubungkan
bervariasi mulai dari 4 MHZ sampai dengan 33 MHz,
tergantung dari frekuensi yang dibolehkan bagi setiap
jenis chip 8051. Namun dari pada itu, frekuensi 12 MHz
(atau kelipatannya) adalah ideal digunakan agar 8051
dapat kompatibel dengan port serial milik komputer Pada
8051, setiap siklus mesin setidak dibutuhkan 12 perioda
osilator. Sehingga perhitungannya adalah frekuensi
siklus mesin adalah 1 / 12 dari frekuensi osilator.
Lihat contoh 1.
Contoh : 1

Berikut ini ditunjukkan frekuensi kristal untuk tiga system berbasis 8051
berbeda. Cari perioda dari siklus mesin masing-masing ..
(a) 12 MHz (b) 16 MHz (c) 20 MHz

Jawaban:

(a) 12/12 = 1 MHz, siklus mesin = 1 S


(b) 16 /12 = 1.333 MHz, siklus mesin = 1/1.333 MHz = 0.75 S
(c) 20 /12 = 1.666 MHz, siklus mesin = 1/921.6 MHz = 0.60 S
Contoh : 2

Untuk system 8051 dengan 12 MHz, cari berapa panjang waktu untuk mengeksekusi
setiap instruksi di bawah ini

(a) MOV R3,#55


(b) DEC R3
(c) DJNZ R2,Target
(b) LJMP
(e) SJMP
(f) NOP (No Operation)
(g) MUL AB
Jawaban:

Siklus mesin untuk system 11.0592 MHz adalah 1.085 uS seperti yang ditunjukkan pada Contoh 3-13.
Tabvel A-1 lampiran A menunjukkan siklus mesin dari masing-masing instruksi adalah.

Instruksi Siklus mesin Lama eksekusi


(a) MOV R3,#55 1 1 x 1 uS = 1 uS
(b) DEC R3 1 1 x 1 uS = 1 uS
(c) DJNZ R2,Target 2 2 x 1 uS = 2 uS
(b) LJMP 2 2 x 1 uS = 2 uS
(e) SJMP 2 2 x 1 uS = 2 uS
(f) NOP (No Operation) 1 1 x 1 uS = 1 uS
(g) MUL AB 4 4 x 1 uS = 4 uS
Perhitungan Tundaan

Subrutin untuk tundaan memiliki dua bagian penting:


(1) pengaturan counter, dan (2) loop. Sebagian besar
dari tundaan waktu dikerjakan oleh bagian tubuh dari
loop, seperti yang ditunjukkan contoh 3
Contoh : 3
Cari panjang tundaan waktu dari rutin berikut, jika frekuensi kristal = 12 MHz.
Siklus Mesin

MOV A,#55h
LAGI: MOV P1,A
ACALL DELAY
CPL A
SJMP LAGI

;——Tundaan Waktu

DELAY: MOV R3,#200


ULANG: DJNZ R3,ULANG
RET
Jawaban:

Berdasarkan Datasheet 8051 kita mendapatkan siklus mesin dari masing-masing perintah
dalam subrutin DELAY.

Siklus Mesin
DELAY: MOV R3,200 1
ULANG: DJNZ R3,ULANG 2
RET 1

Sehingga waktu tundaan adalah [(200 x 2) +1+1] X 1 s = 402 S.


Kita dapat menghitung tundaan waktu (berbasis instruksi) di dalam loop,
dan mengabaikan siklus clock yang digunakan instruksi diluar loop.

Pada contoh 3, nilai tertinggi dari register R3 adalah 255, sehingga salah
satu cara untuk memperpanjang tundaan adalah dengan menambahkan
instruksi NOP pada bagian loop. NOP adalah berarti No Operation, yang
berarti setidaknya membuang waktu 1 siklus mesin. Hal ini dicontokan
pada contoh 4
Loop Tundaan di dalam Loop

Salah satu cara yag lain untuk menghasilkan


tundaan waktu yang panjang adalah dengan
menggunakan loop di dalam loop. Di mana hal ini
dinamankan pula dengan nested loop.
Contoh : 4
Cari tundaan waktu dari rutin berikut, dengan menganggap frekuensi kristal = 12
MHz.
Siklus Mesin
DELAY: MOV R3,#250 1
ULANG: NOP 1
NOP 1
NOP 1
NOP 1
DJNZ R3,ULANG 2
RET 1
Jawaban:
Waktu tundaan dalam loop ULANG dalah [250(1+1+1+1+2)] X 1 s = 1500 X 1 s =
1500 s. Dan ditambahkan pula dua instruksi diluar loop kita akan mendapatkan
1500 s + 2 x 1 s = 1502 s.
Untuk Siklus Mesin = 1 s, cari tundaan waktu dari subrutin di bawah ini.
Siklus Mesin
DELAY: MOV R2,#200 1
LANJUT: MOV R3,#250 1
ULANG: NOP 1
NOP 1
DJNZ R3, ULANG 2
DJNZ R2, LANJUT 2
RET 1
Jawaban:

Untuk loop ULANG, kita akan mendapatkan (4 x 250) 1 s = 1000 s. dan LANJUT
mengulang loop ULANG sebanyak 200 kali, sehingga kita mendapatkan 200 x 1000 =
200000, hal itu jika kita memasukkkan kelebihan waktu overhead. Namun instruksi
“MOV R3,#250” dan “DJNZ R3,LANJUT” di awal dan diakhir loop ULANG tambahkan
(3 x 200 x 1 s) = 600 s kelebihan waktu. Sehingga panjang sebenarnya dari ke dua
loop adalah 200000 + 600 = 200600 s = 200,600 mS. Adapun perhitungan tersebut
masih mengabaikan perintah diawal dan diakhir subrutin yaitu CALL dan RET, yang
masing-masing membutuhkan 2 s.
P1 equ 090 h ; menandakan P1 = 090h (alamat P1)
Org 0000h ; memulai alamat awal 0000h
mulai: Mov P1, #0fh ; menyalinkan data 0fh ke port 1
Call Tunda ; memanggil sub program Tunda
Mov P1, #0f0h ; menyalinkan data 0f0h ke port 1
Call Tunda ; memanggil sub program Tunda
Jmp mulai ; kembali mengulang dari label mulai

; subroutine tunda
Tunda: Mov R1, #0ffh ; mengisikan data ffh ke R1
Tnd: Mov R2, # 0f5h ; mengisikan data f5h ke R2
Djnz R2,$ ; mengurangi 1 isi R2 dan mengulagi lagi jika isi R2 tidak sama dengan nol
Djnz R1,Tnd ; mengurangi 1 isi R1 dan mengulagi lagi dari Label Tnd jika isi R1 tidak nol
Ret ; kembali ke main program (setelah instruksi Call)
End ; mengakhiri program
Tugas : Hitunglah jumlah waktu tunda dalam satuan detik subroutin berikut

; subroutine tunda
Tunda: Mov R1, #0ffh
Tnd: Mov R2, # 0f5h
Djnz R2,$
Djnz R1,Tnd
Ret
End

Anda mungkin juga menyukai