Lompatan (Bab II)
2.8. Lompatan
Percabangan merupakan salah satu konsep utama dalam mempelajari bahasa pemrograman, bergantung pada data. Untuk contoh, bergantung pada keadaan dari push button, mikrokontroler dapat diprogram untuk menghentikan atau menjalankan motor dengan mendeteksi tombol yang ditekan pada push button.
Instruksi percabangan termasuk jump dan call. Mikrokontroler mempunyai tiga macam instruksi JUMP, yaitu LJMP ( long jump ) dapat melompat sampai pada jangkauan 64 kbyte, AJMP ( absolute jump ) dapat melompat sampai sejauh 2 kbyte, SJMP ( short jump ) dapat melompat sejauh 127 byte. Mikrokontroler mempunyai dua instruksi pemanggilan LCALL ( long call ) dan ACALL ( address call )
2.8.1. Lompatan LJMP, AJMP, dan SJMP
Contoh 1:
Org 0h
Start: LJMP Loncat1
:
: Maksimal ke alamat FFFFh
Org 02FFFh
Loncat1: :
:
end
Pada penggalan listing program contoh 1 tersebut, setelah instruksi LJMP ditemui maka program akan melompat pada label loncat1, letak alamat dari label loncat1 ini dapat berada pada jangkauan alamat 64K.
Contoh 2:
Org 0h
Start: AJMP Loncat2
:
: Maksimal ke alamat 0FFFh
Org 04FFh
Loncat2: :
:
Pada penggalan listing program contoh 2 tersebut, setelah instruksi AJMP ditemui maka program akan melompat pada label loncat2, letak alamat dari label loncat2 ini dapat berada pada jangkauan alamat 2K.
Contoh 3:
Org 0h
Start: SJMP Loncat3
:
: Maksimal ke alamat +/- 127 byte
Loncat3: :
:
Pada penggalan listing program contoh 1 tersebut, setelah instruksi SJMP ditemui maka program akan melompat pada label loncat1, letak alamat dari label loncat1 ini dapat berada pada jangkauan alamat 2 byte.
2.8.2. JZ dan JNZ
Instruksi JZ ( jump if accumulator zero ) dan instruksi JNZ ( jump if accumulator not zero ) adalah instruksi JUMP bersyarat yang memantau nilai accumulator A. Pada instruksi JZ, bila A = 0 maka maka program akan menuju label yang ditunjuk dan bila A ≠ 0 maka program akan menuju instruksi yang ada dibawahnya.
Percobaan 2.8.2.1:
Org 0h
Start: Mov A, #0 ; A = 0
JZ Proses2 ; Jika A = 0 maka akan menuju ke label Proses2
Proses1: Mov R1, #2 ; R1 = 2
Mov R2, #3 ; R2 = 3
Proses2: Mov R1, #0 ; R1 = 0
Mov R2, #0 ; R2 =0
end
Percobaan 2.8.2.2:
Org 0h
Start: Mov A, #1 ; A = 1
JNZ Proses1 ; Jika A ≠ 0 maka akan menuju ke label proses1
Proses1: Mov R1, #2 ; R1 = 2
Mov R2, #3 ; R2 = 3
Proses2: Mov R1, #0 ; R1 = 1
Mov R2, #0 ; R2 = 0
end
Bagaimanakah perbedaan pada kedua percobaan tersebut ?
2.8.3. JC dan JNC
Instruksi JC ( Jump on Carry ) dan instruksi JNC ( Jump on No Carry ) adalah instruksi bersyarat yang memantau bit Carry di dalam register PSW ( Program Status Word )
2.8.4. JB, JNB dan JBC
Instruksi JB ( Jump On Bit Set ) instruksi JNB ( Jump On Not Bit Set ) dan Instruksi JBC ( Jump On Bit Set Then Clear Bit ) merupakan instruksi jump bersyarat yang memantau nilai bit tertentu. Bit tersebut dapat merupakan bit-bit dalam register status maupun kaki input mikrokontroler.
2.8.5. DJNZ
Instruksi DJNZ ( Decrement and Jump if Not Zero ), merupakan instruksi yang akan mengurangi satu nilai register serbaguna ( R0 s/d R7 ), memori-data dan lompat ke label jika setelah pengurangan tersebut belum menghasilkan nilai Zero ( nol ).
Percobaan 2.8.5.1:
Org 0h
Start: Mov R0,#10 ; R0 = 10
Delay1:DJNZ R0, Delay1 ; R0 = R0 -1, Jika R0 ≠ 0 maka lompat ke label Delay1
end ; Jika R0 = 0 maka lanjutkan instruksi berikutnya.
Percobaan 2.8.5.2:
Org 0h
Start: Mov R0,#10 ; R0 = 10
Delay: Mov R1, #10 ; R1 = 10
Delay1: DJNZ R1, Delay1 ; R1 = R1-1, jika R1 ≠0 maka lompat ke label delay1
; Jika R1 = 0 maka lanjutkan instruksi berikutnya
Delay2: DJNZ R0, Delay ; R0 = R0 - 1, jika R0 ≠0 maka lompat ke label delay2
end ; Jika R0 = 0 maka lanjutkan instruksi beriktunya
2.8.6. CJNE
Instruksi CJNE ( Compare and Jump if Not Equal ) merupakan instruksi untuk membandingan dua nilai, dan akan melompat ke label tertentu bila hasil dari perbandingan adalah tidak sama.
Percobaan 2.8.6.1:
Org 0h
Start: Mov A, P1 ;A = P1
CJNE A,#1, Loncat1 ;Bandingkan A dengan 1, lompatlah ke loncat1
;Jika A ≠ 1.
;Jika A=1, maka sama lanjutkan instruksi selanjutnya
Mov R0,#100 ; R0 = 100
SJMP Exit ; Lompat ke label Exit
Loncat1: Mov R0,#0 ; R0 = 0
Exit:
end
No comments:
Post a Comment