Senin, 23 September 2019

Instruksi Percabangan Mikrokontroler

ACALL addr11

Siklus
Jumlah Byte
Instruksi
2
2
ACALL Addr11
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan lompatan ke suatu subroutine yang ditunjuk oleh alamat pada addr11. Lompatan yang dapat dilakukan berada di area sebesar 2K byte.

Proses yang terjadi pada saat instruksi ini dikerjakan adalah sebagai berikut:
  1. Data pada Program Counter + 2 yang merupakan alamat program saat kembali dari subroutine disimpan ke dalam stack 
  2. Stack pointer bertambah 2 kali 
  3. Melakukan lompatan ke alamat yang ditunjuk oleh addr11 dengan mengisi Program Counter dengan alamat tersebut. Alamat yang diisikan ke Program Counter hanya 11 bit sehingga lompatan maksimum hanya sebesar 2K byte. 

Contoh:
2000  Acall Lompatan1
 …………
 …………

Lompatan1 
2100  Mov  A,#00H 

Data pada Program Counter + 2 yaitu 2002H disimpan pada stack di mana byte tinggi disimpan di alamat yang ditunjuk oleh SP+1 dan byte rendah disimpan di alamat yang ditunjuk oleh SP+2. Apabila sebelumnya posisi SP berada di alamat 10H maka byte tinggi, 20H akan disimpan di alamat 11H dan byte rendah, 02H disimpan di 12H. Kemudian data 11 bit pada alamat lompatan 1 dipindah ke Program Counter. 

LCALL addr16

Siklus
Jumlah Byte
Instruksi
2
3
LCALL Addr16
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan lompatan ke suatu subroutine yang ditunjuk oleh alamat pada addr16. Lompatan yang dapat dilakukan berada di area sebesar 64K byte.

Proses yang terjadi pada saat instruksi ini dikerjakan adalah sebagai berikut:
  1. Data pada Program Counter + 2 yang merupakan alamat program saat kembali dari subroutine disimpan ke dalam stack 
  2. Stack pointer bertambah 2 kali 
  3. Melakukan lompatan ke alamat yang ditunjuk oleh addr16 dengan mengisi Program Counter dengan alamat tersebut. Alamat yang diisikan ke Program Counter adalah 16 bit sehingga lompatan maksimum dapat mencapai 64K byte. 

Contoh:
2000  Lcall Lompatan1
 …………
 …………

Lompatan1
3000  Mov  A,#00H 

Data pada Program Counter + 2 yaitu 2002H disimpan pada stack di mana byte tinggi disimpan di alamat yang ditunjuk oleh SP+1 dan byte rendah disimpan di alamat yang ditunjuk oleh SP+2. Apabila sebelumnya posisi SP berada di alamat 10H maka byte tinggi, 20H akan disimpan di alamat 11H dan byte rendah, 02H disimpan di 12H. Kemudian data 16 bit pada alamat lompatan 1 dipindah ke Program Counter yaitu 3000H.

RET

Siklus
Jumlah Byte
Instruksi
2
1
RET
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan lompatan ke alamat yang disimpan dalam SP dan SP-1. Instruksi ini biasa digunakan pada saat kembali dari subroutine yang dipanggil dengan instruksi ACALL atau LCALL.

Proses yang terjadi adalah sebagai berikut:
  1. Isi dari alamat yang ditunjuk oleh stack pointer dipindah ke Program Counter nibble tinggi 
  2. Stack pointer berkurang 1 
  3. Isi dari alamat yang ditunjuk oleh stack pointer dipindah ke Program Counter nibble rendah 
  4. Stack pointer berkurang 1.

Contoh:
2000  Lcall Lompatan1 
2002   ……….… 
………… 
………… 

Lompatan1
3000  Mov  A,#00H 
3002  Ret 

Saat instruksi RET dijalankan maka data 20H di stack pointer dipindah ke Program Counter nibble tinggi, dan data 02H di stack pointer –1 dipindah ke Program Counter nibble rendah, sehingga isi dari Program Counter menjadi 2002H dan otomatis program akan menjalankan instruksi di alamat 2002H.

RETI

