MYTUTORIALCAFE.COM KIT
MIKROKONTROLER 89S51 Mikrokontroller 8 bit dengan 4K byte ISP ( In System Programmable ) Belajar dengan mudah dan menyenangkan
1.1. Perangkat Lunak 1.1.1 Compiler Compiler MIDE Studio 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
Contact HP Home Add. Office Add. Email Site
:Triwiyanto :081-55126883, Flexi: :Jl Ngagel Rejo Utara V/24 Surabaya :Jurusan Teknik Elektromedik Surabaya, Jl. Pucang Jajar Jaja r Timur 10, Surabaya. :
[email protected] :www.mytutorialcafe.com
Bila anda perhatikan pada menu toolbar dan menu pilihan, tampak terlihat disable. Hal ini karena file belum dibuat. Untuk membuat sebuah file, lakukan langkahlangkah 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.
Web:www.mytutorialcafe.com Web:www.mytutorial cafe.com Email:
[email protected] mytutorialcafe@ya hoo.co.id – Triwiyanto
1
Gambar 1.22 Kompilasi Kompilasi file fi le Figure 1.20. File baru dengan 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 penyimpanan file 3. Kompilasi Agar file dengan ekstensi ASM tersebut dapat diloadkan ke mikrokontroller, maka perlu dilakukan kompilasi dari file ASM ke HEX.
Web:www.mytutorialcafe.com Web:www.mytutorial cafe.com Email:
[email protected] mytutorialcafe@ya hoo.co.id – Triwiyanto
2
2.1 Percobaan
Percobaan 1.2. Pembuatan Subrutine Waktu Tunda
PERCOBAAN 1. DISPLAY LED
Pada percobaan ini, 8 LED akan berkedip secara kontinu, yang diakibatkan oleh pemberian waktu tunda.
VCC
1.
J3
2 1
EN LED
Start:
D1
P0.0..P0.7 D8
Gambar 1.1 Rangkaian Display LED
Percobaan 1.1. Menghidupkan LED dengan Instruksi MOV
1.
Ketik program berikut ini:
Org 0h Mov P0,#11110000b ; Isi P0 dengan 11110000 sjmp start ; lompat ke start End Simpanlah program yang anda ketik dan beri nama : prog11a.asm
3. 4.
Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
Org 0h Mov P0,#11111111b Call Delay Mov P0,#00000000b Call Delay Sjmp start
; Delay: mov R1,#255 Del1: mov R2,#255 Del2: djnz R2,del2 djnz R1,del1 ret end
; Kirim data biner 11111111 ke P0 ; Memanggil waktu tunda ; Kirim data biner 00000000 ke P0 ; Memanggil waktu tunda ; lompat ke start ; Isi 255 ke R1 ; Isi 255 ke R2 ; Dec. R2 dan lompat ke del2 if NZ
2.
Simpanlah program yang anda ketik dan beri nama : prog12a.asm
3.
Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
4.
Start:
2.
Ketik program berikut ini:
Percobaan 1.4. LED Berjalan dengan Instruksi RL/ RR ( Rotate Left dan Right )
Start: Kiri:
Org 0H Mov Mov Mov Call
A,#11111110b;isi A dengan 11111110b R0,#7 ;isi R0 dengan 7 P0,A ;copy A ke P0 Delay ;panggil sub rutine delay
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
3
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
PERCOBAAN 2 SAKLAR PUSH BUTTON
; Kanan: Mov
Mov R0,#7 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
SW1
; Delay: mov R1,#255 Del1: mov R2,#255 Del2: djnz R2,del2 djnz R1,del1 ret end
P2.7..P2.0 SW8
1.
Simpanlah program yang anda ketik dan beri nama : prog14a.asm
2.
Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
3.
(a) VCC J3
2 1
EN LED D1
P0.0..P0.7 D8
(b) Gambar 2.2. Rangkaian Interface (a) Push Button dan LED (b)
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
4
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).Dan stop ditakan tombol P2.0 ( ENTER). org 0h start: mov R7,#1 ;inisialisasi data setting Setup: 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.1,SetDn ;bila sw2(P2.1) ditekan mk INC R7 inc R7 ;R7:=R7+1 acall delay ;waktu tunda, antar penekanan tombol cjne R7,#100d,setup;deteksi apakah setting=100d 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
PERCOBAAN 3 DISPLAY 7 SEGMEN
Common Anoda
P0.6..P0.0
a
a b b c d g e c f d g
f
e
7 x 220 ohm VCC
VCC
VCC
VCC
VCC
VCC
VCC
VCC
PNP
PNP
PNP
PNP
PNP
PNP
PNP
PNP
FCS 9013
FCS 9013
FCS 9013
Y7..Y0
FCS 9013
FCS 9013
FCS 9013
FCS 9013
FCS 9013
8 x 1k ohm
(a)
P3.5
Y7..Y0
P3.6
U8 1 2 3
P3.7 VCC
A B C
J2
EN 7 SEGMEN
6 4 5
1 2
15 14 13 12 11 10 9 7
74LS138
R28 VCC
G1 G2A G2B
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
10K (b)
Gambar 3.1. (a) Rangkaian display 7 segmen (b) rangkaian dekoder 74ls138
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
6
Tabel 3.1. Tabel kebenaran 74LS138
SELEKTOR C
B
0 0 0 0 1 1 1 1
A
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
ENABLE
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”.
OUTPUT
G1
/G2A
/G2B
Y 0
Y Y 1 2
Y 3
Y 4
Y Y 5 6
Y 7
1 1 1 1 1 1 1 1
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 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0
1 1 0 1 1 1 1 1
1 1 1 1 1 1 0 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:
start:
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. Tabel 3.2. Data Display 7 Segmen P0.6 P0.5 P0.4 P0.3 g f e d 1 0 0 0 1 1 1 1 0 1 0 0 0 1 1 0 0 0 1
0 0 0
0 0 0
1 0 0
org 0h 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 kompilasi program dari *.asm ke *.hex.
untuk melakukan
Percobaan 3.2. Tulis Tiga Karakter ”AbC” pada 7 Segmen P0.2 c 0 0 1 0
P0.1 b 0 0 0 0
P0.0 a 0 1 0 0
0 0 1
0 1 1
0 1 0
Display 0 1 2 3 : A b C :
Pada percobaan ini, karakter ‘AbC’ akan ditampilkan pada 7 Segmen Display 1, Display 2 dan Display 3 secara berturutan 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' call delay ; Panggil Waktu Tunda ; setb P3.5 ; P3.5 = '1' clr P3.6 ; P3.6 = '0'
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
7
clr P3.7 ; P3.7 = '0' mov P0,#10000011b ; isi P0 dg.100000011. Cetak Karakter 'b' call delay ; Panggil Waktu Tunda
call delay ; setb P3.5 clr P3.6 clr P3.7 mov P0,#10100100b call delay
; 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
; clr P3.5 setb P3.6 clr P3.7 mov P0,#10110000b call delay
; sjmp start ; Lompat ke start ;============================================= ;subroutine delay created to rise delay t ime ;============================================= 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. 8.
Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
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 : org 0h start: clr P3.5 clr P3.6 clr P3.7 mov P0,#11111001b ; Cetak Karakter '1'
; Cetak Karakter '2'
; Cetak Karakter '3'
; setb P3.5 setb P3.6 clr P3.7 mov P0,#10011001b call delay
; Cetak Karakter '4'
; clr P3.5 clr P3.6 setb P3.7 mov P0,#10010010b call delay
; Cetak Karakter '5'
; setb P3.5 clr P3.6 setb P3.7 mov P0,#10000010b call delay
; Cetak Karakter '6'
; clr P3.5 setb P3.6 setb P3.7
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
8
mov P0,#11111000b call delay
; Cetak Karakter '7'
; setb P3.5 setb P3.6 setb P3.7 mov P0,#10000000b call delay
; Cetak Karakter '8'
; sjmp start
; Lompat ke Start
;============================================= ;subroutine delay created to rise delay t ime ;============================================= 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. 8.
Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
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.
Org 0h ratusan equ 30h puluhan equ 31h satuan equ 32h ; start: mov R7,#1 ;inisialisasi data setting Setup: mov A,R7 ;simpan data R7 ke A call bin2dec call display2sevensegmen jnb p2.0,getout;bila sw1(P2.0) ditekan mk getout(selesai) jb P2.1,SetDn ;bila sw2(P2.1) ditekan mk INC R7 inc R7 ;R7:=R7+1 acall delay ;waktu tunda lama penekanan tombol cjne R7,#100d,setup;deteksi apakah setting=100d mov R7,#1 ;reset R7 -> 1 sjmp Setup ; SetDn: Mov A,R7 ;simpan data R7 ke A call bin2dec call display2sevensegmen 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 setti ng=0d mov R7,#99d ;reset R7 -> 99 sjmp Setdn getout: sjmp getout ; Display2SevenSegmen: mov A,puluhan mov DPTR,#Data7segmen movc A,@A+DPTR mov P0,A clr P3.5 ;
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
9
Setb P3.6 Setb P3.7 call delay
6.
Simpanlah program yang anda ketik dan beri nama : prog34a.asm
7.
mov A,satuan mov DPTR,#Data7segmen movc A,@A+DPTR mov P0,A Setb P3.5 ; Setb P3.6 Setb P3.7 call delay ret
8.
Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
;
PERCOBAAN 4 LCD KARAKTER
Potensio Multiturn
VCC
10k
; 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
J3
3
EN LCD
1
2
P0.7..P0.0
2
7 VCC
D0 8
D1
15
D1 BPL
9 D2 10
16
D3 GND
11 D4 12
1
D5 VSS
13 D6 14 D7 4
P3.6
RS 6 EN
P3.7
LCD Character
2 X 16
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:
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
10
Tabel 4.1 Pin dan Fungsi
PIN
Name
1
VSS
Function
2
VCC
+5V
3
VEE
Contrast voltage
4
RS
5
R/W
6
E
7
DB0
LSB
8
DB1
-
9
DB2
-
10
DB3
-
11
DB4
-
12
DB5
-
Ground voltage
Register Select 0 = Instruction Register 1 = Data Register Read/ Write, to choose write or read mode 0 = write mode 1 = read mode Enable 0 = start to lacht data to LCD character 1= disable
13
DB6
-
14
DB7
MSB
15
BPL
Back Plane Light
16
GND
Ground voltage
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”.
Function Set Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter KONTROL
Display karakter pada LCD diatur oleh pin EN, RS dan RW:
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
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
11
N : Megantur Jumlah Baris N = 1, 2 baris N= 0, 1 baris F: Mengatur Ukuran Font, 5x7 atau 5x8
C : Menampilkan kursor C = 1, kursor ditampilkan C = 0, kursor tidak ditampilkan B : Karakter ditunjukkan dengan kursor yang berkedip B=1, kursor blink
Entry Mode Set Mengatur increment/ decrement dan mode geser KONTROL
Clear Display Perintah ini hapus layar 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 k etika 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
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 KONTROL
DATA
RS
EN
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
pulse
0
0
0
0
0
S/C
R/L
X
X
Catatan : x = Dont care
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.
S/C
R/L
Note
0
0
Geser posisi kursor ke kiri
0
1
Geser posisi kursor ke kanan
1
0
Geser keseluruhan display ke kiri
1
1
Geser keseluruhan display ke kanan
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
12
mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; Write_inst: clr P3.6 mov P0,R1 setb P3.7 call delay clr P3.7 ret ;
; P3.6 = RS =0 ; copy R1 ke P0 ; P3.7 =EN = 1 ; call delay time ; P3.7 =EN = 0
Write_data: setb P3.6 ; P3.6 = 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 : prog41a.asm 7. 8.
Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
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
org 0h call init_LCD start: mov R1,#80h call write_inst mov R1,#'W' call write_data mov R1,#'e' call write_data mov R1,#'l' call write_data mov R1,#'c' call write_data mov R1,#'o' call write_data mov R1,#'m' call write_data mov R1,#'e' call write_data stop: sjmp stop Init_lcd: mov r1,#00000001b call write_inst mov r1,#00111000b call write_inst mov r1,#00001100b call write_inst mov r1,#00000110b call write_inst ret ; Write_inst:
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
; Lokasi Display RAM, Row=1 Col=1
;Display clear ;Function set, Data 8 bit,2 line font 5x7 ;Display on, cursor off,cursor blink off ;Entry mode, Set increment
14
clr P3.6 mov P0,R1 setb P3.7 call delay clr P3.7 ret
; P3.6 = RS =0 ; copy R1 ke P0 ; P3.7 =EN = 1 ; call delay time ; P3.7 =EN = 0
; Write_data: setb P3.6 ; P3.6 = 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 program dari *.asm ke *.hex.
untuk melakukan kompilasi
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. org 0h call init_LCD start: call write_char stop: sjmp stop ;
write_char: mov dptr,#word1 ;DPTR = [ address word1 ] mov r3,#16 ;R3=16,number character to be display mov r1,#80h ;R1=80h,address DDRAM start position call write_inst ; write1:clr a ;A=0 movc a,@a+dptr ; A = [A+ DPTR] mov r1,A ; R1 = A inc dptr ; DPTR = DPTR +1 call write_data; djnz r3,write1 ; R3 = R3-1, ret ; Init_lcd: mov r1,#00000001b ;Display clear call write_inst ; mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7 call write_inst ; mov r1,#00001100b ;Display on, cursor off,cursor blink off call write_inst mov r1,#00000110b ;Entry mode, Set increment call write_inst ret ; Write_inst: clr P3.6 ; P3.6 = 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.6
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
; P3.6 = RS =1
15
mov P0,R1 setb P3.7 call delay clr p3.7 ret
; copy R1 ke P0 ; P3.7 =EN = 1 ; call delay time ; P3.7 =EN = 0
PERCOBAAN 5 ANALOG TO DIGITAL CONVERTER ( ADC )
VCC
; delay: mov R0,#0 delay1:mov R7,#0fh djnz R7,$ djnz R0,delay1 ret ; word1: DB ' Welcome Home '; Karakter yang disimpan di ROM end
VCC
Simpanlah program yang anda ketik dan beri nama : prog43a.asm
7.
Pada program MIDE tersebut pilih Build /F9 atau program dari *.asm ke *.hex.
R6 2
P1.7..P1.0
P3.2
20
18 17 16 15 14 13 12 11 5
6.
VCC
3
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
VREF/2 CLKR CLKIN
10
untuk melakukan kompilasi
220
ADC0804 +IN -IN
INTR
10k
CS RD WR
6 7 9 19 4 1 2 3
3
1
2
10k
10k D1
150p
3V
1
PROG
8
VCC
6
P3.3
5 4
P3.4
3 2 1
G 74LS244
RUN/ EN ADC
Gambar 5.1 Rangkaian ADC0804
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.
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
16
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 V REF merupakan tegangan referensi yang digunakan untuk offset suatu keluaran digital maksimum. Dengan persamaan sebagai berikut: V REF
=
1 V maks 2 IN
V RESOLUSI
=
V IN MAKS
255
Misalnya anda menginginkan masuk analog maksimum sebesar 4 V, maka: V REF
=
1 2
x4
=
2 volt
Gambar 5.2 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).
V RESOLUSI
4 =
=
255
0,0156 volt
Resolusi ini mempunyai arti sebagai berikut: No 1 2 3 4 5
V IN ( volt )
Data Digital ( biner )
0,000 0,0156 0,0313 : 4
0000 0000 0000 0001 0000 0010
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
1111 1111
17
A/D ini 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
Common Anoda
P0.6..P0.0
Mikrokontroller
/INTR /WR /RD D0 s/d D7
P3.2 P3.3 P3.4 P1.0 s/d P1.7
e
7 x 220 ohm VCC
VCC
VCC
VCC
VCC
VCC
VCC
VCC
PNP
PN P
PN P
PN P
PN P
PN P
PN P
PN P
FCS 9013
FCS 9013
FCS 9013
FCS 9013
FCS 9013
FCS 9013
FCS 9013
8 x 1k ohm
P3.5 Y7..Y0 U8 1 2 3
P3.7
Tabel 5.2. Instruksi logika pada pin kontrol A/D 0804
VCC
A B C
J2
0 1 1 1
1 1 1 0
1 1 0 1
Hi-Z Hi-Z Hi-Z D0 s/d D7
KEGIATAN EN 7 SEGMEN
Berada dalam keadaan High Impedansi A/D mengalami reset Data Mulai konversi Analog ke Digital Konversi telah selesai 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.
FCS 9013
(a)
P3.6
OUTPUT /INTR DO S/D D7 1 Hi-Z
a b b c d g e c f d g
Y7..Y0
ADC
INPUT /WR /RD 1 1
a
f
6 4 5
1 2 R28 VCC
G1 G2A G2B
Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
15 14 13 12 11 10 9 7
74LS138
10K
(b) Gambar 5.3. Interface rangkaian display 7 segmen
ratusan equ 30h puluhan equ 31h satuan equ 32h ; org 0h start: call ADC
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
18
call Bin2Dec call Display2SevenSegmen sjmp start ; ;======================================== ;Subrutin ini digunakan untuk mengambil data ADC ;======================================== ADC: clr P3.3 ; Reset ADC. P3.3 = 0 Nop ; delay 1us Nop ; delay 1 us Nop ; delay 1 us setb P3.3 ; Start Conversi eoc: jb P3.2,eoc ; Tunggu interupsi INT, apakah P3.2= 1, jika Ya ; lompat ke EOC clr P3.4 ; Baca Data. P3.4=0 mov A,P1 ; Copy data P1 ke A setb P3.4 ; Disable RD. P3.4=1 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 ; mov A,puluhan
mov DPTR,#Data7segmen movc A,@A+DPTR mov P0,A clr P3.5 ; Setb P3.6 Setb P3.7 call delay ; mov A,satuan mov DPTR,#Data7segmen movc A,@A+DPTR mov P0,A Setb P3.5 ; Setb P3.6 Setb P3.7 call delay ret ; delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ;======================================== ;Subrutin ini untuk merubah data biner ke desimal ;menjadi 3 digit = ratusan-puluhan-satuan ;========================================= Bin2Dec: mov b,#100d div ab mov ratusan,a mov a,b mov b,#10d div ab mov puluhan,a mov satuan,b
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
19
ret ; Data7segmen: db 11000000b,11111001b,10100100b,10110000b,10011001b db 10010010b,10000010b,11111000b,10000000b,10010000b end 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. Potensio Multiturn
VCC
10k J3 3
EN LCD
1
2
P0.7..P0.0
2
7 VCC
D1
D0 8
15
D1 BPL
9 D2 10
16
D3 GND
11 D4 12
1
D5 VSS
13 D6 14 D7 4
P3.6
RS 6 EN
P3.7
LCD Character
2 X 16
Gambar 5.8. Rangkaian Interface LCD Karakter
org 0h ratusan equ 30h puluhan equ 31h satuan equ 32h ; org 0h call init_LCD call write_char start:call ADC call Bin2Dec call Write2LCD sjmp start ;======================================= ;Subrutin ini digunakan untuk mengambil data ADC ;======================================== ADC: clr P3.3 nop nop nop setb P3.3 eoc: jb P3.2,eoc clr P3.4 mov A,P1 setb P3.4 ret ;================================================= ;Subrutin untuk menampilkan data ke LCD character 2 x16 ;pada DDRAM 0C9 0CA 0CB untukratusan, puluhan, and satuan ;================================================= Write2LCD: mov r1,#0c9h call write_inst mov a,ratusan add a,#30h mov r1,a call write_data
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
20
;
mov r1,#80h acall write_inst
mov r1,#0cah call write_inst mov a,puluhan add a,#30h mov r1,a call write_data ; mov r1,#0cbh call write_inst mov a,satuan add a,#30h mov r1,a call write_data ret ;======================================= ;Subrutin ini untuk merubah data biner ke desimal ;menjadi 3 digit = ratusan-puluhan-satuan ;======================================= Bin2Dec: mov b,#100d div ab mov ratusan,a mov a,b mov b,#10d div ab mov puluhan,a mov satuan,b ret ;=============================================== ;Subrutin untuk menampilkan tulisan Data ADC0804 ; pada baris 1 ;=============================================== write_char: mov dptr,# word1 ;DPTR = [ address word1 ] mov r3,#16 ;R3=16,number character to be display
; write1:clr a movc a,@a+dptr mov r1,A inc dptr acall write_data djnz r3,write1 ret ; Init_lcd: mov r1,#00000001b call write_inst mov r1,#00111000b call write_inst mov r1,#00001100b call write_inst mov r1,#00000110b call write_inst ret ; write_inst: clr P3.6 mov P0,R1 setb P3.7 call delay clr P3.7 ret ; Write_data: setb P3.6 mov P0,R1 setb P3.7 call delay clr p3.7
;R1=80h,address DDRAM start positi on
;A=0 ; A = [A+ DPTR] ; R1 = A ; DPTR = DPTR +1 ; ; R3 = R3-1,
;Display clear ;Function set,Data 8 bit,2 line font 5x7 ;Display on, cursor off,cursor blink off ;Entry mode, Set increment
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
; RS = P2.0 = 0, write mode instruction ; D7 s/d D0 = P0 = R1 ; EN = 1 = P2.1 ; call delay time ; EN = 0 = P2.1
; RS = P2.0 = 1, write mode data ; D7 s/d D0 = P0 = R1 ; EN = 1 = P2.1 ; call delay time ; EN = 0 = P2.1
21
ret ; delay: mov R0,#0 delay1:mov R2,#0fh djnz R2,$ djnz R0,delay1 ret ; word1: DB ' Data ADC0804 ' end
LAMPIRAN Diagram Skematik Rangkaian L2.1. Rangkaian Target Programmer HEADER 8 1 2 3 4 5 6 7 8
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. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
8.
PROGRAMMER
HEADER 8 AT89S51 39 38 37 36 35 34 33 32
1 2 3 4 5 6 7 8
VCC
1 2 3 4 5 6
1 2 3 4 5 6 7 8
XTALL1
19 18 9
XTALL2 1
VCC
31 VCC
10uF
1N4148
40
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0/T2 P1.1/T2-EX P1.2 P1.3 P1.4/SS P1.5/MOSI P1.6/MISO P1.7/SCK XTAL1 XTAL2 RST EA/VPP VCC
2
30p
1k
XTALL1
1k
RESET
CRYSTAL 12 MHz
VCC
XTALL2 30p
Web:www.mytutorialcafe.com Email:
[email protected] – Triwiyanto
22
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1 P3.4/TO P3.5/T1 P3.6/WR P3.7/RD PSEN ALE/PROG
21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 29 30
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8