MODUL PEMBELAJARAN III
PERANGKAT LUNAK
(DOWNLOAD)
1. Pendahuluan
Sebagaimana yang telah dijelaskan pada modul sebelumnya, untuk menjalankan sebuah system mikrokontroler diperlukan program, dimana program tersebut merupakan urutan instruksi yang menentukan sebuah mikrokontroler bekerja. Program/instruksi sebuah mikrokontroler ditulis dengan menggunakan bahasa mesin dengan kode bilangan hexadecimal. Untuk memudahkan pemrograman, maka digunakan bahasa pemrograman yang lebih tinggi dan dapat dimengerti untuk memrogramannya, namun sudah tentu hasil dari bahasa tersebut merupakan bahasa mesin untuk diterapkan dalam pengguanaan mikrokontroler. Banyak ragam bahasa yang dapat digunakan untuk pemrograman mikrokontroler, antara lain: assembler, basic, C dan lain-lain.
Dalam modul ini dijelaskan penggunaan bahasa assembler untuk memrograman mikrokontroler, dengan alasan bahwa bahasa assembler merupakan bahasa pemrograman yang langsung berorientasi dengan mesin, dengan demikian secara tidak langsung kita telah belajar karakateristik mesin dengan mempelajari bahasa assembler. Namun pada kesempatan yang lain di akhir semester 6, akan diperkenalkan penggunaan bahasa C untuk memrogram mikrokontroler ini.
2. Mode Pengalamatan
Mode pengalamatan, mengacu pada bagaimana mengalamati suatu lokasi memori tertentu. Mode pengalamatan pada mikrokontroler adalah sebagai berikut:
Immediate Addressing MOV A,#20h
Direct Addressing MOV A,30h
Indirect Addressing MOV A,@R0
External Direct MOVX A,@DPTR
Code Indirect MOVC A,@A+DPTR
2.1 Immediate Addressing (pengalamatan segera)
Immediate addressing dinamakan seperti ini, karena nilai yang akan disimpan didalam memori, secara langsung berada dalam kode.
Org 0h
mulait: MOV A,#20h; simpan data (8 bit) 20h kedalam register A
end
Org 0h
Mulai: MOV 70h,#0h; simpan data (8 bit) 0h kedalam RAM dengan alamat 70h
end
Org 0h
Mulai: MOV DPTR,#1234h;simpan data (16 bit) 1234h kedalam DPTR
End
Org 0h
Start:MOV PSW,#0; Select register bank 0
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
end
;
org 0h
Start:MOV PSW,#8; Select register bank 1
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
end
Immediate addressing adalah pengalamatan yang sangat cepat karena nilai yang akan diloadkan berada didalam instruksi tersebut.
2.2. Direct Addressing (pengalamatan langsung)
Disebut direct addressing karena nilai yang akan disimpan didalam memori, diperoleh secara langsung dari memori yang lain.
Org 0h
Start:MOV A,30h;
End
Org 0h
Start:Mov 70h,#1;put constant 1 into RAM 70h
Mov A, 70h;copy RAM 70 content into Acc
Mov A,#0 ;put constant 0 into Acc
Mov 90h,A ;copy Acc content into RAM 90h
End
Inbyte equ 70h
Port1 equ 90h
Org 0h
Start:Mov Inbyte,#3;put constant 3 into RAM 70h
Mov A,Inbyte ;copy RAM 70h content into Acc
Mov A,#0 ;Clear accumulator
Mov Port1,A ;copy Acc content into RAM 90h
End
Org 0h
Mov DPTR,#huruf
Start:Mov A, #0
Inc DPTR
Movc A, @A+DPTR
Mov R0,A
Sjmp Start
huruf:
DB 0,1,2,3,4,5,6,7,8,9
End
2.3 Indirect Addressing (Pengalamatan tidak langsung)
Indirect addressing adalah mode pengalamatan yang sangat ampuh, yang memberikan fleksibelitas dalam hal transfer data. Indirect addressing juga satu-satunya cara untuk mengakses 128 byte ekstra dari internal RAM yang ditemukan pada keluarga MCS51
MOV A,@R0
Instruksi ini menyebabkan mikrokontroler menganalisa nilai dari register R0. mikrokontroler kemudian akan mengambil data dari akumulator dengan nilai yang berasal dari alamat RAM internal yang ditunjukkan oleh R0. Sebagai contoh, misal R0 akan digunakan untuk menandai alamat RAM 40h yang berisi data 67h. Ketika instruksi diatas, dieksekusi maka mikrokontroler akan melihat nilai dari R0, yang berisi 40h, dan mengirimkan isi RAM 40h (dalam hal ini mempunyai nilai 67h) ke akumulator.
MOV R0,#99h ;
MOV @R0,#01h;
Instruksi tersebut adalah tidak valid. Karena indirect addressing selalu mengacu ke RAM internal, dua instruksi ini akan menulis nilai 01 ke RAM internal alamat 99h (153 desimal) pada 8052. Pada 8051 instruksi tersebut akan menghasilkan hasil yang tak terdifinisi, karena 8051 hanya mempunyai internal RAM 128 byte
Org 0h
Start:Mov PSW, #0 ; choose register bank 0
Mov R0, #78h; put constant 78h into R0
Mov @R0, #1 ; put contanta 1 into 78h
End
Org 0h
Start:Mov PSW,#0; pilih register bank 1
Mov R0,90h; copy RAM 90h content into R0
Mov @R0,#1; put constant 1 into 90h
End
3. Kelompok-kelompok Instruksi
Dalam memudahkan mempelajari bahasa Assembler untuk mikrokontroler, maka dibuat kelompok instruksi sesuai dengan fungsinya sebagai berikut:
Kelompok instruksi transfer data
MOV A,Rn -> Salin data pada Rn ke dalam register A
MOV A,direct -> Salin data pada alamat RAM direct ke dalam register A
MOV A,@Ri -> Salin data pada alamat yang ditunjuk oleh Ri ke dalam Register A
MOV A,#data -> Masukan data ke dalam register A
MOV Rn,A -> Salin data pada register A ke dalam register Rn
MOV Rn,direct -> Salin data pada alamat RAM direct ke dalam register Rn
MOV Rn,#data -> Masukan data ke dalam register Rn
MOV direct,A -> Salin data pada register A ke dalam alamat RAM direct
MOV direct,Rn -> Salin data pada register Rn ke dalam alamat RAM direct
MOV direct,direct -> Salin data pada alamat RAM direct ke dalam alamat RAM direct
MOV direct,@Ri -> Salin data pada alamat yang ditunjuk oleh Ri ke dalam alamat RAM direct
MOV direct,#data -> Masukan data ke dalam alamat RAM direct
MOV @Ri,A Salin -> data yang terdapat pada register kedalam alamat yang ditunjuk oleh Ri
MOV @Ri,direct -> Salin data yang terdapat pada alamat RAM direct kedalam alamat yang ditunjuk oleh Ri
MOV @Ri,#data -> Masukan data kedalam alamat yang ditunjuk oleh Ri
MOV DPTR,#data16 -> Masukan data 16 bit kedalam data pointer
MOVC A,@A+DPTR -> Salin data pada alamat 16 bit yang ditunjuk oleh A+DPTR ke dalam register A
MOVC A,@A+PC -> Salin data pada alamat 8 bit yang ditunjuk oleh A+PC ke dalam register A
MOVX A,@Ri -> Salin data pada alamat 8 bit memori eksternal yang ditunjuk oleh Ri ke dalam register A
MOVX A,@DPTR -> Salin data pada alamat 16 bit memori eksternal yang ditunjuk oleh DPTR ke dalam register A
MOVX @Ri,A -> Salin data pada register A ke dalam alamat 8 bit memori eksternal yang ditunjuk oleh register Ri
MOVX @DPTR,A -> Salin data pada register A de dalam alamat 16 bit memori eksternal yang ditunjuk oleh DPTR
PUSH direct -> Push direct byte ke stack
POP direct -> Pop stack ke direct byte
XCH A,Rn -> Tukar isi register Rn dengan isi register A
XCH A,direct -> Tukar isi alamat RAM direct dengan isi register A
XCH A,@Ri -> Tukar isi alamat RAM yang ditunjuk oleh Ri dengan isi register A
XCHD A,@Ri -> Tukar nible rendah data pada alamat yang ditunjuk oleh Ri dengan nible rendah isi register A
Kelompok instruksi aritmatika
ADD A,Rn -> Tambahkan isi register A dengan isi Register n
ADD A,direct -> Tambahkan isi register A dengan data pada alamat RAM
ADD A,@Ri -> Tambahkan isi register A dengan data pada alamat yang ditunjuk oleh register Ri
ADD A,#data -> Tambahkan isi register A dengan data langsung
ADDC A,Rn -> Tambahkan isi register A dengan isi Register n dengan carry
ADDC A,direct -> Tambahkan isi register A dengan data pada alamat RAM dengan carry
ADDC A,@Ri -> Tambahkan isi register A dengan data pada alamat yang ditunjuk oleh register Ri dengan carry
ADDC A,#data -> Tambahkan isi register A dengan data langsung dengan carry
SUBB A,Rn -> Kurangkan isi register A dengan isi Register n
SUBB A,direct -> Kurangkan isi register A dengan data pada alamat RAM
SUBB A,@Ri -> Kurangkan isi register A dengan data pada alamat yang ditunjuk oleh register Ri
SUBB A,#data -> Kurangkan isi register A dengan data langsung
INC A -> Tambahkan dengan satu isi register A
INC Rn -> Tambahkan dengan satu isi register Rn
INC direct -> Tambahkan dengan satu isi dari alamat RAM direct
INC @Ri -> Tambahkan dengan satu isi dari alamat RAM yang ditunjuk oleh Ri
DEC A -> Kurangkan dengan satu isi register A
DEC Rn -> Kurangkan dengan satu isi register Rn
DEC direct -> Kurangkan dengan satu isi dari alamat RAM direct
DEC @Ri -> Kurangkan dengan satu isi dari alamat RAM yang ditunjuk oleh Ri
INC DPTR -> Tambahkan dengan satu nilai data pointer
MUL AB -> Kalikan isi pada regiater A dengan isi pada register B
DIV AB -> Lakukan pembagian data pada register A dengan data pada register B
DA A -> Desimal adjust Akumulator
Kelompok instruksi logika
Kelompok instruksi manipulasi Boolean
Kelompok instruksi percabangan
untuk lebih lengkapnya silahkan download
1 komentar:
mantab nih artikelnya, semoga bermanfaat.
saya sih kurang paham dengan isinya, ehehe.
Posting Komentar