Anda di halaman 1dari 6

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

Anda mungkin juga menyukai