TUJUAN
1. Mahasiswa memahami rangkaian mikrokontroller untuk menghidupkan dan mematikan LED.
2. Mahasiswa dapat memahami program assembly untuk menghidupkan dan mematikan LED.
3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan RR, CJNE.
4. Mahasiswa memahami pembuatan instruksi waktu tunda
DASAR TEORI
Gambar 1.1. Diagram skematik IC89s51
Pada diagram skematik tersebut, terdapat 4 (empat) buah port, Port0, Port 1, Port 2 dan Port 3, yang masing-masing terdiri dari 8 bit data. Tata cara penulisan port adalah: P0.0 s/d P0.7, P1.0 s/d P1.7, P2.0 s/d P2.7 dan P3.0 s/d P3.7.
Instruksi MOV, adalah instruksi copy data 8 bit.
Contoh:
Mov P0,A ; copy isi data yang ada di akumulator ke Port 0
Mov P0,#01010101b ; isi Port 0 dengan data biner 01010101b atau keluarkan data biner tersebut ke P0
Instruksi Setb, adalah instruksi mengirim logika 1 pada sebuah bit port
Instruksi Clr, adalah instruksi mengirim logika 0 pada sebut bit port
Contoh:
Setb P0.0 ; kirim logika 1 pada P0.0
Clr P0.7 ; kirim logika 0 pada P0.7
Instruksi RL, Geser data A ke kiri
Instruksi RR, Geser data A ke kanan
Contoh:
Mov A,#00000001b; isi data akumulator dengan data biner tersebut
RL A; Geser data yang ada di akumulator ke kiri, shg data akan berisi A=00000010b
RL A; Geser data yang ada di akumulator ke kiri, shg data akan berisi A=00000100b
RR A; Geser data yang ada di akumulator ke kanan, shg data akan berisi A=00000010b
Instruksi CJNE, Compare and Jump if Not Equal (bandingkan dan lompatlah jika tidak sama)
Contoh:
Mov A, P2
Periksa: CJNE A,#1,Periksa
Mov P0,A
Pada instruksi tersebut, copy data dari P2 ke A, bandingkan data A dengan 1 apabila tidak sama (A=/ 1 maka akan lompat ke label Periksa ). Apabila sama ( A=#1, maka akan turun ke bawah).
Instuksi DEC, Decrement register (mengurangi isi data register)
Instruksi INC, Increment register (menambah isi data register)
Contoh:
Mov R0,#10; isi R0 dengan data 10 (sepuluh)
DEC R0; kurangi isi R0 dengan 1, sehingga isi R0 sekarang menjadi 9(sembilan)
DEC R0; kurangi isi R0 dengan 1, sehingga isi R0 sekarang menjadi 8(delapan)
INC R0; tambahkan isi R0 dengan 1, sehingga isi R0 sekarang menjadi 9(sembilan)
Instruksi SJMP, short jump, melompat ke sebuah label dengan jarak dekat
Contoh:
Mulai1: mov P0,#01010101b
Sjmp Mulai1
Pada perintah tersebut berarti, program akan melompat ke label Mulai1, ingat label tidak di perkenankan ada spasi: Mulai 1
Instruksi CALL, memanggil sebuah subrutin
Contoh:
Ayo: mov P0,#01010101b
Call WaktuTunda
Sjmp Ayo
WaktuTunda: Bla
Bla
Bla
Ret
end
Pada perintah tersebut, program akan memanggil subrutin WaktuTunda, yang berisi instruksi Bla-Bla-Bla, dan diakhiri dengan RET. Seperti halnya sebuah label, penamaan sebuah subrutin, tidak diperkenankan ada spasi: Waktu Tunda
Instruksi DJNZ, Decrement and Jump if Not Zero
Mov R0,#10
AyoRek: DJNZ R0,AyoRek
End
Pada program tersebut data register R0, diisi dengan data 10, pada instruksi DJNZ, maka program akan mengurangi data pada register R0 (R0=R0-1), apabila data register R0 tidak nol (R0=/ 0) maka program akan melompat ke AyoRek.
Struktur dalam penulisan bahasa Asembly
Contoh:
AyoMulai: mov P0,#01010101b
Call Pekerjaan1
Call Pekerjaan2
Sjmp AyoMulai
;
Pekerjaan1: Bla
Bla
Ret
;
Pekerjaan2: Bla
Bla
ret
End
Ads not by this site
Pada contoh penulisan program assembly tersebut, tampak sebuah label AyoMulai (perhatikan tatacara pembuatan lebel ini, tanpa ada spasi dan boleh dalam bahasa indonesia, untuk keperluan lompatan, dan diakhiri dengan End. Perhatikan tataletak pembuatan subrutin tersebut.
Gambar 1.2 Rangkaian Display LED
Perhatikan pada gambar 1.1 tersebut. Delapan buah LED terhubung ke port 0, yang difungsikan sebagai output. Pada konfigurasi tersebut LED akan nyala bila diberi logika LOW ‘0’ melalui port 0, dan LED akan padam bila diberi logika HIGH ‘1’ melalui port 0. Agar Display LED ini dapat aktiv maka jumper EN LED harus dihubungkan singkat.
Percobaan 1.1. Menghidupkan LED dengan Instruksi MOV
Pada percobaan 1.1 ini LED akan dihidupkan atau dimatikan dengan mengirimkan data tertentu pada port 0.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper pada LED_EN, untuk mengaktifkan 8 buah LED
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Ads not by this site
Gambar 1.3. Tampilan kosong MIDE Studio for MCS51
Gambar 1.4. Diagram alir percobaan 1.1
5. Ketik program berikut ini:
Org 0h
Start: Mov P0,#11110000b ; Isi P0 dengan 11110000
sjmp start ; lompat ke start
End
6. Simpanlah program yang anda ketik dan beri nama : prog11a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software (Lihat Petunjuk Penggunaan)
Gambar 1.5. Tampilan program ISP Software
9. Lakukan pengamatan pada LED
10. Gantilah data #11110000b tersebut diatas dengan data seperti pada tabel berikut dan lakukan pencatatan LED mana yang padam.
Ads not by this site
Percobaan 1.2. Pembuatan Subrutine Waktu Tunda
Pada percobaan ini, 8 LED akan berkedip secara continue, yang diakibatkan oleh pemberian waktu tunda.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Gambar 1.6. Diagram alir percobaan 1.2
4. Ketik program berikut ini:
Org 0h
Start: Mov P0,#11111111b ; Kirim data biner 11111111 ke P0
Call Delay ; Memanggil waktu tunda
Mov P0,#00000000b ; Kirim data biner 00000000 ke P0
Call Delay ; Memanggil waktu tunda
Sjmp start ; lompat ke start
Delay: mov R1,#255 ; Isi 255 ke R1
Del1: mov R2,#255 ; Isi 255 ke R2
Del2: djnz R2,del2 ; Dec. R2 dan lompat ke del2 if NZ
djnz R1,del1
ret
end
5. Simpanlah program yang anda ketik dan beri nama : prog12a.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software (Lihat Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED
9. Gantilah data tersebut untuk mengedipkan sebuah LED, dua buah LED dan seterusnya, sesuai tabel berikut ini.
Percobaan 1.3. Instruksi Setb dan Clr
Percobaan ini, sebuah LED atau lebih dapat dihidupkan atau dimatikan dengan perintah setb dan clr.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
4. Ketik program berikut ini:
Org 0h
Start: Clr P0.0 ; Kirim logika ‘0’ ke P0.0
Clr P0.1 ; Kirim logika ‘0’ ke P0.1
Clr P0.2 ; Kirim logika ‘0’ ke P0.2
Clr P0.3 ; Kirim logika ‘0’ ke P0.3
Clr P0.4 ; Kirim logika ‘0’ ke P0.4
Clr P0.5 ; Kirim logika ‘0’ ke P0.5
Clr P0.6 ; Kirim logika ‘0’ ke P0.6
Clr P0.7 ; Kirim logika ‘0’ ke P0.7
Call Delay ; Memanggil waktu tunda
Setb P0.0 ; Kirim logika ‘1’ ke P0.0
Setb P0.1 ; Kirim logika ‘1’ ke P0.1
Setb P0.2 ; Kirim logika ‘1’ ke P0.2
Setb P0.3 ; Kirim logika ‘1’ ke P0.3
Setb P0.4 ; Kirim logika ‘1’ ke P0.4
Setb P0.5 ; Kirim logika ‘1’ ke P0.5
Setb P0.6 ; Kirim logika ‘1’ ke P0.6
Setb P0.7 ; Kirim logika ‘1’ ke P0.7
Call Delay ; Memanggil waktu tunda
Sjmp start ; lompat ke start
Delay: mov R1,#255
Del1: mov R2,#255
Del2: djnz R2,del2
djnz R1,del1
ret
end
5. Simpanlah program yang anda ketik dan beri nama : prog13a.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software (Lihat Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED
9. Rencanakan program untuk mengedipkan dua buah LED, tiga buah LED dan seterusnya dengan instruksi Setb dan Clr.
Percobaan 1.4. LED Berjalan dengan Instruksi RL/ RR (Rotate Left dan Right)
Pada percobaan ini, sebuah LED akan berjalan dari kiri ke kanan dan sebaliknya, program ini memanfaatkan instruksi RL dan RR.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Ads not by this site
Gambar 1.6. Diagram alir percobaan 1.3
4. Ketik program berikut ini:
Org 0H
Start: Mov A,#11111110b ; isi A dengan 11111110b
Mov R0,#7 ; isi R0 dengan 7
Kiri: Mov P0,A ; copy A ke P0
Call Delay ; panggil sub rutine delay
RL A ; data A diputar ke kiri
DEC R0 ; data R0 dikurangi 1
CJNE R0,#0,Kiri ; bandingkan R0 dg 0, if NE jump kiri
Mov R0,#7
Kanan: Mov P0,A
Kanan: Mov P0,A
Call Delay
RR A ; data A diputar ke kanan
DEC R0 ; data RO dikurangi 1
CJNE R0,#0,Kanan ; bandingkan R0 dg 0, if NE jump kanan
Sjmp Start
Delay: mov R1,#255
Del1: mov R2,#255
Del2: djnz R2,del2
djnz R1,del1
ret
end
5. Simpanlah program yang anda ketik dan beri nama : prog14a.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program Downloader
8. Lakukan pengamatan pada LED