DESKRIPSI SINGKAT INSTRUKSI-INSTRUKSI PADA AT89S51 (Dikemas oleh : Sumarna, Jurdik Fisika, FMIPA, UNY No.
Instruksi
1.
ADD A,Rn
2.
ADD A,nH
3.
ADD A,@Rn
4.
ADD A,#n
5.
ADDC A,Rn
6.
ADDC A,nH
7.
ADDC A,@Rn
8.
ADDC A,#n
9.
SUBB A,Rn
10.
SUBB A,nH
11.
SUBB A,@Rn
12.
SUBB A,#n
13. 14.
INC A INC Rn
E-mail :
[email protected])
Deskripsi Menambahkan isi A dengan isi Rn dan hasilnya disimpan di A (n = 0, 1, …, 7) Menambahkan isi A dengan isi lokasi memori yang alamatnya n dan hasilnya disimpan di A Menambahkan isi A dengan data yang ada di alamat yang ditunjukkan oleh isi Rn dan hasilnya disimpan di A Menambahkan isi A dengan sebuah konstanta n dan hasilnya disimpan di A Menambahkan isi A beserta carry flag dan isi Rn dan hasilnya disimpan di A (n = 0, 1, …, 7) Menambahkan isi A beserta carry flag dan isi lokasi memori yang alamatnya n dan hasilnya disimpan di A Menambahkan isi A beserta carry flag dengan data yang ada di alamat yang ditunjukkan oleh isi Rn dan hasilnya disimpan di A Menambahkan isi A beserta carry flag dengan sebuah konstanta n dan hasilnya disimpan di A Mengurangi data di A beserta carry flag-nya dengan isi Rn dan hasilnya disimpan di A Mengurangi data di A beserta carry flag-nya dengan isi lokasi yang alamatnya n dan hasilnya disimpan di A Mengurangi isi dari A beserta carry flag-nya dengan data yang ada di alamat yang ditunjukkan oleh isi Rn dan hasilnya disimpan di A Mengurangi data di A beserta carry flag-nya dengan sebuah konstanta n dan hasilnya disimpan di A Menambah data yang ada di A dengan 1 dan hasilnya disimpan di A Menambah data yang ada di Rn dengan 1 dan hasilnya disimpan di Rn
Contoh ADD A,R7 ADD A,30H ADD A,@R0 ADD A,#05h ADDC A,R7 ADDC A,30H ADDC A,@R0 ADDC A,#05h SUBB A,R0 SUBB A,30H SUBB A,@R0 SUBB A,#05h INC A INC R0
15.
INC nH
16.
INC @Rn
17.
INC DPTR
18. 19. 20.
DEC A DEC Rn DEC nH
21.
DEC @Rn
22.
MUL AB
23.
DIV AB
24.
DA A
25.
ANL A,Rn
26.
ANL A,nH
27.
ANL A,@Rn
28.
ANL A,#n
29.
ANL nH,A
30.
ANL nH,#n
Menambahkan 1 kepada data yang ada di lokasi yang alamatnya n dan hasilnya disimpan di alamat tersebut Menambahkan 1 kepada data yang ada di lokasi yang alamatnya ditunjukkan oleh isi Rn dan hasilnya disimpan di alamat tersebut Menambahkan 1 kepada data yang ada di DPTR dan hasilnya disimpan di DPTR Mengurangi data yang ada di A dengan 1 dan hasilnya disimpan di A Mengurangi data yang ada di Rn dengan 1 dan hasilnya disimpan di Rn Mengurangi dengan 1 kepada data yang ada di lokasi yang alamatnya n dan hasilnya disimpan di alamat tersebut Mengurangi dengan 1 kepada data yang ada di lokasi yang alamatnya ditunjukkan oleh isi Rn dan hasilnya disimpan di alamat tersebut Mengalikan isi A dan isi register B, hasil perkalian disimpan di A untuk byte rendah dan untuk byte tinggi disimpan di B. Jika hasil perkalian melebihi 0FF H, maka flag overflow-nya akan di-set. Membagi data di A dengan data di B yang hasil baginya disimpan di A dan sisa pembagiannya disimpan di B. Flag overflow dan carry akan selalu clear. Jika isi B adalah 0, maka flag overflow di-set. Mengubah data di A menjadi bentuk BCD. Instruksi ini biasa digunakan sesudah instruksi ADD. Melakukan operasi logik AND antara isi A dan isi Rn dan hasilnya disimpan di A Melakukan operasi AND antara isi A dan isi lokasi yang alamatnya n dan hasilnya disimpan di A Melakukan operasi AND antara isi A dan isi lokasi yang alamatnya ditujukkan oleh isi dari R0 atau R1 dan hasilnya disimpan di A Melakukan operasi AND antara isi A dengan suatu konstanta n dan hasilnya disimpan di A Melakukan operasi AND antara isi dari lokasi yang alamatnya n dengan isi A dan hasilnya disimpan di lokasi (alamat n) tersebut Melakukan operasi AND antara isi dari lokasi yang alamatnya n dengan suatu konstanta n dan hasilnya disimpan di lokasi (alamat n)
INC 30H INC @R5 INC DPTR DEC A DEC R2 DEC 30H DEC @R7 MUL AB DIV AB ADD A,#05h DA A ANL A,R3 ANL A,30H ANL A,@R0 ANL A,#08h ANL 07H,A ANL 07H,#05h
31.
ORL A,Rn
32.
ORL A,nH
33.
ORL A,@Rn
34.
ORL A,#n
35.
ORL nH,A
36.
ORL nH,#n
37.
XRL A,Rn
38.
XRL A,nH
39.
XRL A,@Rn
40.
XRL A,#n
41.
XRL nH,A
42.
XRL mH,#n
43. 44. 45. 46.
CLR A CPL A RL A RLC A
47.
RR A
tersebut (alamat n dan konstanta n tidak harus sama) Melakukan operasi logik OR antara isi A dan isi Rn dan hasilnya disimpan di A Melakukan operasi OR antara isi A dan isi lokasi yang alamatnya n dan hasilnya disimpan di A Melakukan operasi OR antara isi A dan isi lokasi yang alamatnya ditujukkan oleh isi dari R0 atau R1 dan hasilnya disimpan di A Melakukan operasi OR antara isi A dengan suatu konstanta n dan hasilnya disimpan di A Melakukan operasi OR antara isi dari lokasi yang alamatnya n dengan isi A dan hasilnya disimpan di lokasi (alamat n) tersebut Melakukan operasi OR antara isi dari lokasi yang alamatnya n dengan suatu konstanta n dan hasilnya disimpan di lokasi (alamat n) tersebut (alamat n dan konstanta n tidak harus sama) Melakukan operasi logik EX-OR antara isi A dan isi Rn dan hasilnya disimpan di A Melakukan operasi EX-OR antara isi A dan isi lokasi yang alamatnya n dan hasilnya disimpan di A Melakukan operasi EX-OR antara isi A dan isi lokasi yang alamatnya ditujukkan oleh isi dari R0 atau R1 dan hasilnya disimpan di A Melakukan operasi EX-OR antara isi A dengan suatu konstanta n dan hasilnya disimpan di A Melakukan operasi EX-OR antara isi dari lokasi yang alamatnya n dengan isi A dan hasilnya disimpan di lokasi (alamat n) tersebut Melakukan operasi EX-OR antara isi dari lokasi yang alamatnya m dengan konstanta n dan hasilnya disimpan di lokasi (m) tersebut Membuat isi akumulator A menjadi 0 (nol). Mengkomplemen setiap bit isi akumulator A Menggeser ke kiri 1 (satu) bit pada setiap bit isi akumulator A Menggeser ke kiri 1 (satu) bit pada setiap bit isi akumulator A beserta carry flag-nya Menggeser ke kanan 1 (satu) bit pada setiap bit isi akumulator A
ORL A,Rn ORL A,30H ORL A,@R0 ORL A,#05h ORL 30H,A ORL 30H,#05h XRL A,R2 XRL A,30H XRL A,@R1 XRL A,#05h XRL 30H,A XRL 30H,#05h CLR A CPL A RL A RLC A RR A
48.
RRC A
49.
SWAP A
50. 51. 52.
MOV A,Rn MOV A,nH MOV A,@Rn
53. 54. 55. 56. 57. 58. 59.
MOV A,#n MOV Rn,A MOV Rn,nH MOV Rn,#n MOV nH,A MOV nH,Rn MOV mH,nH
60
MOV nH,@Rn
61. 62.
MOV nH,#n MOV @Rn,A
63.
MOV @Rn,nH
64.
MOV @Rn,#n
65. 66.
MOV DPTR,#nn MOVC A,@A+DPTR
67.
MOVC A,@A+PC
68.
MOVX A,@Rn
Menggeser ke kanan 1 (satu) bit pada setiap bit isi akumulator A beserta carry flag-nya Melalukan operasi penukaran nibble tinggi dan nibble rendah di dalam akumulator A Memindahkan data dari register Rn ke akumulator A Memindahkan data dari lokasi yang alamatnya n ke akumulator A Memindahkan data dari lokasi yang alamatnya ditunjukkan oleh isi register R0 atau R1 ke akumulator A Mengisi akumulator A dengan suatu konstanta (data) n Memindahkan data dari akumulator A ke register Rn Memindahkan data dari lokasi yang alamatnya n ke register Rn Mengisi register Rn dengan suatu konstanta (data) n Memindahkan data dari akumulator ke suatu lokasi yang alamatnya n Memindahkan data dari register Rn ke suatu lokasi yang alamatnya n Memindahkan data dari suatu lokasi yang alamatnya n ke lokasi lain yang alamatnya m Memindahkan data dari suatu lokasi yang alamatnya ditunjukkan oleh isi register R0 atau R1 ke suatu lokasi yang alamatnya n Mengisikan suatu konstanta n (data) ke suatu lokasi yang alamatnya n Memindahkan data dari A ke satu lokasi yang alamatnya ditunjukkan oleh isi register R0 atau R1 Memindahkan data dari suatu lokasi yang alamatnya n ke lokasi lain yang alamatnya ditunjukkan oleh isi register R0 atau R1 Mengisikan suatu konstanta n (data) ke suatu lokasi yang alamatnya ditunjukkan oleh isi register R0 atau R1 Mengisi register DPTR dengan suatu konstanta 16 bit Memindahkan data dari memori program yang lokasinya ditunjukkan oleh isi DPTR ditambah indeks akumulator A menuju ke A Memindahkan data dari memori program yang lokasinya ditunjukkan oleh isi Program Counter ditambah indeks akumulator A menuju ke A Memindahkan data dari memori eksternal yang alamatnya ditunjukkan oleh Rn ke akumulator A
RRC A SWAP A MOV A,R3 MOV A,30H MOV A,@R0 MOV MOV MOV MOV MOV MOV MOV
A,#05h R5,A R7,30H R6,#05h 30H,A 30H,R6 10H,30H
MOV 30H,@R0 MOV 30H,#05h MOV @R1,A MOV @R1,30H MOV @Rn,#05h MOV DPTR,#2000h MOVC A,@A+DPTR MOVC A,@A+PC MOVX A,@R0
69.
MOVX A,@DPTR
70.
MOVX @Rn,A
71.
MOVX @DPTR,A
72. 73.
PUSH n POP n
74.
XCH A,Rn
75.
XCH A,nH
76.
XCH A,@Rn
77.
XCHD A,@Rn
78. 79.
CLR C CLR bit
80. 81.
SETB C SETB bit
82. 83.
CPL C CPL bit
84.
ANL C,bit
85.
ANL C,/bit
86.
ORL C,/bit
Memindahkan data dari memori eksternal yang alamatnya ditunjukkan oleh DPTR ke akumulator A Memindahkan data dari akumulator A ke memori eksternal yang alamatnya ditunjukkan oleh Rn Memindahkan data dari akumulator A ke memori eksternal yang alamatnya ditunjukkan oleh DPTR Menyimpan data dari suatu register atau memori ke dalam stack Mengambil data dari dalam stack dan dikembalikan ke suatu register atau memori Menukar data yang tersimpan di akumulator A dengan data yang ada di register Rn Menukar data yang tersimpan di akumulator A dengan data yang ada di suatu lokasi yang alamatnya n Menukar data yang tersimpan di akumulator A dengan data yang ada di suatu lokasi yang alamatnya ditunjukkan oleh isi R0 atau R1 Menukar data nibble rendah di akumulator A dengan data nibble rendah di suatu lokasi yang alamatnya ditunjukkan oleh isi R0 atau R1 Mengubah bit carry flag menjadi 0 (nol) Mengubah bit pada RAM internal atau register yang dapat dialamati secara bit menjadi 0 (nol) Mengubah bit carry flag menjadi 1 (satu) Mengubah bit pada RAM internal atau register yang dapat dialamati secara bit menjadi 1 (satu) Melakukan komplemen pada bit carry flag Melakukan komplemen bit memori atau register yang dapat dialamati secara bit Melakukan operasi logik AND antara bit carry flag dan bit pada register atau memori yang dapat dialamati secara bit Melakukan operasi AND antara bit carry flag dengan komplemen dari bit pada register atau memori yang dapat dialamati secara bit Melakukan operasi OR antara bit carry flag dengan komplemen dari bit pada register atau memori yang dapat dialamati secara bit
MOVX A,@DPTR MOVX @R0,A MOVX @DPTR,A PUSH A POP B XCH A,R7 XCH A,70H XCH A,@R0 XCHD A,@R0 CLR C CLR P1.2 SETB C SETB A.7 CPL C CPL A.6 ANL C,B.5 ANL C,/A.7 ORL C,/A.7
87.
MOV C,bit
88.
MOV bit,C
89.
JC rel
90.
JNC rel
91.
JB bit,rel
92.
JNB bit,rel
93.
JBC bit,rel
94.
CALL Addr
95.
ACALL Addr
96.
LCALL Addr-16
97. 98.
RET RETI
99.
AJMP Addr
100. LJMP Addr-16
Memindahkan bit pada register atau memori yang dapat dialamati secara bit ke bit carry flag Memindahkan bit carry flag ke bit pada register atau memori yang dapat dialamati secara bit Melompat ke suatu alamat yang didefinisikan oleh rel jika carry flagnya set Melompat ke suatu alamat yang didefinisikan oleh rel jika carry flagnya clear Melompat ke suatu alamat yang didefinisikan oleh rel jika bit dari register atau memori yang dapat dialamati secara bit dalam keadaan set Melompat ke suatu alamat yang didefinisikan oleh rel jika bit dari register atau memori yang dapat dialamati secara bit dalam keadaan clear Melompat ke suatu alamat yang didefinisikan oleh rel jika bit dari register atau memori yang dapat dialamati secara bit dalam keadaan set, tetapi bit tersebut di-clear setelah lompatan dilakukan Memanggil subroutine yang ditunjuk oleh alamat pada Addr atau tanda label Memanggil subroutine yang ditunjuk oleh alamat pada Addr atau tanda label. Lompatan pemanggilan sejauh 2 K byte Memanggil subroutine yang ditunjuk oleh alamat pada Addr atau tanda label. Lompatan pemanggilan sejauh 64 K byte Kembali ke alamat yang disimpan dalam SP dan SP-1 Kembali ke alamat yang disimpan dalam SP dan SP-1 dan mengembalikan kondisi flag-flag interrupt agar interupsi berikutnya dengan prioritas yang sama dapat dilakukan Melompat dan menjalankan program yang berada di alamat yang ditentukan oleh Addr (11 bit dari alamat pada Addr dipindahkan ke PC) Melompat dan menjalankan program yang berada di alamat yang ditentukan oleh Addr (16 bit dari alamat pada Addr dipindahkan ke
MOV C,A.0 MOV A.1,C JC Loop JNC Loop JB P1.0,Loop JNB P1.0,Loop JBC A.7,Loop Call
Delay
Acall 35H Acall Loop LCALL Loop RET RETI AJMP Loop LJMP Loop
101. SJMP rel 102. JMP @A+DPTR 103. JZ rel 104. JNZ rel 105. CJNE A,nH,rel
106. CJNE A,#n,rel 107. CJNE Rn,#n,rel
108. CJNE @Rn,#n,rel
109. DJNZ Rn,rel 110. DJNZ nH,rel
111. NOP
PC) Melompat ke alamat yang ditentukan oleh rel dengan lompatan maksimum 128 byte Melompat ke alamat yang dihasilkan oleh penjumlahan antara DPTR dan akumulator A Melompat ke alamat yang ditentukan oleh rel jika akumulator A sama dengan 0 (nol) Melompat ke alamat yang ditentukan oleh rel jika akumulator A adalah tidak sama dengan 0 (nol) Membandingkan isi A dengan isi lokasi yang alamatnya n dan melompat ke alamat yang ditentukan oleh rel jika hasil perbandingan tidak sama Membandingkan isi A dengan suatu konstanta n dan melompat ke alamat yang ditentukan oleh rel jika hasil perbandingan tidak sama Membandingkan isi register Rn dengan suatu konstanta n dan melompat ke alamat yang ditentukan oleh rel jika hasil perbandingan tidak sama Membandingkan data yang terletak pada suatu lokasi yang alamatnya ditunjukkan oleh isi R0 atau R1 dengan suatu konstanta n dan melompat ke alamat yang ditentukan oleh rel jika hasil perbandingan tidak sama Mengurangi isi Rn dengan 1 dan melompat ke alamat yang ditentukan oleh rel jika hasilnya belum 0 (nol) Mengurangi dengan 1 kepada isi suatu lokasi yang alamatnya n dan melompat ke alamat yang ditentukan oleh rel jika hasilnya belum 0 (nol) Melakukan penundaan (delay) pada program sebesar 1 cycle tanpa mempengaruhi isi register-register dan flag.
SJMP Awal JMP @A+DPTR JZ Loop JNZ Loop CJNE A,30H,Loop CJNE A,#05h,Loop CJNE R6,#05h,Loop CJNE @R0,#05h,Loop
DJNZ R7,Loop DJNZ 30H,Loop NOP