Siklus
Jumlah Byte
Instruksi
2
1
RETI
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan lompatan ke alamat yang disimpan dalam SP dan SP-1 dan mengembalikan kondisi flag-flag interrupt agar interrupt berikutnya dengan prioritas yang sama dapat dilakukan.

Pada saat terjadi interrupt, data pada PC+2 yang merupakan alamat tempat program harus kembali setelah proses interrupt selesai dilakukan tersimpan dalam SP dan SP-1, maka setelah instruksi RETI dijalankan, alamat pada SP dan SP-1 dipindah ke Program Counter dan program melompat ke alamat tempat akhir instruksi yang sedang dijalankan saat interrupt terdeteksi.

AJMP addr11

Siklus
Jumlah Byte
Instruksi
2
2
AJMP Addr11
Flag
C
AC
F0
RS1
RS0
OV
P
  

Absolute Jump, melompat dan menjalankan program yang berada di alamat yang ditentukan oleh addr11. Proses yang terjadi adalah, 11 bit dari alamat yang ditentukan oleh addr11 dipindah ke Program Counter sehingga program akan langsung menjalankan instruksi yang ada pada alamat tersebut.

Contoh:
AJMP Lompatan1 
Mov  A,#05H 

Lompatan1:
Mov  R0,#00H

Program akan melompat ke alamat lompatan 1 dan menjalankan instruksi Mov R0,#00H.tanpa melalui instruksi MOV A,#05H.

LJMP addr16

Siklus
Jumlah Byte
Instruksi
2
3
LJMP Addr16
Flag
C
AC
F0
RS1
RS0
OV
P
  

Long Jump, melompat dan menjalankan program yang berada di alamat yang ditentukan oleh addr16. Proses yang terjadi adalah, 16 bit dari alamat yang ditentukan oleh addr16 dipindah ke Program Counter sehingga program akan langsung menjalankan instruksi yang ada pada alamat tersebut.

Contoh:
LJMP Lompatan2 
Mov  A,#05H 

Lompatan2:
Mov  R0,#00H

Program akan melompat ke alamat lompatan 2 dan menjalankan instruksi Mov R0,#00H.tanpa melalui instruksi MOV A,#05H.

SJMP rel

Siklus
Jumlah Byte
Instruksi
2
2
SJMP rel
Flag
C
AC
F0
RS1
RS0
OV
P
  

Short Jump, melakukan lompatan ke alamat yang ditentukan oleh rel dengan lompatan maksimum sebesar 128 byte.

JMP @A+DPTR

Siklus
Jumlah Byte
Instruksi
2
1
JMP @A+DPTR
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan lompatan ke alamat yang dihasilkan oleh penjumlahan antara DPTR dan akumulator A.

Contoh:
Mov  A,#05H 
Mov  DPTR,#2000H 
JMP  A,@A+DPTR 

Saat instruksi JMP A,@A+DPTR terjadi maka terjadi lompatan ke alamat 2000H + 5H yaitu 2005H dan menjalankan instruksi yang ada di alamat tersebut.

JZ rel

Siklus
Jumlah Byte
Instruksi
2
2
JZ rel
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan lompatan ke alamat yang ditentukan apabila akumulator A adalah 00H dan langsung meneruskan instruksi dibawahnya bila akumulator A tidak 00H.

Contoh: 
JZ  Lompat1 
MOV A,#07H 

Lompat1: 
MOV B,#00H 

Apabila nilai akumulator A tidak 00H maka program akan langsung meneruskan instruksi dibawahnya yaitu MOV A,#07H dan program akan menjalankan instruksi di alamat Lompat1 yaitu MOV B,#00H apabila nilai akumulator A adalah 00H.

JNZ rel

Siklus
Jumlah Byte
Instruksi
2
2
JNZ rel
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan lompatan ke alamat yang ditentukan apabila akumulator A adalah bukan 00H dan langsung meneruskan instruksi dibawahnya bila akumulator A adalah 00H.

Contoh:
JNZ  Lompat1 
MOV A,#07H 

Lompat1:
MOV B,#00H 

