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: :

:

end

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: :

:

End

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

Post a Comment

0 Comments