This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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.
4. Mahasiswa memahami pembuatan instruksi waktu tunda
GAMBAR:
D1
P0.0..P0.7
D8
VCC
J3
EN LED12
Gambar 1.1 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
10. Gantilah data #11110000b tersebut diatas dengan data seperti pada tabel berikut dan lakukan pencatatan LED mana yang padam.
D0 D1 D2 D3 D4 D5 D6 D7 LED YANG PADAM
1 1 1 1 1 1 1 0
1 1 1 1 1 1 0 1
1 1 1 1 1 0 1 1
1 1 1 1 0 1 1 1
1 1 1 0 1 1 1 1
1 1 0 1 1 1 1 1
1 0 1 1 1 1 1 1
0 1 1 1 1 1 1 1
Percobaan 1.2. Pembuatan Subrutine Waktu Tunda Pada percobaan ini, 8 LED akan berkedip secara kontinu, 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
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
Percobaan 1.3. Instruksi Setb dan Clr Pada 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
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 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 ISP Software ( Lihat Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED Soal Tantangan:
1. Lakukan perubahan pada program tersebut untuk menjalankan/ menggerakkan dua buah LED kekiri dan kekanan,
2. Lakukan modifikasi program 1.4. tersebut dengan mengganti instruksi CJNE dan DEC dengan instruksi DJNZ.
Gambar 2.2. Rangkaian Interface (a) Push Button dan LED (b)
Pada gambar 2.2.a tersebut tampak rangkaian push button, bila saklar ditekan maka port sesuai dengan bit tersebut akan mendapat logika low ‘0’ dan sebaliknya bila saklar tidak ditekan maka port tersebut akan mendapat logika high ‘1’.
Percobaan 2.1. Mengambil Data Saklar dan Mengeluarkan ke LED Pada percobaan ini, LED akan nyala bila saklar ditekan sesuai dengan bit saklar yang ditekan. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Buka jumper pada EN_DAC apabila sedang terhubung. 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
Org 0h Start: Mov A, P2 ;copy data P2 dan Simpan ke A Mov P0, A ;Kirim data A ke P0 sjmp start ;lompat ke start end 6. Simpanlah program yang anda ketik dan beri nama : prog21a.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)
9. Lakukan pengamatan pada LED.
Saklar Kondisi LED yang Nyala (D1-D2-D3-D4-D5-D6-D7-D8 SW1
SW2
SW3
SW4
SW5
SW6
SW7
SW8
Percobaan 2.2. Mengatur Arah Gerak LED Ke Kanan-Kiri dengan Saklar Push Button P2.0 dan P2.1 Pada percobaan ini, LED akan berjalan kekanan atau kekiri mengikuti penekanan tombol P2.0 (arah kiri) atau P2.1 (arah kanan). 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
org 0h CekP20: JB P2.0,CekP21 ; Menguji bit P2.0, apakah adalah logika '1' call RLeft ; Jika P2.0=0, maka LED putar kiri ; sjmp CekP20 ; jump forever to CekP20 CekP21: JB P2.1,CekP20 ; Menguji bit P2.1, apakah adalah logika '1' call RRight ; Jika P2.1=0, maka LED putar kanan sjmp CekP20 ; jump forever to CekP2.0 ;====================================================== ;Subrutin ini digunakan untuk menggerakkan LED Ke Kanan ;====================================================== RLeft: mov A,#11111110b ;send data 11111110 to Acc RLeft1: mov P0,A ;send data A to P0 call delay ;call delay time JB P2.1,RLeft2 ;Menguji bit P2.1, apakah adalah logika '1' sjmp EndRLeft ;Jika P2.1=0, maka lompat ke EndRLeft RLeft2: RL A ;data A di putar ke kiri sjmp RLeft1 ;lompat ke Rleft1 EndRLeft: ret ; ;==================================================== ;Subrutin ini digunakan untuk menggerakkan LED Ke Kiri ;==================================================== RRight: mov A,#01111111b ;send data to Acc RRight1: mov P0,A ;send data to P0 call delay ;call delay time JB P2.0,RRight2 ;Menguji bit P2.0, apakah adalah logika '1' sjmp EndRRight ;Jika P2.0=0, maka lompat ke EndRRight
RRight2: RR A ;data A putar ke kanan sjmp RRight1 ;lompat ke Rright1 EndRRight: ret ;============================================= ;subroutine delay time ;============================================= 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 : prog22a.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.
Soal Tantangan:
1. Lakukan modifikasi pada percobaan 2.2. tersebut sesuai dengan dengan mengganti port dengan P2.2 ( putar kanan ) dan P2.3 ( putar kiri ).
2. Buatlah suatu percobaan untuk menghidupkan dan mematikan sebuah led yang terhubung ke P0.0, dengan menggunakan sebuah saklar P2.0, sehingga apabila saklar ditekan sekali, LED nyala, dan ditekan berikutnya maka LED akan padam.
Percobaan 2.3. Setting Up/Dn dan Enter dengan display LED Pada percobaan ini, LED yang ON akan bertambah atau berkurang mengikuti penekanan tombol P2.1 (UP) atau P2.2 (DN). LED akan berhenti bertambah atau atau berkurang bila ditakan tombol P2.0 ( ENTER). 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
mov R7,#1 ;reset R7 -> 1 sjmp Setup ; SetDn: Mov A,R7 ;simpan data R7 ke A cpl A ;komplemen A, mov P0,A ;output data ke LED jnb P2.0,getout;bila sw1(P2.0) ditekan mk getout(selesai) jb p2.2,Setup ;bila sw2(P2.1) ditekan mk INC R7 dec R7 ;R7:=R7-1 acall delay ;waktu tunda lama penekanan tombol cjne R7,#0d,setDn;deteksi apakah setting=0d mov R7,#1d ;reset R7 -> 1 sjmp Setdn getout: sjmp getout ; delay: mov R0,#255 delay1: mov R2,#255 djnz R2,$ djnz R0,delay1 ret end 5. Simpanlah program yang anda ketik dan beri nama : prog23a.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. Soal Tantangan:
1. Lakukan modifikasi pada percobaan tersebut sesuai dengan dengan mengganti port tersebut dengan P2.5 (Setting UP), P2.6 (Setting Dn) dan P2.7 (Enter).
TUJUAN: 1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen 2. Mahasiswa dapat memahami program assembly untuk menampilkan data ke 7 segment 3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan waktu
tunda.
VCC
aa
VCC
ee
c
FCS 9013
PNP
7 x 220 ohm
d
f
FCS 9013
b
Common Anoda
PNP
FCS 9013
VCC
FCS 9013
VCC
P0.6..P0.0
FCS 9013
PNP
VCC
FCS 9013
PNP
g
Y7..Y0
g
f
VCC
FCS 9013
PNP
c
8 x 1k ohm
VCC
PNP
d
FCS 9013
VCC
b
PNPPNP
(a)
VCC
P3.6 U8
74LS138
123
645
15141312111097
ABC
G1G2AG2B
Y0Y1Y2Y3Y4Y5Y6Y7
P3.5
R28
10K
J2
EN 7 SEGMEN12
Y7..Y0
P3.7
VCC
(b)
Gambar 3.1. (a) Rangkaian display 7 segmen (b) rangkaian dekoder 74ls138
Tabel 3.1. Tabel kebenaran 74LS138
SELEKTOR ENABLE OUTPUT C B A G1 /G2A /G2B Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
Pada tabel kebenaran tersebut tampak bahwa seven segmen yang hidup tergantung pada output dari dekoder 74LS138, yang sedang mengeluarkan logika low ”0”, sehingga dari 8 buah display tersebut, selalu hanya satu display yang akan dihidupkan. Agar display tampak nyala secara bersamaan maka ketiga display tersebut harus dihidupkan secara bergantian dengan waktu tunda tertentu. Pada gambar tersebut seven segment commont anoda dikendalikan dengan menggunakan transistor PNP melalui decoder 74LS138, apabila ada logika low pada basis transistor, maka 7 segment akan nyala dan sebaliknya akan padam.
Gambar 3.2 Modul 7 Segment tunggal Tabel 3.2. Data Display 7 Segmen
P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 Display g f e d c b a 1 0 0 0 0 0 0 0
1 1 1 1 0 0 1 1
0 1 0 0 1 0 0 2
0 1 1 0 0 0 0 3
: :
0 0 0 1 0 0 0 A 0 0 0 0 0 1 1 b
1 0 0 0 1 1 0 C
:
Pada tabel tersebut tampak bahwa untuk menghidupkan sebuah segmen, harus dikirimkan data logika low ”0” dan sebaliknya untuk mematikan segmen, harus dikirimkan data logika high ”1”.
Percobaan 3.1. Tulis Karakter “A” pada 7 Segmen ( Display 1 ) Pada percobaan ini, karakter ‘A’ akan ditampilkan pada 7 Segmen Display 1 Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 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
Start
DISP1 Aktif
P3.5=P3.6=P3.7=0
Cetak Karakter AP0 10001000
Gambar 3.3 Diagram alir percobaan 3.1
5. Ketik program berikut ini:
org 0h
start: clr P3.5 ; P3.5 = ‘0’ clr P3.6 ; P3.6 = ‘0’ clr P3.7 ; P3.7 = ‘0’ mov P0,#10001000b ; isi P0 dg. 10001000. Cetak Karakter 'A' sjmp start ; Lompat ke start end 6. Simpanlah program yang anda ketik dan beri nama : prog31a.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)
9. Lakukan pengamatan pada 7 segmen. 10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
No Nama Karakter Posisi Display 1 C Display 2 2 E Display 5
Percobaan 3.2. Tulis Tiga Karakter ”AbC” pada 7 Segmen Pada percobaan ini, karakter ‘AbC’ akan ditampilkan pada 7 Segmen Display 1, Display 2 dan Display 3 secara berturutan Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 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
; setb P3.5 ; P3.5 = '1' clr P3.6 ; P3.6 = '0' clr P3.7 ; P3.7 = '0' mov P0,#10000011b ; isi P0 dg.100000011. Cetak Karakter 'b' call delay ; Panggil Waktu Tunda ; clr P3.5 ; P3.5 = '0' setb P3.6 ; P3.6 = '1' clr P3.7 ; P3.7 = '0' mov P0,#11000110b ; Cetak Karakter 'C' call delay ; Panggil Waktu Tunda ; sjmp start ; Lompat ke start ;============================================= ;subroutine delay created to rise delay time ;============================================= delay: mov R1,#25 del1: mov R2,#25 del2: djnz R2,del2 djnz R1,del1 ret end 6. Simpanlah program yang anda ketik dan beri nama : prog32a.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)
9. Lakukan pengamatan pada 7 segmen. 10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
No Nama Karakter Posisi Display 1 EFG Display 1, Display 2, Display 3 2 HJL Display 3, Display 4, Display 5
3 1A3 Display 6, Display 7, Display 8
Percobaan 3.3. Tulis 8 Karakter pada 7 Segmen Pada percobaan ini, karakter ‘12345678’ akan ditampilkan pada 7 Segmen Display 1, Display 2 dan Display 3 s/d Display 8 secara berturutan : Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 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
; setb P3.5 setb P3.6 setb P3.7 mov P0,#10000000b ; Cetak Karakter '8' call delay ; sjmp start ; Lompat ke Start ;============================================= ;subroutine delay created to rise delay time ;============================================= delay: mov R1,#25 del1: mov R2,#25 del2: djnz R2,del2 djnz R1,del1 ret end 6. Simpanlah program yang anda ketik dan beri nama : prog33a.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)
9. Lakukan pengamatan pada 7 Segmen. 10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
No Nama Karakter 1 A b C d E F G H
2 9 8 7 6 5 4 3 2
3 J K L n O P r S
Soal Tantangan:
1. Buatlah tulisan data pada 7 Segmen, dan buatlah tulisan tersebut berjalan ke kanan. 2. Buatlah tuisan Surabaya pada 7 segmen, dan buatlah tulisan tersebut berjalan ke kiri.
Percobaan 3.4. Setting Up/ Dn dan Enter dengan Display ke 7 Segmen. Pada percobaan ini, akan dibuat suatu simulasi setting UP (P2.1)/ DN (P2.2) dan penekanan tombol Enter (P2.0), dan di displaykan ke display 7 Segmen. Data display akan bertambah dari 00 s/d 99 atau berkurang dari 99 s/d 00, sesuai dengan penekanan pada tombol UP/ DN.Bila ditekan tombol Enter, maka tombol UP/ DN tidak akan berfungsi lagi. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
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
Gambar 3.5. Diagram alir percobaan 3.4. 5. Ketik program berikut ini: Org 0h
Setb P3.7 call delay ret ; Bin2Dec: mov b,#100d div ab mov ratusan,a mov a,b mov b,#10d div ab mov puluhan,a mov satuan,b ret delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; Data7segmen: db 11000000b,11111001b,10100100b,10110000b,10011001b db 10010010b,10000010b,11111000b,10000000b,10010000b end 6. Simpanlah program yang anda ketik dan beri nama : prog34a.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)
TUJUAN: 1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2 x 16 2. Mahasiswa dapat memahami program assembly untuk menampilkan data ke LCD Karakter
2 x 16 3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan waktu
tunda. 4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu
P0
.7
P0
.3P
0.2
J8
CON2
12
P0
.0P
3.7
P0
.4
LCD Karakter 2x16
1 2 3 4 5 6 7 8 9 10
11
12
13
14
15
16
VS
SV
CC
VE
ER
SR
/WE
na
ble
DB
0D
B1
DB
2D
B3
DB
4D
B5
DB
6D
B7
BP
LG
ND
P0
.5VCC
P3
.5
P0
.1
GN
D
GN
D
P0
.6
D9 IN4
003
Gambar 4.1. Rangkaian interface ke LCD Karakter 2 x16
Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti AT89S51. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai berikut:
5 R/W Read/ Write, to choose write or read mode 0 = write mode 1 = read mode
6 E Enable 0 = start to lacht data to LCD character 1= disable
7 DB0 LSB
8 DB1 -
9 DB2 -
10 DB3 -
11 DB4 -
12 DB5 -
13 DB6 -
14 DB7 MSB
15 BPL Back Plane Light
16 GND Ground voltage
Display karakter pada LCD diatur oleh pin EN, RS dan RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa anda sedang mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program EN harus dibuat logika low “0” dan set pada dua jalur kontrol yang lain RS dan RW. Ketika dua jalur yang lain telah siap, set EN dengan logika “1” dan tunggu untuk sejumlah waktu tertentu ( sesuai dengan datasheet dari LCD tersebut ) dan berikutnya set EN ke logika low “0” lagi.
Jalur RS adalah jalur Register Select. Ketika RS berlogika low “0”, data akan dianggap sebagi sebua perintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ). Ketika RS berlogika high “1”, data yang dikirim adalah data text yang akan ditampilkan pada display LCD. Sebagai contoh, untuk menampilkan huruf “T” pada layar LCD maka RS harus diset logika high “1”.
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika high ”1”, maka program akan
melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi logika low ”0”.
Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada mode operasi yang dipilih oleh user ). Pada kasus bus data 8 bit, jalur diacukan sebagai DB0 s/d DB7.
Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character,
Function Set Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 0 0 0 1 DL N F X X
CATATAN: X : Don’t care DL: Mengatur lebar data
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0) DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali N=1, Display dua baris N=0, Display satu baris
Entry Mode Set Mengatur increment/ decrement dan mode geser
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 0 0 0 0 0 0 1 I/D S
Catatan: I/D: Increment/ decrement dari alamat DDRAM dengan 1 ketika kode karakter dituliskan ke
DDRAM. I/D = “0”, decrement I/D= “1”, increment S: Geser keseluruhan display kekanan dan kekiri S=1, geser kekiri atau kekanan bergantung pada I/D S=0, display tidak bergeser
Display On/ Off Cursor Mengatur status display ON atau OFF, cursor ON/ OFF dan fungsi Cursor Blink
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 0 0 0 0 0 1 D C B
D : Mengatur display D = 1, Display is ON D = 0, Display is OFF Pada kasus ini data display masih tetap berada di DDRAM, dan dapat ditampilkan kembali
secara langsung dengan mengatur D=1. C : Menampilkan kursor C = 1, kursor ditampilkan C = 0, kursor tidak ditampilkan B : Karakter ditunjukkan dengan kursor yang berkedip B=1, kursor blink
Clear Display Perintah ini hapus layar
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 0 0 0 0 0 0 0 0 1
Geser Kursor dan Display Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display. Fungsi ini digunakan untuk koreksi atau pencarian display
Memori LCD 1. DDRAM ( Display Data RAM ) Memori DDRAM digunakan untuk menyimpan karakter yang akan ditampilkan. Semua teks yang kita tuliskan ke modul LCD adalah disimpan didalam memory ini, dan modul LCD secara berturutan membaca memory ini untuk menampilkan teks ke modul LCD itu sendiri.
Gambar 4.3. Lokasi memori display LCD Karakter
Pada peta memori tersebut, daerah yang berwarna kuning ( 00 s/d 0F dan 40 s/d 4F ) adalah display yang tampak. Sebagaimanan yang anda lihat, jumlahnya sebanyak 16 karakter per baris dengan dua baris. Angka pada setiap kotak adalah alamat memori yang bersesuaian dengan posisi dari layar. Demikianlah karakter pertama di sudut kiri atas adalah menempati alamah 00h. Posisi karakter berikutnya adalah alamat 01h dan seterusnya.
Akan tetapi, karakter pertama dari baris 2 sebagaimana yang ditunjukkan pada peta memori adalah pada alamat 40h. Dimikianlah kita perlu untuk mengirim sebuah perintah ke LCD untuk mangatur letak posisi kursor pada baris dan kolom tertentu. Instruksi Set Posisi Kursor adalah 80h. Untuk ini kita perlu menambahkan alamat lokasi dimana kita berharap untuk menempatkan kursor.Sebagai contoh, kita ingin menampilkan kata ”World” pada baris ke dua pada posisi kolom ke sepuluh. Sesuai peta memori, posisi karakter pada kolom 11 dari baris ke dua, mempunyai alamat 4Ah, sehingga sebelum kita tulis kata ”World” pada LCD, kita harus mengirim instruksi set posisi kursor, dan perintah untuk instruksi ini adalah 80h ditambah dengan alamat 80h+4Ah =0Cah. Sehingga dengan mengirim perintah Cah ke LCD, akan menempatkan kursor pada baris kedua dan kolom ke 11 dari DDRAM.
Sebelum kita dapat menggunakan modul LCD, kita harus melakukan inisialisasi dan mengkonfigurasikannya. Hal ini dijalankan dengan mengirimkan sejumlah instruksi ke LCD. Antara lain: pengaturan lebar data interface 8 bit atau 4 bit data bus, pemilihan ukuran font karakter 5x8 atau 5x7 dan lain-lain, dengan instruksi sebagai berikut.
Init_lcd: mov r1,#00000001b ;Display clear call write_inst ;EN=pulse dan RS=0 mov r1,#00111000b ;Function set, ;Data 8 bit,2 line font 5x7 call write_inst ;Set bit EN=pulse dan RS=0 mov r1,#00001100b ;Display on, ;cursor off,cursor blink off call write_inst ;EN=pulse dan RS=0 mov r1,#00000110b ;Entry mode, Set increment call write_inst ret
Percobaan 4.1. Tulis Sebuah Karakter pada LCD Karakter Pada percobaan ini, karakter ‘A’ akan ditampilkan pada LCD Karakter Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V 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
Percobaan 4.2. Tulis Delapan Karakter pada LCD Karakter Pada percobaan ini, kalimat ” Welcome” akan ditampilkan pada LCD Karakter pada baris 1 dan colom 1 Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V 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 5. Ketik program berikut ini:
Write_inst: clr P3.5 ; P3.5 = RS =0 mov P0,R1 ; copy R1 ke P0 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr P3.7 ; P3.7 =EN = 0 ret ; Write_data: setb P3.5 ; P3.5 = RS =1 mov P0,R1 ; copy R1 ke P0 setb P3.7 ; P3.7 =EN = 1 call delay ; call delay time clr p3.7 ; P3.7 =EN = 0 ret ; delay: mov R0,#0 delay1:mov R7,#0fh djnz R7,$ djnz R0,delay1 ret end 6. Simpanlah program yang anda ketik dan beri nama : prog42a.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)
9. Lakukan pengamatan pada display LCD Karakter 10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
No Nama Karakter Posisi Display 1 Selamat Datang Baris 1, Colom 1 2 Mikrokontroller Baris 2, Colom 1
Percobaan 4.3. Tulis Karakter Dengan Look Up Table Pada percobaan ini, kalimat ”Welcome home” akan ditampilkan pada layar LCD Karakter dengan menggunakan look up table. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V 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
clr p3.7 ; P3.7 =EN = 0 ret ; delay: mov R0,#0 delay1:mov R7,#0fh djnz R7,$ djnz R0,delay1 ret ; word1: DB ' Welcome Home '; Karakter yang disimpan di ROM end 6. Simpanlah program yang anda ketik dan beri nama : prog43a.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)
9. Lakukan pengamatan pada LCD. 10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
No Nama Karakter Posisi Display 1 Selamat Datang Baris 1, Colom 1
2 Mikrokontroller Baris 2, Colom 1
Soal Tantangan: 1. Dengan memanfaatkan instruksi shift display dan cursor, cetaklah kata Surabaya yang
dapat bergeser kekanan sebanyak 10 x dan bergeser kekiri sebanyak 10x dan berhenti. 2. Buatlah interaksi geser karakter ke kanan dan ke kiri, dengan menggunakan tombol
P2.0, P2.1, untuk mengatur geser ke kanan dan ke kiri, untuk dengan kata Surabaya
DASAR TEORI Konverter A/D tersedia secara komersial sebagai rangkaian terpadu dengan resolusi 8 bit sampai dengan 16 bit. Pada percobaan ini akan memperkenalkan ADC0801, yaitu sebagai sebuah konverter A/D 8 bit yang mudah diinterfacekandengan sistem mikrokontroller. A/D ini menggunakan metode approksimasi berturut-turut untuk mengkonversikan masukan analog (0-5V) menjadi data digital 8 bit yang ekivalen. ADC0801 mempunyai pembangkit clock internal dan memerlukan catu daya +5V dan mempunyai waktu konversi optimum sekitar 100us.
Gambar 5.3 Konfigurasi pin ADC0804 Diagram konfigurasi pin ADC0804 ditunjukkan pada gambar 5.2. Pin 11 sampai 18 ( keluaran digital ) adalah keluaran tiga keadaan, yang dapat dihubungkan langsung dengan bus data bilamana diperlukan. Apabila CS ( pin 1 ) atau RD (pin2) dalam keadaan high (“1”), pin 11 sampai 18 akan mengambang ( high impedanze ), apabila CS dan RD rendah keduanya, keluaran digital akan muncul pada saluran keluaran. Sinyal mulai konversi pada WR (pin 3). Untuk memulai suatu konversi, CS harus rendah. Bilamana WR menjadi rendah, konverter akam mengalami reset, dan ketika WR kembali kepada keadaan high, konversi segera dimulai. Konversi detak konverter harus terletak dalam daereh frekuensi 100 sampai 800kHz. CLK IN ( pin 4) dapat diturunkan dari detak mikrokontroller, sebagai kemungkinan lain, kita dapat mempergunakan pembangkit clock internal dengan memasang rangkaian RC antara CLN IN ( pin 4) dan CLK R ( pin 19). Pin 5 adalah saluran yang digunakan untuk INTR, sinyal selesai konversi. INTR akan menjadi tinggi pada saat memulai konversi, dan akan aktiv rendah bila konversi telah selesai. Tepi turun sinyal INTR dapat dipergunakan untuk menginterupsi sistem mikrokontroller, supaya mikrokontroller melakukan pencabangan ke subrutine pelayanan yang memproses keluaran konverter. Pin 6 dan 7 adalah masukan diferensial bagi sinyal analog. A/D ini mempunyai dua ground, A GND (pin 8) dan D GND ( pin10). Kedua pin ini harus dihubungkan dengan ground. Pin 20 harus dihubungkan dengan catu daya +5V A/D ini mempunyai dua buah ground, A GND ( pin 8 ) dan D GND ( pin 10). Keduanya harus dihubungkan dengan catu daya, sebesar +5V.
Pada A/D 0804 REF
V merupakan tegangan referensi yang digunakan untuk offset suatu
keluaran digital maksimum. Dengan persamaan sebagai berikut:
Misalnya anda menginginkan masuk analog maksimum sebesar 4 V, maka:
2421
== xVREF
volt
0156,0255
4==
RESOLUSIV volt
Resolusi ini mempunyai arti sebagai berikut:
No IN
V ( volt ) Data Digital ( biner )
1 0,000 0000 0000 2 0,0156 0000 0001
3 0,0313 0000 0010 4 :
5 4 1111 1111
A/Dini dapat dirangkai untuk menghasilkan konversi secara kontinu. Untuk melaksanakannya, kita harus menghubungkan CS, dan RD ke ground dan menyambungkan WR dengan INTR seperti pada gambar dibawah ini. Maka dengan ini keluaran digital yang kontinu akan muncul, karena sinyal INTR menggerakkan masukan WR. Pada akhir konversi INTR berubah menjadi low, sehingga keadaan ini akan mereset konverter dan mulai konversi. Tabel 5.1 Koneksi Interface ADC ke Mikrokontroller
ADC Mikrokontroller
/INTR P3.2
/WR P3.3
/RD P2.4
D0 s/d D7 P1.0 s/d P1.7
Tabel 5.1 Koneksi Interface MUX 4051 ke Mikrokontroller
Tabel 5.3. Instruksi logika pada pin kontrol A/D 0804
INPUT OUTPUT KEGIATAN /WR /RD /INTR DO S/D D7
1 1 1 Hi-Z Berada dalam keadaan High Impedansi
0 1 1 Hi-Z A/D mengalami reset Data
1 1 1 Hi-Z Mulai konversi Analog ke Digital
1 1 0 Hi-Z Konversi telah selesai 1 0 1 D0 s/d D7 Data digital telah siap diambil
Percobaan 5.1. ADC0804 dan Display ke 7 Segmen Pada percobaan ini, Data ADC yang telah diubah dalam desimal ( ratusan, puluhan dan satuan) akan ditampilkan pada 8 x 7 Segmen pada Display 1, Display 2, dan Display 3 yang masing-masing menampilkan data ratusan, puluhan dan satuan.
Pada tabel kebenaran tersebut tampak bahwa seven segmen yang hidup tergantung pada output dari dekoder 74LS138, yang sedang mengeluarkan logika low ”0”, sehingga dari 8 buah display tersebut, selalu hanya satu display yang akan dihidupkan. Agar display tampak nyala secara bersamaan maka ketiga display tersebut harus dihidupkan secara bergantian dengan waktu tunda tertentu. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Gambar 5.5. Diagram alir rutin utama percobaan 5.1
ratusan equ 30h puluhan equ 31h satuan equ 32h ; org 0h start: call ADC call Bin2Dec call Display2SevenSegmen sjmp start ; ;======================================== ;Subrutin ini digunakan untuk mengambil data ADC ;Hubungkan jumper P3.4 ke MUX ;Pada percobaan ini menggunakan ADC0 ;======================================== ADC: clr P3.4; A=0 MUX 4051
setb P2.4 clr P3.3 nop nop nop setb P3.3 eoc: jb P3.2,eoc clr P2.4 mov A,P1 setb P2.4 ret ; ;================================================= ;Subrutin ini untuk menampilkan data ke 7 Segmen ;dalam bentuk: ratusan, puluhan, and satuan ;data desimal diubah ke segmen dengan menggunakan ;Look up table Data7segmen ;================================================= Display2SevenSegmen: mov A, ratusan ;Copy data Ratusan ke A mov DPTR,#Data7segmen ;Copy Address #Data7segmen ke DPTR movc A,@A+DPTR ;Copy Isi A+DPTR ke A mov P0,A ;Copy A ke P0 Setb P3.5 ;Decoder, A=1, clr P3.6 ;B=0 Setb P3.7 ; dan C=1 call delay ;Panggil waktu tunda
7. Simpanlah program yang anda ketik dan beri nama : prog51a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
Soal Tantangan: 1. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU, pada
Display1, 2, 3 dan 4 diikuti dengan data ADC.( contoh: SUHU 255 ) 2. Lakukan modifikasi pada program tersebut dengan manambahkan kata UOLT, pada
Display5, 6, 7dan 8 setelah data ADC.( contoh: 255 UOLT)
Percobaan 5.2. ADC0804 dan Display ke LCD Karakter 2x16 Pada percobaan ini, Data ADC dalam desimal akan ditampilkan pada LCD Karakter 2x16 pada Baris 1, Colom 1, 2 dan 3, yang masing-masing menampilkan data ratusan, puluhan dan satuan.
P0
.7
P0
.3P
0.2
J8
CON2
12
P0
.0P
3.7
P0
.4
LCD Karakter 2x16
1 2 3 4 5 6 7 8 9 10
11
12
13
14
15
16
VS
SV
CC
VE
ER
SR
/WE
na
ble
DB
0D
B1
DB
2D
B3
DB
4D
B5
DB
6D
B7
BP
LG
ND
P0
.5
VCC
P3
.5
P0
.1
GN
D
GN
D
P0
.6
D9 IN4
003
Gambar 5.8. Rangkaian Interface LCD Karakter Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
7. Simpanlah program yang anda ketik dan beri nama : prog52a.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)
9. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU: , pada Baris 2 diikuti dengan data ADC.
Percobaan 5.3. Aplikasi program komparator dengan memanfaatkan instruksi aritmatika dan instruksi lompatan untuk pengaturan suhu dengan display LCD Karakter Dalam dunia elektronika, rangkaian komparator, umumnya diwujudkan dengan memanfaatkan rangkaian op-amp yang dibangun sebagai komparator. Sesuai dengan prinsip kerja komparator, membandingkan dua buah tegangan yang masuk pada input INV dan NON INV, untuk menghasilkan suatu output tegangan saturasi. Dengan memanfaatkan instruksi aritmatika SUBB dan instruksi lompatan JZ dan JC, maka rangkaian analog ini dapat digantikan dengan menggunakan pemrograman assembly.
Gambar 5.10 Rangkaian komparator analog dengan IC OP-AMP
Apabila tegangan yang masuk pada VREF lebih besar daripada tegangan yang masuk pada VIN maka VOUT akan mengeluarkan tegangan ~0 volt. Dan sebaliknya bila tegangan yang masuk pada VREF lebih kecil dari pada VIN maka VOUT akam mengeluarkan tegangan VSAT. ControlSuhu:
OnHeater: jc OffHeater call HeaterOn ;Instruksi hidupkan heater ret
OffHeater: Call HeaterOff ;Instruksi matikan heater ret ;
Pada instruksi tersebut diambil selisih antara dataSetting dan dataADC dengan menggunakan instruksi SUBB, pengurangan ini akan menghasilkan tiga keadaan yaitu: NOL, NEGATIF atau POSITIF. Hasil-hasil inilah yang harus dideteksi, keadaan NEGATIF dapat dideteksi dengan memantau bit C (carry ), keadaan NOL dapat dideteksi dengan memantau register A (accumulator). Apabila diberikan keadaan input sesuai dengan contoh tersebut maka:
A=dataSetting=50 B=dataADC=30 SUBB A,B A=50-30 =20 (keadaan POSITIF) Sesuai dengan instruksi diatas maka program akan menuju ke Ret OnHeater, pada baris ini dilakukan proses pengujian keadaan, dengan instruksi JC, karena keadaan POSITIF maka C=0 (clear) sehingga program akan memanggil HeaterOn Apabila diberikan keadaan input sesuai dengan contoh tersebut maka: A=dataSetting=50 B=dataADC=50 SUBB A,B A=50-50 =00 (keadaan NOL) Sesuai dengan instruksi diatas maka program akan menuju ke Ret. Apabila diberikan keadaan input sesuai dengan contoh tersebut maka: A=dataSetting=50 B=dataADC=51 SUBB A,B A=50-51 =-1 (keadaan NEGATIF) Sesuai dengan instruksi diatas maka program akan menuju ke OnHeater, pada baris ini dilakukan proses pengujian keadaan, dengan instruksi JC, karena keadaan NEGATIF maka C=1 (clear) sehingga program akan memanggil label OffHeater
Pada percobaan 5.3. ini indikator heater On dan Off, ditunjukkan pada layar LCD Karakter pada baris 1. seperti yang ditunjukkan pada pemrograman berikut ini: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Gambar 5.11. Diagram alir (a) rutin utama (b) subrutin kontrol suhu pada percobaan 5.3. dataSetting equ 30h dataADC equ 31h ratusan equ 32h puluhan equ 33h satuan equ 34h org 0h mov dataSetting,#50d; contoh datasetting=50 call init_lcd start: call ADC call ControlSuhu call bin2dec call Display2LCD sjmp start ;
6. Simpanlah program yang anda ketik dan beri nama : prog53a.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)
9. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU: , pada Baris 2 diikuti dengan data ADC.
Percobaan 5.4. Kalibrasi dataADC ke suhu dengan menggunakan metode Look Up Table.
Kenapa kita membutuhkan look up table?: Look up table adalah suatu cara yang digunakan untuk menghindari proses perkalian dan pembagian yang bertele-tele dan memusingkan bila dilakukan dengan menggunakan bahasa assembly, yang tentunya harus dilakukan bila kita akan kalibrasi suatu alat ukur. Contoh kalibrasi Termometer dengan menggunakan persamaan persamaan berikut ini: Suhu = DataADC * 100/ 255 oC.
Contoh table untuk konversi data ke besaran suhu ( dengan menggunakan program Microsoft Excell ). Karena data decimal maksimal adalah 255 dan suhu maksimal 100 maka Data look up tablenya adalah 255/100.
Pada percobaan 5.4, kalibrasi dilakukan untuk perubahan range desimal (0 s/d 255) menjadi range suhu(000.0 s/d 100.0 oC) 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program dataADC equ 30h org 0h start: call ADC call Display2SevenSegmen sjmp start ; ;======================================== ;Subrutin ini digunakan untuk mengambil data ADC ;Hubungkan jumper P3.4 ke MUX ;Pada percobaan ini menggunakan ADC0 ;======================================== ADC: clr P3.4; A=0
ret ; Pecahan: db 0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5 db 9,3,7,1,5,9,3,6,0,4,8,2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4 db 8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6,0,4,8,2,6,0,4,7,1,5,9,3 db 7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2 db 6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0,4,8,2,6,0,4,8,2,5,9,3,7,1 db 5,9,3,7,1,5,9,3,6,0,4,8,2,6,0,4,8,2,6,0,4,7,1,5,9,3,7,1,5,9,3,7,1,5,8,2,6,0 db 4,8,2,6,0,4,8,2,5,9,3,7,1,5,9,3,7,1,5,9,3,6,0,4,8,2,6,0 ; Satuan: db 0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4 db 4,5,5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9 db 9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,2,2,2,3,3,3,4 db 4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4,4,4,5,5,6,6,6,7,7,8,8,8,9 db 9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0,0,1,1,1,2,2,2,3,3,4 db 4,4,5,5,6,6,6,7,7,8,8,8,9,9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9 db 9,0,0,0,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,7,8,8,9,9,9,0 ; puluhan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1 db 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 db 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4 db 4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 db 5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7 db 7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 db 8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,0 ; Ratusan: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ; Data7segmen: db 11000000b,11111001b,10100100b,10110000b,10011001b db 10010010b,10000010b,11111000b,10000000b,10010000b ; end
TUJUAN: 1. Mahasiswa memahami rangkaian interface keypad 4x4 dengan mikrokontroller 2. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad 3. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan
mengeluarkan ke LED 4. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan
mengeluarkan ke 7 Segmen 5. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan
mengeluarkan ke LCD Karakter
2
KEYPAD 4 X 4
5
7
3
9
P2.7..P2.0
0
6
1
8
4
Gambar 7.1 Rangkaian interface keypad 4x4
Keypad serig digunakan sebagi suatu input pada beberapa peralatan yang berbasis mikroprosessor atau mikrokontroller. Keypad sesungguhnya terdiri dari sejumlah saklar, yang terhubung sebagai baris dan kolom dengan susuan seperti yang ditunjukkan pada gambar 7.2. Agar mikrokontroller dapat melakukan scan keypad, maka port mengeluarkan salah satu bit dari 4 bit yang terhubung pada kolom dengan logika low “0” dan selanjutnya membaca 4 bit pada baris untuk menguji jika ada tombol yang ditekan pada kolom tersebut. Sebagai
konsekuensi, selama tidak ada tombol yang ditekan, maka mikrokontroller akan melihat sebagai logika high “1” pada setiap pin yang terhubung ke baris.
Gambar 7.3. Rangkaian dasar keypad 4x4
7.1. Percobaan scan data keypad 1x4, COR-MEN-UpArrow-DnArrow Pada percobaan ini, akan dilakukan scan data keypad COR-MEN-UpArr.- DnArr. Seperti yang ditunjukkan pada gambar 7.3 dan mengeluarkan data ke LED. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Buka jumper pada DAC_EN, apabila sedang terpasang. 2. Hubungkan jumper pada LED_EN. 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
D1
P0.0..P0.7
D8
VCC
J3
EN LED12
Gambar 7.4. Display LED sebagai Output Data Keypad
djnz keybounc,keyUpA mov keydata,#0ch ; Data Output = 0ch ret ; keyDnA:
jb row1,Nokey ; djnz keybounc,keyDnA mov keydata,#0dh ; Data Output = 0dh ret Nokey:mov keydata,#0FFh ret ;================================ ;The end of Keypad 4x4 subroutine ;================================ delay: mov R0,#0 delay1:mov R2,#50 djnz R2,$ djnz R0,delay1 ret end 7. Simpanlah program yang anda ketik dan beri nama : prog71a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 3-6-9-ENT 11. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 2-5-8-0 12. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 1-4-7-CAN
7.2. Percobaan scan data keypad 4x4 dan mengeluarkan ke LCD Pada percobaan ini, akan dilakukan scan data keypad dan mengeluarkan data ke LCD Karakter. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Pasang jumper EN_LCD 2. Buka jumper pada EN_DAC, apabila sedang terpasang 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
TUJUAN 1. Mahasiswa memahami fungsi timer dan counter pada mikrokontroller 2. Mahasiswa memahami rangkaian interface untuk aplikasi timer dan counter 3. Mahasiswa dapat memanfaatkan fungsi counter untuk mencacah pulsa 4. Mahasiswa dapat memanfaatkan fungsi timer untuk membangkitkan clock dengan periode
tertentu. FUNGSI COUNTER Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang dapat dikonfigurasikan sebagai timer atau counter, 8 bit, 13 bit atau 16 bit sesuai dengan mode yang dipilih. Gambar berikut merupakan contoh aplikasi Counter 8 bit dengan menggunakan mode 3
Percobaan 9.1. Mencacah pulsa clock dengan aplikasi Mode 0 sebagai counter 13 bit dengan output LED pada TIMER 0 Pada percobaan ini, pulsa diambil melalui clock generator yang dibangkitkan oleh IC 555, hasil cacahan biner pada register counter dari Timer 0 akan ditampilkan pada LED. Lakukan beberapa langkah percobaan sebagai berikut: 1. Hubungkan 1 buah kabel antara P3.4 dengan output astable/ clock IC 555 2. Hubungkan jumper konektor LED_EN 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Gambar 9.2 Diagram alir percobaan 9.1
5. Ketik program berikut ini:
; Hubungkan konektor P3.4 ke T0 untuk mendapat output dari Astabil org 0h Start: Mov TMOD,#00000100b ; TIMER 0
; mode 0 counter 13 bit sebagai counter Setb TR0 ; TR0 = 1, start counting Get: Mov A, TL0 ; A = TL0 CPL A ; A = NOT A Mov P0, A ; P0 = A. Display ke LED Sjmp Get ; Looping Forever End
6. Simpanlah program yang anda ketik dan beri nama : prog91a.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)
9. Lakukan pengamatan pada LED ? dan lengkapi tabel berikut.
Clock D 1 D 2 D 3 D 4 D 5 D 6 D 7 D 8 1
2
3
; ;
20
Percobaan 9.2. Mencacah pulsa clock dengan aplikasi Timer 0, Mode 3 sebagai counter 8 bit dengan output 7 Segmen Pada percobaan ini, pulsa diambil melalui clock generator yang dibangkitkan oleh IC 555, hasil cacahan biner pada register counter akan ditampilkan pada 7 Segmen. Lakukan beberapa langkah percobaan sebagai berikut: 1. Hubungkan 1 buah kabel antara P3.4 ke T0 dengan output clock IC 555 2. Hubungkan jumper konektor 7Segmen_EN 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
11. Lakukan modifikasi pada program tersebut untuk menampilkan data counter ke
LCD karakter. FUNGSI TIMER Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang dapat dikonfigurasikan sebagai timer atau counter, 8 bit, 13 bit atau 16 bit sesuai dengan mode yang dipilih. Gambar berikut merupakan contoh aplikasi Counter 16 bit dengan menggunakan mode 1
Gambar 9.5. Diagram blok timer counter mode 1 16 bit
Percobaan 9.3. Membangkitkan clock dengan aplikasi Timer 1, sebagai timer 16 bit dengan output LED
Pada percobaan ini, clock akan dibangkitkan dengan menggunakan fungsi timer 16 bit, dengan periode 1 detik, Ton = 0,5 detik dan Toff = 0,5 detik, dengan tampilan LED
Gambar 9.6. Periode clock
Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap 65.536 udetik. Pada percobaan ini, untuk membangkitkan interupsi setiap 1000 udetik maka data yang harus diisikan pada register TL1 dan TH1 adalah sebagai berikut: 65536 - 10000 = 55536 d or D8F0h Maka interupsi TF1 akan segera dibangkitkan setiap 1000 x 1 udetik = 0,01 detik pada pemrograman ini, RO diimplementasikan sebagai counter software, Register R0 akan increment setiap Timer 1 overflow. Jika register R7 telah mendeteksi nilai 50 maka port P0.0 ( LED D0 ) akan nyala selama = 0,01 x 50 detik = 0,5 detik. Lakukan beberapa langkah percobaan sebagai berikut: 1. Lepas kabel yang menghubungkan antara P3.5 dengan output clock IC 555 2. Hubungkan jumper konektor LED_EN 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
TUJUAN 1. Mahasiswa memahami rangkaian interface port serial 2. Mahasiswa memahami mengkonfigurasikan komunikasi serial pada port serial PC 3. Mahasiswa memahami penulisan bahasa assembly untuk konfigurasi port serial 4. Mahasiswa memahami penulisan pemrograman delphi untuk komunikasi dengan
mikrokontroller. Salah satu komunikasi yang paling ampuh untuk diimplementasikan dalam sistem komunikasi digital adalah komunikasi dengan memanfaatkan jalur serial RS232. Mikrokontroller 89s51 telah memiliki fasilitas UART, sehingga dapat melakukan komunikasi secara serial dengan level RS2322 antar peralatan atau dengan komputer. MAX232 merupakan IC yang difungsikan untuk merubah format TTL ke RS232 atau sebaliknya.
Gambar 10.1 Sistem komunikasi serial mikrokontroller dengan PC
Percobaan 10.1 Menghidupkan LED melalui komunikasi serial RS232 dengan Program Hyperterminal Pengujian sistem komunikasi antara mikrokontroller dengan port serial computer dapat dilakukan dengan memanfaatkan program hyperterminal pada sistem yang berbasis under windows ( 98, ME dan XP ). Kelebihan penggunakan program ini, tidak diperlukan suatu bahasa pemrograman dan kelemahannya, terbatas hanya pada proses pengujian. Pada percobaan ini LED dihidupkan dan dimatikan melalui pengiriman karakter (0 – 9 ) pada keyboard PC.
Gambar 10.1 Pemilihan menu communication pada Accessories
Lakukan beberapa langkah percobaan sebagai berikut: 1. Hubungkan jumper konektor ke LED_EN 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 4. Buka Program Hyperterminal dan inputkan angka 0 s/d 9 pada keyboard PC
Gambar 10.6. (a) Diagram alir rutin utama (b) subrutine ambil karakter pada percobaan 10.1 5. Ketik program asembly berikut ini: org 0h nop
call initserial gets:call inchar mov P0,a sjmp gets ; initserial: mov scon,#50h ; Konfigurasi komunikasi serial mode 1 mov tmod,#20h ; Baud rate 2400 BPS mov th1,#0F3h setb tr1 ret ; inchar: detect: jnb ri,detect ; Deteksi bit RI apakah data sudah diterima atau belum clr ri mov a,sbuf subb a,#30h ; merubah kode ascii menjadi integer cpl a ; komplemen A ret ; End 6. Simpanlah program yang anda ketik dan beri nama : hiper1a.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)
9. Lakukan pengamatan pada nyala LED
Soal Tantangan:
1. Rencanakan program assembly untuk pengambilan data pada port serial dan lakukan pendeteksian apakah tombol yang ditekan pada keyboard PC adalah ‘0’ dan ‘1’, bila tombol yang ditekan adalah ‘0’ maka LED yang terhubung pada P0 akan berputar ke kanan dan sebaliknya bila tombol yang ditekan adalah ‘1’ maka LED yang terhubung ke P0 akan berputara ke kiri.
2. Rencakan program assembly untuk mengambil data pada port serial dan lakukan pendeteksian apakah tombol yang ditekan pada keyboard PC adalah 0, 1,2 s/d 9. dan outputkan data tersebut pada 7 segmen, sesuai dengan angka yang ditekan.
3. Lakukan perhitungan pada baudrate port serial dengan kecepatan 9600 BPS, dan terapkan pada soal tantangan 2.
Percobaan 10.2a Mengambil data satu karákter pada mikrokontroller dengan Hyperterminal. Pada percobaan ini, data satu carácter akan dikirimkan dari mikrokontroller ke komputer melalui port serial dan ditampilkan pada layar Hyperterminal. Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V 2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 3. Buka Program Hyperterminal 4. Ketik program asembly berikut ini:
org 0h
nop call initserial mov A,#’1’ ; apa yang akan terjadi bila tanda petik dihilangkan
call sendout getout: sjmp getout ; initserial: mov scon,#42h ; Konfigurasi komunikasi serial mode 1 mov tmod,#20h ; Baud rate 2400 BPS mov th1,#0F3H setb tr1 ret ; Sendout: detecto: jnb ti,detecto; clr ti ; mov sbuf,a ; ret
Percobaan 10.2b Mengambil data karákter pada mikrokontroller dengan Hyperterminal. Pada percobaan ini, data akan dikirimkan dari mikrokontroller ke komputer melalui port serial dan ditampilkan pada layar Hyperterminal. Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V 2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 3. Buka Program Hyperterminal 4. Ketik program asembly berikut ini:
Nama : Budi Jenis Kelamin : Laki-Laki Tempat/ Tgl. Lahir : Surabaya, 12 September 1987
3. Rencanakan program untuk mengambil data saklar pada mikrontroller dan dikirimkan
melalui port serial dan ditampilkan pada layar Hyperterminal.
SW1
SW8
P2.7..P2.0
Dengan keterangan sebagai berikut: Bila sw0 s/d sw7 yang terhubung ke P2 pada mikrontroller, ditekan secara bergantian maka mikrontroller akan mengirimkan data ke PC sesuai dengan tombol yang ditekan, bila sw0 ditekan maka carácter 0 akan dikirim, bila sw1 ditekan maka carácter 1 akan dikirim ke PC secara serial, dan bila tidak ada tombol yang ditekan maka akan memunculkan carácter ‘X’ dan seterusnya. Dengan format tampilan sebagai berikut: Tombol yang sedang ditekan: X
4. Rencanakan program untuk mengambil data ADC pada mikrontroller dan dikirimkan
melalui port serial dan ditampilkan pada layar Hyperterminal
Dengan keterangan sebagai berikut: Data ADC yang diambil melalui port P2 ditampilkan pada 7 segmen, sehingga akan menampilan angka 000 s/d 255, selain ditampilkan ke 7 segmen data dari ADC juga ditampilkan pada program Hyperterminal, secara berkala setiap beberapa detik, dengan menggunakan delay. Dengan format tampilan sebagai berikut: Data ADC: 000
5. Rencanakan program untuk mengambil data counter pada mikrokontroller, dengan
Timer 0, mode 2 Autoreload sehingga akan mencacah dari 000 s/d 255, tampilkan data hasil cacahan tersebut pada 7 segmen dan kirim data hasil cacahan pada layer Hyperterminal, dengan format tampilan sebagai berikut: Data hasil cacahan: 000
6. Rencakan program untuk membuat jam digital dengan memanfaatkan Timer 0, mode
16 bit, mode1, dengan interupsi setiap 50.000 microsecond. Dengan tampilan pada 7 segmen, detik, menit dan jam, dengan format tampilan sebagai berikut:
Percobaan 10.3 Menghidupkan LED melalui komunikasi serial RS232 PC dengan Pemrograman Delphi Pada percobaan ini, data dikirimkan melalui port communication serial PC secara serial dan ditangkap oleh mikrokontroller untuk dioutputkan ke LED
D1
P0.0..P0.7
D8
J3
EN LED12
VCC
Gambar 10.7. Display LED
Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan jumper konektor ke LED_EN 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
Gambar 10.8. (a) Diagram alir rutin utama (b) subrutine ambil karakter pada percobaan 10.1
5. Ketik program asembly berikut ini:
org 0h nop call initserial gets: call inchar mov P0,a sjmp gets ; initserial: mov scon,#50h ; Konfigurasi komunikasi serial mode 1 mov tmod,#20h ; Baud rate 2400 BPS mov th1,#0F3 setb tr1 ret ; inchar: detect: jnb ri,detect ; Deteksi bit RI apakah data sudah diterima atau belum clr ri mov a,sbuf ret ; End
6. Simpanlah program yang anda ketik dan beri nama : prog101a.asm
Gambar 10.10. Tampilan program delphi untuk menghidupkan LED Listing program Delphi: procedure TForm1.Button1Click(Sender: TObject); var data:byte; count:integer; begin data:=0; count:=1; comport1.write(data,count); end; procedure TForm1.Button2Click(Sender: TObject); var data:byte; count:integer; begin data:=255; count:=1; comport1.write(data,count); end;
12. Jalankan program delphi dengan menekan tombol F9 atau RUN 13. Lakukan penekanan pada tiap-tiap button dan lakukan pengamatan.
Percobaan 10.3. Mengendalikan arah gerakan LED melalui komunikasi serial RS232 dengan pemrograman Delphi Pada percobaan ini, arah gerakan LED kekiri atau kekanan, dikendalikan melalui komunikasi sercara serial RS232. Lakukan beberapa langkah percobaan sebagai berikut: 1. Pasang jumper LED_EN pada modul praktek 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
clr ri mov a,sbuf ret ; delay: mov R0,#255 delay1:mov R2,#255 djnz R2,$ djnz R0,delay1 ret ; End 6. Simpanlah program yang anda ketik dan beri nama : prog102a.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)
9. Lakukan pengamatan pada nyala LED 10. Buka Program Delphi 11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial.
Gambar 10.13. Gambar tampilan program delphi untuk pengaturan LED procedure TForm1.Button1Click(Sender: TObject); var data:byte; count:integer; begin data:=0; count:=1; comport1.write(data,count); end; procedure TForm1.Button2Click(Sender: TObject); var data:byte; count:integer; begin data:=255; count:=1; comport1.write(data,count); end; 12. Simpanlah program yang anda ketik dan beri nama rotateserial.asm 13. Jalankan program delphi dengan menekan tombol F9 atau RUN 14. Lakukan penekanan pada tiap-tiap button dan lakukan pengamatan.
Percobaan 10.4. Pengambilan data SW melalui komunikasi serial RS232 PC dengan pemrograman Delphi Pada percobaan ini, arah gerakan LED kekiri atau kekanan, dikendalikan melalui komunikasi sercara serial RS232. Lakukan beberapa langkah percobaan 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. Lakukan pengetikan program assembly sebagai berikut
org 0h
call initserial ; start: mov A,P2; ambil data dari SW call Sendout; kirim data ke PC sjmp start ; Sendout: detect: jnb ti,detect; clr ti ; mov sbuf,a ; ret ; initserial: mov scon,#52h;initialize serial mode 1 mov tmod,#20h;timer1 mode 2 mov th1,#0F3h;Reload value for baud rate 2400 setb tr1 ret end
5. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
6. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
7. Lakukan pengamatan pada nyala LED 8. Buka Program Delphi, dan lakukan pemrograman Delphi dengan tampilan sebagai
berikut
7. Lakukan pengaturan pada properties dari object inspector berikut.
8. Pada Objeck Inspector pilih tabulasi Events, dan click dua kali pada OnRxChar.
9. Tampilan akhir program, sebagai berikut:
10. Lakukan pengetikan instruksi program, sebagai berikut:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); var buff:string;y:integer; begin comport1.ReadStr(buff,count); y:=ord(buff[1]); edit1.text:=inttostr(y); end;
Percobaan 10.4 Pengambilan data ADC melalui komunikasi secara serial RS232 PC dengan pemrograman Delphi Pada percobaan ini, data ADC0804 diambil menggunakan port 1 mikrokontroller dan dikirimkan melalui port serial ke PC
Lakukan beberapa langkah percobaan sebagai berikut: 1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG 2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Start
Inisialisasi fungsi Serial
Baudrate=2400
Komunikasi Mode 1
Proses ADC
Kirim data ADC ke port Serial
Gambar 10.15. Diagram alir utama percobaan 10.3
6. Ketik program berikut ini:
org 0h call initserial ; start: call ADC; ambil data dari adc call Sendout sjmp start ; ;======================================== ;Subrutin ini digunakan untuk mengambil data ADC ;Hubungkan jumper P3.4 ke MUX ;Pada percobaan ini menggunakan ADC0 ;======================================== ADC: clr P3.4; A=0
clr P2.4 mov A,P1 setb P2.4 ret ; ; Sendout: detect: jnb ti,detect; clr ti ; mov sbuf,a ; ret ; initserial: mov scon,#52h;initialize serial mode 1 mov tmod,#20h;timer1 mode 2 mov th1,#0F3h;Reload value for baud rate 2400 setb tr1 ret end 7. Simpanlah program yang anda ketik dan beri nama : prog103a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Buka Program Delphi
11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial
Gambar 10.17. Tampilan program delphi pengambilan data ADC 12. Simpanlah program yang anda ketik dan beri nama adcserial.asm 13. Jalankan program delphi dengan menekan tombol F9 atau RUN 14. Lakukan pengamatan pada data tampilan.
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); var buff:string;y:integer; begin comport1.ReadStr(buff,count); y:=ord(buff[1]); edit1.text:=inttostr(y); end; procedure TForm1.Button1Click(Sender: TObject); begin comport1.connected:=true; end;
10.5. Pengiriman karakter ke LCD Karakter melalui komunikasi serial RS232 dengan pemrograman Delphi Pada percobaan ini data karakter dikirimkan ke LCD Karakter melalui komunikasi secara serial, melalui pemrograman delphi. 1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V 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
Gambar 10.18 Diagram alir rutin utama percobaan 10.4
TUJUAN 1. Mahasiswa memahami sistem interupsi pada mikrokontroller 2. Mahasiswa dapat menerapkan sistem interupsi pada pembuatan jam digital 3. Mahasiswa dapat memahami penggunakan bahasa assembly untuk penggunakan sistem
interupsi Pada mikrokontroller menyediakan 5 buah sumeber interupsi, 2 buah interupsi eksternal, 2 buah interupsi timer, dan 1 buah interupsi serial. Agar interupsi dapat dilayani maka instruksi assembly harus ditempatkan pada alamat vektor berikut, sesuai dengan sumber interupsi yang akan digunakan. Tabel 11.1. Alamat Vektor Interupsi
Pada contoh instruksi pemrograman tersebut tampak, apabila tidak ada interupsi maka program akan menuju ke start dan menjalankan rutinitas-rutinitas secara terus menerus, tetapi apabila suatu interupsi yang dibangkitkan oleh overflow timer 0 terjadi, maka program yang semula bersarang pada rutinitas akan melompat pada alamat vektor 0bh (alamat interupsi timer 0) dan melompat ke subrutine interupsi Timer0Interupt. Percobaan 11.1. Mengaktifkan interupsi eksternal INT0 Pada percobaan ini akan dibuat sebuah system interupsi eksternal yang menggunakan pin INT0, untuk menerima sinyal interupsi dari luar, berupa pulsa. Apabila system tidak mendapat interupsi, maka delapan LED akan padam, sebaliknya apabila ada interupsi yang berupa pulsa dari monostabil, maka delapan LED akan berkedip, terus menerus, sampai tombol reset ditekan. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan kabel dari P3.2. ke output rangkaian monostabil 2. Tekan tombol SW pada pushbutton untuk memberikan trigger pada monostabil, apabila
monostabil mendapat trigger maka monostabil akan mengeluarkan pulsa satu kali. 3. Hubungkan modul Microcontroller Trainer dengan power supply +5V 4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer 5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program Ketik program sebagai berikut: Org 0h
Sjmp start Org 03h Sjmp AdaInterupsiExt0 Start: call InitInterupsiExt0 Forever: mov P0,#11111111b Sjmp Forever InitInterupsiExt0: Setb IT0; interupsi transisi hi-lo Setb EX0; aktifkan interupsi eksternal Setb EA Ret AdaInterupsiExt0: mov P0,#11111111b call delay mov P0,#00000000b call delay reti end 6. Simpanlah program yang anda ketik dan beri nama : prog111a.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)
Percobaan 11.2. Membangkitkan clock pada jam digital :DD dengan memanfaatkan interupsi timer 0. Pada percobaan akan dibangkitkan clock untuk jam digital, hanya bagian detik puluhan (display 1) dan detik satuan (display 2) pada 7 segmen Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap 65.536 udetik. Pada percobaan ini, untuk membangkitkan interupsi setiap 50000 udetik maka data yang harus diisikan pada register TL0 dan TH0 adalah sebagai berikut: 65536 - 50000 = 15536 d or 3CB0h Maka interupsi TF0 akan segera dibangkitkan setiap 50000 x 1 udetik = 0,05 detik pada pemrograman ini, RO diimplementasikan sebagai counter software, Register R0 akan increment setiap Timer 0 overflow. Jika register R7 telah mendeteksi nilai 50 maka port P0.0 ( LED D0 ) akan nyala selama = 0,05 x 20 detik = 1 detik Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 2. Hubungkan modul Microcontroller Trainer dengan power supply +5V 3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
Setb P3.5 ; clr P3.6 Setb P3.7 call delay ret ; InitTimer: mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 ;Enable Timer 0 Interrupt setb EA ;Master Interrupt Enable setb TR0 ;Clock start running ret ; ;=============================== ;subroutine delay time ;=============================== delay: mov R1,#2 del1: mov R2,#255 del2: djnz R2,del2 djnz R1,del1 ret ;=============================== ; L O O K U P T A B L E ; Decode to Seven Segmen -> g f e d c b a ;======================================== Decoder7Segmen: DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; End 9. Simpanlah program yang anda ketik dan beri nama : prog112.asm
10. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
11. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
12. Lakukan pengamatan untuk data waktu detik yang ditampilkan apakah sesuai dengan jam konvensional.
Percobaan 11.3. Membangkitkan clock pada jam digital MM:DD dengan memanfaatkan interupsi timer 0. Pada percobaan akan dibangkitkan clock untuk jam digital untuk detik dan menit pada 7 segmen Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 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 5. Ketik program berikut ini: detik equ 30h detikpuluhan equ 31h detiksatuan equ 32h menit equ 33h menitpuluhan equ 34h menitsatuan equ 35h counter20 equ 36h ; Org 0h sjmp Start Org 0bh Ljmp Interrupt_Timer0 ; Start: mov detik,#0 mov menit,#0 call InitTimer ; Forever: call ClockDisplay sjmp Forever ; ; Interrupt_Timer0: mov tl0,#0b0h
setb P3.5 ; clr P3.6 clr P3.7 call delay ; Mov DPTR,#Decoder7Segmen mov A,detikpuluhan Movc A,@A+DPTR mov P0,A clr P3.5 ; setb P3.6 clr P3.7 call delay ; Mov DPTR,#Decoder7Segmen mov A,detiksatuan Movc A,@A+DPTR mov P0,A setb P3.5 ; Setb P3.6 clr P3.7 call delay ret ; InitTimer: mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 ;Enable Timer 0 Interrupt setb EA ;Master Interrupt Enable setb TR0 ;Clock start running ret ; ;=============================== ;subroutine delay time ;=============================== delay: mov R1,#2 del1: mov R2,#255 del2: djnz R2,del2 djnz R1,del1 ret ;======================================== ; L O O K U P T A B L E ; Decode to Seven Segmen -> g f e d c b a ;======================================== Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; End 6. Simpanlah program yang anda ketik dan beri nama : prog113.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)
9. Lakukan pengamatan untuk data waktu yang ditampilkan.
No Jam Digital (MM:DD) Jam Konvensional
1 00:01
2 00:02
3
4
5
6
7
: :
: 01:59
Percobaan 11.4. Membangkitkan clock down MM:DD dengan memanfaatkan interupsi timer 0. Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk detik dan menit pada 7 segmen Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut: 1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138 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 5. Ketik program berikut ini: detik equ 30h detikpuluhan equ 31h detiksatuan equ 32h menit equ 33h menitpuluhan equ 34h menitsatuan equ 35h counter20 equ 36h
ret ; ;=============================== ;subroutine delay time ;=============================== delay: mov R1,#2 del1: mov R2,#255 del2: djnz R2,del2 djnz R1,del1 ret ;======================================== ; L O O K U P T A B L E ; Decode to Seven Segmen -> g f e d c b a ;======================================== Decoder7Segmen: DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; End 10. Simpanlah program yang anda ketik dan beri nama : prog114.asm
11. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
12. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
13. Lakukan pengamatan untuk data waktu yang ditampilkan.
Soal Tantangan: 1. Rencanakan sebuah sistem interupsi dengan menggunakan pin P3.3/ INT1. Bila tidak ada
interupsi maka pada 7 segmen akan muncul komentar OK, dan bila ada interupsi maka akan muncul komentar Error, pada 7 segmen.
2. Rencanakan jam digital dengan tampilan ke 7 segmen bagian detik, dengan komentar: tine: 00, dengan menggunakan interupsi dari timer 1
Lampiran 2. Petunjuk Instalasi Komponen TComPort pada Delphi 6
1. Untuk melakukan antarmuka PC dengan perangkat ekternal dengan memanfaatkan port com atau port serial pada pemrograman delphi, diperlukan sebuah komponen untuk mengakses port serial communicatin RS232, untuk itu diperlukan komponen yang disebut cport.
2. Lakukan copy file Cport dari download di Internet atau Lab Microcontroller dan Paste ke folder Program Files – Borland – Delphi6.
3. Bukalah file DsgnCport6 dengan menggunakan Program Delphi
M-IDE Studio adalah salah satu cara yang digunakan untuk menjalankan kompilasi untuk divais MCS-51. M-IDE Studio mempunyai beberapa fitur yang dapat digunakan untuk edit, compil, dan debug file.
The M-IDE Studio juga dapat digunakan untuk menulis program dalam bahasa C. Dengan menggunakan software ini, maka kita dapat melihat error pada report file LST.
Gambar 1.19. M-IDE Studio
Bila anda perhatikan pada menu toolbar dan menu pilihan, tampak terlihat disable. Hal ini karena file belum dibuat. Untuk membuat sebuah file, lakukan langkah-langkah berikut:
1. Membuat File Baru
Untuk membuat file baru, klik pada menu File atau short cut seperti yang ditunjukkan pada gambar, sehingga akan tampak halaman kosong.
2. Menulis sebuah program Tulis program assembly pada halaman kosong, dan lakukan penyimpanan file. Bila file telah tersimpan maka akan tampak teks instruksi yang berwarna-warni. Sebagaimana yang ditunjukan pada gambar 3.
Gambar 1.21 Menu penyimpanan file 3. Kompilasi Agar file dengan ekstensi ASM tersebut dapat diloadkan ke mikrokontroller, maka perlu dilakukan kompilasi dari file ASM ke HEX.