Apabila nilai akumulator A adalah 00H maka program akan langsung meneruskan instruksi dibawahnya yaitu MOV A,#07H dan program akan menjalankan instruksi di alamat Lompat1 yaitu MOV B,#00H apabila nilai akumulator A adalah bukan 00H.

CJNE 

Instruksi ini melakukan perbandingan antara data tujuan dan data sumber serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.

Bentuk perintah:
CJNE data tujuan, data sumber, alamat lompatan 

Carry flag akan set apabila data tujuan lebih kecil dari data sumber. 

CJNE A,direct,rel 

Siklus
Jumlah Byte
Instruksi
2
3
CJNE A,direct,rel
Flag
C
AC
F0
RS1
RS0
OV
P
  
X

Melakukan perbandingan antara akumulator A dan alamat langsung serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.

Contoh:
CJNE A,00H,lompat1

Program akan menuju ke alamat lompat 1 apabila data akumulator A tidak sama dengan data yang ada pada alamat 00H.

CJNE A,#data,rel

Siklus
 Jumlah Byte
Instruksi
2
3
CJNE A,#data,rel
Flag
C
AC
F0
RS1
RS0
OV
P
  
X

Melakukan perbandingan antara akumulator A dan data immediate serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.

Contoh:
CJNE A,#00H,lompat1

Program akan menuju ke alamat lompat 1 apabila data akumulator A tidak sama dengan data 00H..

CJNE Rn,#data,rel

Siklus
 Jumlah Byte
Instruksi
2
3
CJNE Rn,#data,rel
Flag
C
AC
F0
RS1
RS0
OV
P
  
X

Melakukan perbandingan antara Rn (R0…R7) dan data immediate serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.

Contoh:
CJNE R1,#00H,lompat1

Program akan menuju ke alamat lompat 1 apabila data pada R1 tidak sama dengan data yang ada pada alamat 00H.

CJNE @Ri,#data,rel

Siklus
 Jumlah Byte
Instruksi
2
3
CJNE @Ri,#data,rel
Flag
C
AC
F0
RS1
RS0
OV
P
  
X

Melakukan perbandingan antara data yang terletak pada alamat yang ditunjuk oleh Register Index (R0 atau R1) dan data immediate serta melakukan lompatan ke alamat yang ditentukan apabila hasil perbandingan tidak sama.

Contoh:
CJNE @R1,#00H,lompat1

Program akan menuju ke alamat lompat 1 apabila data di alamat yang ditunjuk oleh R1 tidak sama dengan data 00H.

DJNZ Rn,rel

Siklus
Jumlah Byte
Instruksi
2
2
DJNZ Rn,rel
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan pengurangan pada Rn (R0…R7) dengan 1 dan lompat ke alamat yang ditentukan apabila hasilnya bukan 00. Apabila hasilnya telah mencapai 00, maka program akan terus menjalankan instruksi di bawahnya.

Contoh: 
Tunggu:
DJNZ R7,Tunggu 
RET 

Selalu melakukan lompatan ke alamat tunggu dan mengurangi R7 dengan 1 selama nilai R7 belum mencapai 00 

DJNZ direct,rel

Siklus
 Jumlah Byte
Instruksi
2
3
DJNZ direct,rel
Flag
C
AC
F0
RS1
RS0
OV
P
  

Melakukan pengurangan pada data di alamat yang ditunjuk secara langsung dengan 1 dan lompat ke alamat yang ditentukan apabila hasilnya bukan 00. Apabila hasilnya telah mencapai 00, maka program akan terus menjalankan instruksi di bawahnya.

Contoh:
Tunggu: 
DJNZ 07H,Tunggu 
RET 

Selalu melakukan lompatan ke alamat tunggu dan mengurangi data pada alamat 07H dengan 1 selama nilai pada data yang berada pada alamat 07H belum mencapai 00

NOP

Siklus
 Jumlah Byte
Instruksi
1
1
NOP
Flag
C
AC
F0
RS1
RS0
OV
P
  

Instruksi ini berfungsi untuk melakukan tundaan pada program sebesar 1 cycle tanpa mempengaruhi register-register maupun flag.

Tidak ada komentar:

Posting Komentar