Escolar Documentos
Profissional Documentos
Cultura Documentos
Experiment Manual
Petunjuk Praktikum
Microcontroller AT89sXXX Trainer Kit
(Edisi V2.0-Update)
Oleh: Triwiyanto
Media Pengembangan
Mikrokontroler
Keluarga MCS-51
LABORATORIUM MIKROKONTROLLER
JURUSAN TEKNIK ELEKTROMEDIK
POLTEKKES DEPKES SURABAYA
2009
DASAR TEORI
J1 J2
CON8 U1 CON8
P0.0 39 21 P2.0
1 P0.1 38 P0.0/AD0 P2.0/A8 22 P2.1 1
2 P0.2 37 P0.1/AD1 P2.1/A9 23 P2.2 2
3 P0.3 36 P0.2/AD2 P2.2/A10 24 P2.3 3
4 P0.4 35 P0.3/AD3 P2.3/A11 25 P2.4 4
5 P0.5 34 P0.4/AD4 P2.4/A12 26 P2.5 5
6 P0.6 33 P0.5/AD5 P2.5/A13 27 P2.6 6
7 P0.7 32 P0.6/AD6 P2.6/A14 28 P2.7 7
8 P0.7/AD7 P2.7/A15 8
P1.0 1 10 P3.0
1 P1.1 2 P1.0 P3.0/RXD 11 P3.1 1
2 P1.2 3 P1.1 P3.1/TXD 12 P3.2 2
3 P1.3 4 P1.2 P3.2/INTO 13 P3.3 3
4 P1.4 5 P1.3 P3.3/INT1 14 P3.4 4
5 P1.5 6 P1.4 P3.4/TO 15 P3.5 5
6 P1.6 7 P1.5/MOSI P3.5/T1 16 P3.6 6
7 P1.7 8 P1.6/MISO P3.6/WR 17 P3.7 7
8 P1.7/SCK P3.7/RD 8
J3 XTAL1 19 29 CON8
CON8 XTAL2 18 XTAL1 PSEN J4
RST 9 XTAL2 30
RST ALE/PROG
VCC 31
EA/VPP
VCC 40
VCC
AT89S51
Pada diagram skematik tersebut, terdapat 4 (empat) buah port, Port0, Port 1, Port 2 dan Port 3,
yang masing-masing terdiri dari 8 bit data. Tata cara penulisan port adalah: P0.0 s/d P0.7, P1.0
s/d P1.7, P2.0 s/d P2.7 dan P3.0 s/d P3.7.
Instruksi Setb, adalah instruksi mengirim logika 1 pada sebuah bit port
Instruksi Clr, adalah instruksi mengirim logika 0 pada sebut bit port
Contoh:
Setb P0.0; kirim logika 1 pada P0.0
Clr P0.7; kirim logika 0 pada P0.7
Instruksi CJNE, Compare and Jump if Not Equal (bandingkan dan lompatlah jika tidak
sama)
Contoh:
Mov A, P2
Periksa: CJNE A,#1,Periksa
Mov P0,A
Pada instruksi tersebut, copy data dari P2 ke A, bandingkan data A dengan 1 apabila tidak
sama (A=/ 1 maka akan lompat ke label Periksa ). Apabila sama ( A=#1, maka akan turun ke
bawah).
Instruksi SJMP, short jump, melompat ke sebuah label dengan jarak dekat
Contoh:
Mulai1: mov P0,#01010101b
Sjmp Mulai1
Pada perintah tersebut berarti, program akan melompat ke label Mulai1, ingat label tidak
diperkenankan ada spasi: Mulai 1
Contoh:
AyoMulai: mov P0,#01010101b
Call Pekerjaan1
Call Pekerjaan2
Sjmp AyoMulai
;
Pekerjaan1: Bla
Bla
Ret
;
Pekerjaan2: Bla
Bla
ret
End
Pada contoh penulisan program assembly tersebut, tampak sebuah label AyoMulai
(perhatikan tatacara pembuatan lebel ini, tanpa ada spasi dan boleh dalam bahasa
indonesia, untuk keperluan lompatan, dan diakhiri dengan End. Perhatikan tataletak
pembuatan subrutin tersebut.
Apabila instruksi tersebut dilakukan pada saat instruksi SJMP AyoMulai, maka pemanggilan
instruksi yang ada dibawahnya akan terabaikan atau tidak diproses.
J3
2
1 EN LED
D1
P0.0..P0.7
D8
Gambar 1.2 Rangkaian Display LED
Perhatikan pada gambar 1.1 tersebut. Delapan buah LED terhubung ke port 0, yang
difungsikan sebagai output. Pada konfigurasi tersebut LED akan nyala bila diberi logika
LOW ‘0’ melalui port 0, dan LED akan padam bila diberi logika HIGH ‘1’ melalui port 0.
Agar Display LED ini dapat aktiv maka jumper EN LED harus dihubungkan singkat.
Pada percobaan 1.1 ini LED akan dihidupkan atau dimatikan dengan mengirimkan data
tertentu pada port 0.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper pada LED_EN, untuk mengaktifkan 8 buah LED
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Org 0h
Start: Mov P0,#11110000b ; Isi P0 dengan 11110000
sjmp start ; lompat ke start
End
6. Simpanlah program yang anda ketik dan beri nama : prog11a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program
dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software (
Lihat Petunjuk Penggunaan)
10. Gantilah data #11110000b tersebut diatas dengan data seperti pada tabel berikut dan
lakukan pencatatan LED mana yang padam.
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
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
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
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.
TUJUAN:
1 Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar
2. Mahasiswa dapat memahami program assembly untuk mengambil data saklar dan
mengeluarkan data ke LED.
3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan
RR.
DASAR TEORI
Instruksi Mov A, P2
Contoh:
Mov A, P2; pada instruksi ini, data pada port P2 akan di copy ke register Akumulator
GAMBAR:
SW1
P2.7..P2.0
SW8
(a)
J3
2
1 EN LED
D1
P0.0..P0.7
D8
(b)
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’.
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
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.
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
org 0h
start:
mov R7,#1 ;inisialisasi data setting
Setup: mov A,R7 ;simpan data R7 ke A
cpl A ;komplemen A,
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).
Soal Kuis:
1. Pelajari instruksi assembly pada percobaan ini, fungsi dan tata cara
penulisannya
2. Pelajari rangkaian elektronik pada percobaan ini
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.
DASAR TEORI
Common Anoda P0.6..P0.0
a a
f b b
c
d
g e
e c f
d g
7 x 220 ohm
VCC VCC VCC VCC VCC VCC VCC VCC
Y7..Y0
PNP PNP PNP PNP PNP PNP PNP PNP
FCS 9013 FCS 9013
FCS 9013 FCS 9013 FCS 9013 FCS 9013 FCS 9013 FCS 9013
Y0
8 x 1k ohm
(a)
P3.5
Y7..Y0
P3.6 U8
1 15
P3.7 2 A Y0 14
3 B Y1 13
VCC C Y2 12
J2 Y3 11
6 Y4 10
4 G1 Y5 9
1 G2A Y6
EN 7 SEGMEN 2
5
G2B Y7
7
R28
74LS138
VCC 10K
(b)
Gambar 3.1. (a) Rangkaian display 7 segmen (b) rangkaian dekoder 74ls138
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”.
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
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
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'
clr P3.7 ; P3.7 = '0'
mov P0,#10000011b ; isi P0 dg.100000011. Cetak Karakter 'b'
call delay ; Panggil Waktu Tunda
org 0h
start: clr P3.5
clr P3.6
clr P3.7
mov P0,#11111001b ; Cetak Karakter '1'
call delay
;
setb P3.5
clr P3.6
clr P3.7
clr P3.5
clr P3.6
setb P3.7
mov P0,#10010010b ; Cetak Karakter '5'
call delay
;
setb P3.5
clr P3.6
setb P3.7
mov P0,#10000010b ; Cetak Karakter '6'
call delay
;
clr P3.5
setb P3.6
setb P3.7
mov P0,#11111000b ; Cetak Karakter '7'
call delay
;
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
No Nama Karakter
1 AbCdEFGH
2 98765432
3 JKLnOPrS
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.
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.
Soal Tantangan:
1. Rencanakan program untuk membatasi setting Up dan Down, batas bwah 30 dan batas
atas 40
2. Kembangkan program tersebut, apabila tombol ENT ditekan maka akan menampilkan
tulisan OyE
Soal Kuis:
1. Pelajari tentang sebuah seven segmen, jenis dan persamaannya (apabila dibangun
dengan LED)
2. Pelajari tentang Dekoder 74LS138, fungsi dan penggunaan masing-masing pin
3. Pelajari instruksi assembly yang diperlukan pada pemrograman ini
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
DASAR TEORI
Potensio Multiturn
VCC
10k
J3
3 P0.7..P0.0
EN LCD
1
2
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 P3.6
4
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:
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”.
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
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
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
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
KONTROL DATA
RS EN R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 pulse 0 0 0 0 1 D/C R/L X X
Memori LCD
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.
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
org 0h
call init_LCD
start: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
call write_inst ; panggil tulis instruksi
mov R1,#'A' ; Cetak Karakter A
call write_data ; panggil tulis data
stop: sjmp stop
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:
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 35
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 ; 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. 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 karakter yang tercetak pada LCD.
10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
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
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
Soal Kuis:
1. Apakah yang dimaksud dengan 2 x 16 pada LCD Karakter 2x16
2. Pelajari tentang pin konfigurasi, dan fungsi dari LCD Karakter
3. Pelajari tentang Function Set, Entry Mode, Display On/Off, Shift Cursor/Display
4. Pelajari rangkaian lengkap interfacing LCD ke Mikrokontroller
TUJUAN:
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan ADC 0804
2. Mahasiswa memahami setting tegangan referensi Vref ADC0804
3. Mahasiswa memahami perhitungan tegangan resolusi ADC0804
4. Mahasiswa dapat memahami program assembly untuk menampilkan data ADC ke 7
Segmen
5. Mahasiswa dapat memahami program assembly untuk menampilkan data ADC ke LCD
Karakter 2 x 16
DASAR TEORI
U8
13 3
AD0 X0 X
14
AD1 X1
15
AD2 X2
12
AD3 X3
1
5 X4
2 X5
4 X6
X7
GND 6
P2.6 11 INH
P2.7 10 A
9 B
C
VCC GND 4051
R36 U9 ADC0804
68
6 18 P1.0
GND +IN DB0 P1.1 P1.0
7 17
-IN DB1 P1.2 P1.1
16
DB2 P1.3 P1.2
9 15
VREF/2 DB3 P1.3
1
19 14 P1.4
CLKR DB4 P1.5 P1.4
D12 4 13
CLKIN DB5 P1.6 MOSI
2 12
3V CS DB6 P1.7 MISO
10K R38 1 11
P3.4 CS DB7 SCK
2
P3.4 P3.3 RD P3.2
10K C9 3 5
150pF P3.3 WR INTR P3.2
R39 + C10
10uF
3
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.
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 VREF merupakan tegangan referensi yang digunakan untuk offset suatu
keluaran digital maksimum. Dengan persamaan sebagai berikut:
VREF = 12 VIN maks
VIN MAKS
VRESOLUSI =
255
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.
ADC Mikrokontroller
/INTR P3.2
/WR P3.3
/RD P3.4
D0 s/d D7 P1.0 s/d P1.7
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.
a a
f b b
c
d
g e
e c f
d g
7 x 220 ohm
VCC VCC VCC VCC VCC VCC VCC VCC
Y7..Y0
PNP PNP PNP PNP PNP PNP PNP PNP
FCS 9013 FCS 9013
FCS 9013 FCS 9013 FCS 9013 FCS 9013 FCS 9013 FCS 9013
8 x 1k ohm
(a)
P3.5
Y7..Y0
P3.6 U8
1 15
P3.7 2 A Y0 14
3 B Y1 13
VCC C Y2 12
J2 Y3 11
6 Y4 10
4 G1 Y5 9
1 G2A Y6
EN 7 SEGMEN 2
5
G2B Y7
7
R28
74LS138
VCC 10K
(b)
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
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 43
secara bersamaan maka ketiga display tersebut harus dihidupkan secara bergantian dengan
waktu tunda tertentu.
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 )
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 P0.7..P0.0
EN LCD
1
2
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 P3.6
4
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 MUX X0
;===============================================
ADC: clr P2.6
clr P2.7
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
;
mov r1,#0cah
call write_inst
mov a,puluhan
add a,#30h
mov r1,a
call write_data
;
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 49
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
mov r1,#80h ;R1=80h,address DDRAM start position
acall write_inst
;
write1:clr a ;A=0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
acall 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
;
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 50
write_inst:
clr P3.6 ; RS = P2.0 = 0, write mode instruction
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
call delay ; call delay time
clr P3.7 ; EN = 0 = P2.1
ret
;
Write_data:
setb P3.6 ; RS = P2.0 = 1, write mode data
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
call delay ; call delay time
clr p3.7 ; EN = 0 = P2.1
ret
;
delay: mov R0,#0
delay1:mov R2,#0fh
djnz R2,$
djnz R0,delay1
ret
;
word1: DB ' Data ADC0804 '
end
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:
mov a,dataSetting ; contoh dataSetting=50
mov b,dataADC ; contoh dataADC=30
clr c
subb a,b
jnz OnHeater
ret
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).
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:
Start Start
End End
(a) (b)
Gambar 5.11. Diagram alir (a) rutin utama (b) subrutin kontrol suhu pada percobaan 5.3.
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.
: : : : : :
: : : : : :
: : : : : :
243 95.3 0 9 5 3
244 95.7 0 9 5 7
245 96.1 0 9 6 1
246 96.5 0 9 6 5
247 96.9 0 9 6 9
248 97.3 0 9 7 3
249 97.6 0 9 7 6
250 98.0 0 9 8 0
251 98.4 0 9 8 4
252 98.8 0 9 8 8
253 99.2 0 9 9 2
254 99.6 0 9 9 6
255 100.0 1 0 0 0
Pada percobaan 5.4, kalibrasi dilakukan untuk perubahan range desimal (0 s/d 255) menjadi
range suhu(000.0 s/d 100.0 oC)
db 10010010b,10000010b,11111000b,10000000b,10010000b
;
end
Soal Kuis:
1. Pelajari mengenai pin konfigurasi dan fungsi dari ADC0804
2. Pelajari mengenai tegangan referensi, output data digital (bila diberi input tertentu)
3. Pelajari tentang instruksi assembly untuk keperluan ambil data ADC0804
4. Pelajari tentang interface ADC ke mikrokontroller
TUJUAN
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan DAC0808
2. Mahasiswa memahami setting arus referensi pada DAC
3. Mahasiswa memahami perhitungan output tegangan
4. Mahasiswa memahami pemrograman assembly DAC
DASAR TEORI
VEE
R29 5K
VCC
13
4
U4 74LS373 U5 107
P2.0 3 2 12 4 2 J12
V+
-
P2.1 4 D0 Q0 5 11 A8 IOUT 6
P2.2 7 D1 Q1 6 10 A7 3 + 1
P2.3 8 D2 Q2 9 9 A6 2 CON1
P2.4 13 D3 Q3 12 8 A5 IOUT
P2.5 14 D4 Q4 15 7 A4 U6
VDD 7
P2.6 17 D5 Q5 16 6 A3 15P C4
P2.7 18 D6 Q6 19 5 A2 16 VEE
D7 Q7 A1 COMP
J14 P3.4 1 VR+ 14
11 OC VR+
1 VCC G 15
V-
2 VR-
CON2 R34 5K DAC0808 V-
R33 GND
3
1K
DAC0808 merupakan salah satu contoh kenverter D/A. IC ini tidak mahal dan digunakan
secara luas dalam beberapa aplikasi, D/A ini menerapkan metode tangga R-2R 8 bit yang
dilengkapi dengan sumber arus acuan dan delapan buah transistor saklar untuk mengarahkan
arus biner. Suatu tegangan dan hambatan eksternal dipergunakan untuk mengatur arus acuan
pada nilai yang lazim berlaku yaitu 2 mA. DAC0808 mempunyai waktu pemantapan 150ns
dan ketelitian relatif ± 12 LSB .
Konfigurasi pin ditunjukkan seperti pada gambar 6.2. dengan penjelasan sebagai berikut. Pin 1
tidak dipakai ( NC singkatan dari no connection ). Pin 2 adalah penghubung ke ground. Pin 3 (
VEE ) harus dipasang pada -12V. Pin 4 adalah saluran balik dari ground, yang sifatnya sebagi
output pembalik. Pin 5 s/d 12 merukan 8 bit masukan data. Pin 13 ( VCC ) harus dipasang pada
catu daya +5V. Pin 14 dihubungkan dengan catu daya positif melalui hambatan R14, dan pin
15 dihubungkan ke ground melalui hambatan R15. Akhirnya sebuah kapasitor antar pin 16 dan
pin 13 berfungsi untuk memberi kompensasi frekuensi bagi IC ini.
Pada percobaan ini, suatu tegangan tertentu akan dikeluarkan melalui DAC
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper pada konektor EN_DAC untuk mengaktifkan rangkaian DAC
2. Atur arus IREF dengan menghubungkan konektor dengan menggunakan ampermeter, atur
potensio R14 untuk memberikan referensi arus tertentu sekitar 2mA
3. Pasang jumper pada konektor IREF
4. Hubungkan modul Microcontroller Trainer dengan power supply +5V
5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
org 0h
clr P3.4
start: mov P2,#50 ; isi data 50 ke P2
sjmp start
end
Inisialisasi Data
A 0
A:=A+1
Waktu Tunda
NO
A=255 ?
YES
Inisialisasi Data
A 0
org 0h
mov A,#0
clr P3.4
start: mov P2,A
inc A
call delay
cjne A,#255,start
mov A,#0
sjmp start
;
delay: mov R1,#255
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
end
7. Simpanlah program yang anda ketik dan beri nama : prog62a.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 pengamatan dengan menggunakan Voltmeter.
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
DASAR TEORI
P2.7..P2.0
1 2 3
4 5 6
7 8 9
KEYPAD 4 X 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.
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
VCC
J3
2
1 EN LED
D1
P0.0..P0.7
D8
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
Simpan Keydata Ke A
A Keydata
YES
A=FF ?
NO
A:= NOT A
Inisialisasi
Keybounch 50
Keyport FF
Kolom4 0
YES YES
Baris4 (COR)=1? Baris3 (MEN)=1?
NO
Keybounc:=Keybounc-1 Keybounc:=Keybounc-1
NO NO
Keybounc=0 ? Keybounc=0 ?
YES YES
Keydata #0Ah Keydata #0Bh
End End
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 P3.6
4
RS
6
EN
P3.7
LCD Character 2 X 16
10. Lakukan modifikasi pada rangkaian tersebut untuk menampilan data keypad ke display 7
segmen sesuai dengan percobaan 3.
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.
DASAR TEORI
Timer Counter
Pada dasarnya sarana input yang satu ini merupakan seperangkat pencacah biner
(binary counter) yang terhubung langsung ke saluran-data mikrokontroler, sehingga
mikrokontroler bisa membaca kedudukan pancacah, bila diperlukan mikrokontroler dapat pula
merubah kedudukan pencacah tersebut.
Seperti layaknya pencacah biner, bilamana sinyal denyut (clock) yang diumpankan sudah
melebihi kapasitas pencacah, maka pada bagian akhir untaian pencacah akan timbul sinyal
limpahan, sinyal ini merupakan suatu hal yang penting sekali dalam pemakaian pencacah.
Terjadinya limpahan pencacah ini dicatat dalam sebuah flip-flop tersendiri.
Di samping itu, sinyal denyut yang diumpankan ke pencacah harus pula bisa dikendalikan
dengan mudah. Hal-hal yang dibicarakan di atas diringkas dalam Gambar 1.
MCS-51 mempunyai dua buah register timer/ counter 16 bit, yaitu Timer 0 dan Timer 1.
Keduanya dapat dikonfigurasikan untuk beroperasi sebagai timer atau counter, seperti yang
terlihat pada gambar di bawah.
Pembacan Isi
Pencacah
Dapat
Diset
Fasilitas Timer/Counter
Keluarga mikrokontroler MCS51, misalnya AT89s51 dan AT89sx051, dilengkapi dengan dua
perangkat Timer/Counter, masing-masing dinamakan sebagai Timer 0 dan Timer 1. Sedangkan
untuk jenis yang lebih besar, misalnya AT89s52, mempunyai tambahan satu perangkat
Timer/Counter lagi yang dinamakan sebagai Timer 2 .
Perangkat Timer/Counter tersebut merupakan perangkat keras yang menjadi satu dalam chip
mikrokontroler MCS51, bagi pemakai mikrokontroler MCS51 perangkat tersebut dikenal
sebagai SFR (Special Function Register) yang berkedudukan sebagai memori-data internal.
Pencacah biner untuk Timer 0 dibentuk dengan register TL0 (Timer 0 Low) dan register TH0
(Timer 0 High Byte).
Pencacah biner untuk Timer 1 dibentuk dengan register TL1 (Timer 1 Low Byte) dan register
TH1 (Timer 1 High Byte).
Pencacah biner pembentuk Timer/Counter MCS51 merupakan pencacah biner naik (count up
binary counter) yang mencacah dari $0000 sampai $FFFF (apabila menggunakan
timer/Counter 16 bit/mode 0), saat kedudukan pencacah berubah dari $FFFF
kembali ke $0000 akan timbul sinyal limpahan (overflow).
Untuk mengatur kerja Timer/Counter dipakai 2 register tambahan yang dipakai bersama oleh
Timer 0 dan Timer 1 . Register tambahan tersebut adalah register TCON (Timer Control) dan
register ini, bisa dialamat secara bit) dan register TMOD (Timer Mode Register).
Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3 untaian pencacah, yang
pertama adalah untaian pencacah biner 16 bit tanpa fasiltas pemantau sinyal limpahan yang
dibentuk dengan TL1 dan TH1. Yang kedua adalah TL0 yang dipakai sebagai pencacah biner 8
Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian secara simitris yang dipakai
untuk mengatur Timer0 /Timer 1, sebagai berikut:
1. Bit TFx (maksudnya adalah TF0 atau TF1) merupakan bit penampung limpahan (lihat
Gambar 2), TFx akan menjadi ‘1’ setiap kali pencacah biner yang terhubung padanya
melimpah (kedudukan pencacah berubah dari $FFFF kembali menjadi $0000). Bit TFx di-
nol-kan dengan istruksi CLR TF0 atau CLR TF1. Jika sarana interupsi dari Timer 0/Timer 1
dipakai, TRx di-nol-kan saat MCS51 menjalankan rutin layanan interupsi (ISR – Interupt
Service Routine).
2. Bit TRx (maksudnya adalah TR0 atau TR1) merupakan bit pengatur saluran sinyal denyut,
bila bit ini =0 sinyal denyut tidak disalurkan ke pencacah biner sehingga pencacah berhenti
mencacah. Bila bit GATE pada register TMOD =1, maka saluran sinyal denyut ini diatur
bersama oleh TRx dan sinyal pada kaki INT0/INT1 (lihat Gambar 4).
Mengatur Timer
Gambar 9.8 merupakan bagan susunan rangkaian yang bisa terjadi pada Timer 1 secara
lengkap, digambarkan pula hubungan-hubungan semua register pembentuk dan pengatur Timer
1. Gambar ini berlaku pula untuk Timer 0.
Dalam pemakaian sesungguhnya, rangkaian yang dipakai hanya sebagian dari rangkaian
lengkap tersebut, sesuai dengan keperluan sistem yang dibangun. Rangkaian yang dikehendaki
dibentuk dengan mengatur register TMODE, sedangkan kerja dari Timer dikendalikan lewat
register TCON.
Setelah MCS51 di-reset register TMOD bernilai $00, hal ini berarti :
1. bit C/T* =’0’, menurut Gambar 9.8 keadaan ini membuat saklar S1 ke posisi atas, sumber
sinyal denyut berasal dari osilator kristal yang frekuensinya sudah dibagi 12, pencacah
biner yang dibentuk dengan TL1 dan TH1 berfungsi sebagai timer. Jika sistem yang
dirancang memang menghendaki Timer 1 bekerja sebagai timer maka bit C/T* tidak perlu
diatur lagi.
Tapi jika sistem yang dirancang menghendaki agar Timer 1 bekerja sebagai counter untuk
menghitung pulsa yang masuk lewat kakai T1 (P3.5), maka posisi saklar S1 harus
dikebawahkan dengan membuat bit C/T* menjadi ‘1’.
2. bit GATE=’0’, hal ini membuat output gerbang OR selalu ‘1’ tidak dipengaruhi keadaan ‘0’
atau ‘1’ pada kaki INT1 (P3.3). Dalam keadaan semacam ini, saklar S2 hanya dikendalikan
lewat bit TR1 dalam register TCON. Jika TR1=’1’ saklar S2 tertutup sehingga sinyal denyut
dari S1 disalurkan ke sistem pencacah biner, aliran sinyal denyut akan dihentikan jika
TR=’0’.
Sebaliknya jika bit GATE=’1’, output gerbang OR akan mengikuti keadaan kaki INT1, saat
INT1=’0’ apa pun keadaan bit TR1 output gerbang AND selalu =’0’ dan saklar S1 selalu
terbuka, agar saklar S1 bisa tertutup kaki INT1 dan bit TR1 harus =’1’ secara
bersamaan.Jika sistem yang dirancang menghendaki kerja dari timer/counter dikendalikan
dari sinyal yang berasal dari luar chip, maka bit GATE harus dibuat menjadi ‘1’
3. bit M1 dan M0=’0’, berarti TL1 dan TH1 disusun menjadi pencacah biner 13 bit (Mode 0),
jika dikehendaki Timer 1 bekerja pada mode 1 seperti terlihat dalam Gambar 4, maka bit M1
harus dibuat menjadi ‘0’ dan bit M0 menjadi ‘1’.
Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan mengendalikan Timer seperti
terlihat dalam contoh-contoh berikut :
Setelah reset TMOD bernilai $00, berarti Timer 1 bekerja sebagai pencacah biner 13 bit, sumber
sinyal denyut dari osilator kristal atau Timer 1 bekerja sebagai ‘timer’, bit GATE =’0’ berarti
kaki INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya dikendalikan dari bit TR1.
Catatan:dalam instruksi di atas tanda ‘#’ menyatakan bagian di belakangnya adalah bilangan
konstan yang akan diisikan ke TMOD, ‘b’ merupakan yang menandakan bahwa
bilangan di belakangnya adalah bilangan biner. Penulisan dengan bilangan biner
semacam ini, memudahkan untuk mengenali dengan cepat bit-bit apa saja yang
diisikan ke TMOD.
Bilangan biner 00010000b diisikan ke TMOD, berakibat bit 7 TMOD (bit GATE) bernilai ‘0’, bit 6
(bit C/T*) bernilai ‘0’, bit 5 dan 4 (bit M1 dan M0) bernilai ‘01’, ke-empat bit ini dipakai untuk
mengatur Timer 1, sehingga Timer 1 bekerja sebagai timer dengan pencacah biner 16 bit yang
dikendalikan hanya dengan TR1.
Jika dikehendaki pencacah biner dipakai sebagai counter untuk mencacah jumlah pulsa yang
masuk lewat kaki T1 (P3.5), instruksinya menjadi :
MOV TMOD,#01010000b
Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit 6 (bit C/T*) bernilai ‘1’.
Selanjutnya jika diinginkan sinyal dari perangkat keras di luar chip MCS51 bisa ikut
mengendalikan Timer 1 , instruksi pengatur Timer 1 akan menjadi :
MOV TMOD,#11010000b
Perlu diingatkan jika bit GATE = ‘1’, selama kaki INT1 bernilai ‘0’ pencacah biner belum akan
mencacah. Untuk menghentikan proses pencacahan, dipakai instruksi
CLR TR1
Di atas hanya dibahas Timer 1 saja, tata canya untuk Timer 0 persis sama. Yang perlu
diperhatikan adalah register TMOD dipakai untuk mengatur Timer 0 dan juga Timer 1,
sedangkan TMOD tidak bisa dialamati secara bit (non bit addressable) sehingga jika jika kedua
Timer dipakai, pengisian bit-bit dalam register TMOD harus dipikirkan sekali gus untuk Timer 0
dan Timer 1.
Bit TR1 dan TR0 yang dipakai untuk mengendalikan proses pencacahan, terletak di dalam
register TCON (memori-data internal nomor $88) yang bisa dialamati secara bit (bit
addressable). Sehingga TR0 dan TR1 bisa diatur secara terpisah (dengan perintah SETB atau
CLR), tidak seperti mengatur TMOD yang harus dilakukan secara bersamaan.
Demikian pula bit penampung limpahan pencacah biner TF0 dan TF1, juga terletak dalam
register TCON yang masing-masing bisa di-monitor sendiri.
Sebagimana ditunjukkan pada gambar 9.8 mikrokontroller dapat beraksi sebagai timer atau
counter, sesuai dengan kebutuhan. Perhatikan pada saklar sebelah kiri dan kanan pada diagram
blok tersebut. Mikrokontroller akan berfungsi sebagai timer ketika saklar diposisikan ke atas
dan sebaliknya akan berfungsi sebagai counter bila saklar diposisikan ke bawah, dengan
mengontrol bit C/T pada register TMOD. Posisi saklar sebelah kanan, bergantung pada bit
GATE (register TMOD), TR1 ( register TCON0 dan INT1.
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
VCC
J3
2
1 EN LED
D1
P0.0..P0.7
D8
Gambar 9.3. Rangkaian display LED
Clock D1 D2 D3 D4 D5 D6 D7 D8
1
2
3
;
;
20
Pada percobaan ini, pulsa diambil melalui clock generator yang dibangkitkan oleh IC 555 yang
mempunyai frekuensi 1 Hz ( output astable ), hasil cacahan biner pada register counter akan
ditampilkan pada 7 Segmen.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan 1 buah kabel antara P3.5 dengan output clock IC 555
2. Hubungkan jumper konektor 7Segmen_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
Start
Inisialisasi Timer0
Mode 0 sbg counter 13 bit
TMOD #00000100b
Jalankan Timer
Setb TR0
Display ke 7 Segmen
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
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
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.
Org 0h
Start: Setb P0.0 ;P0.0 = 1
call Delay ;call delay time
Clr P0.0 ;P0.0 = 0
call delay ;call delay time
Sjmp Start ;Looping Forever
;
Delay: Mov R0,#0 ;R0 = 0
Mov TMOD,#00010000b ;Mode 1, Fungsi =Timer 1 16 bit
Load: Mov TH1, #0D8h ;TH1 = D8h
Mov TL1, #0F0h ; TL1 = F0h
Setb TR1 ; TR1 = 1, Start Running
OFlow: JNB TF1, OFlow ; jump to OFlow if TF1 =0
Clr TR1 ; TR1 = 0
Clr TF1 : TF1 = 0
Inc R0 ; R0 = R0+1
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 87
CJNE R0,#50,Load
Ret
;
End
Soal Kuis:
1. Pelajari perbedaan antara Timer dan Counter
2. Pelajari register TMOD, TCON, fungsi dari tiap-tiap bit dari register tersebut
3. Pelajari tentang Mode 0,1,2, dan 3, apakah sifat dan fungsinya, termasuk bagaimana
menggunakannya
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.
DASAR TEORI
Umumnya orang selalu menganggap port seri pada MCS51 adalah UART yang bekerja secara
asinkron, jarang yang menyadari port seri tersebut bisa pula bekerja secara sinkron, pada hal
sebagai port seri yang bekerja secara sinkron merupakan sarana yang baik sekali untuk
menambah input/output bagi mikrokontroler.
Dikenal 2 macam cara transmisi data secara seri. Kedua cara tersebut dibedakan oleh sinyal
denyut (clock) yang dipakai untuk men-‘dorong’ data seri, kalau clock dikirim bersama dengan
data seri, cara tersebut dikatakan sebagai transmisi data seri secara sinkron. Sedangkan dalam
transmisi data seri secara asinkron, clock tidak dikirim bersama data seri, rangkaian penerima
data harus membangkitkan sendiri clock pendorong data seri.
Port seri MCS51 bisa dipakai dalam 4 mode kerja yang berbeda. Dari 4 mode tersebut, 1 mode
diantaranya bekerja secara sinkron dan 3 lainnya bekerja secara asinkron. Secara ringkas ke-
empat mode kerja tersebut bisa dibedakan sebagai berikut:
Mode 0 Mode ini bekerja secara sinkron, data seri dikirim dan diterima melalui kaki P3.0
(RxD), dan kaki P3.1 (TxD) dipakai untuk menyalurkan clock pendorong data seri
yang dibangkitkan MCS51.
Data dikirim/diterima 8 bit sekali gus, dimulai dari bit yang bobotnya paling kecil
(bit 0) dan diakhiri dengan bit yang bobotnya paling besar (bit 7). Kecepatan
pengiriman data (baud rate) adalah 1/12 frekuensi osilator kristal.
Mode 1 Mode ini dan mode-mode berikutnya bekerja secara asinkron, data dikirim melalui
kaki P3.1 (TxD) dan diterima melalui kaki P3.0 (RxD).
Pada mode asinkron (Mode 1, Mode 2 dan Mode 3), port seri MCS51 bekerja secara full
duplex, artinya pada saat yang sama port seri ini bisa mengirim data sekali gus menerima data.
Register SBUF merupakan register penghubung port seri. Dalam ke-empat mode di atas, semua
instruksi yang mengakibatkan perubahan isi SBUF akan mengakibatkan port seri mengirimkan
data keluar dari MCS51. Agar port seri bisa menerima data, bit REN dalam register SCON harus
bernilai ‘1’. Pada mode 0, proses penerimaan data dimulai dengan instruksi CLR RI, sedangkan
dalam mode lainnya proses penerimaan data diawali oleh bit start yang bernilai ‘0’. Data yang
diterima port seri dari luar MCS51, diambil dengan instruksi MOV A,SBUF.
Mengambil data dari SBUF dan menyimpan data ke SBUF sesungguhnya bekerja pada dua
register yang berlainan, meskipun nama registernya sama-sama SBUF.
6. Bit RI (bit 0) merupakan petanda yang setara dengan petanda RDRF (Receiver Data
Register Full) yang umum dijumpai pada UART standard. Setelah SBUF menerima data
dari port seri, bit RI akan bernilai ‘1’ dengan sendirinya, bit ini harus di-nol-kan dengan
program agar bisa dipakai untuk memantau keadaan SBUF dalam penerimaan data
berikutnya.
Sub-rutin SerialIn berikut dipakai untuk menerima data seri, bisa dipakai untuk semua
mode port seri. Baris 02 menunggu RI menjadi ‘1’, dimaksud untuk memastikan sudah ada
data baru yang diterima pada SBUF. Pada baris 03 data pada SBUF diambil ke A. Agar RI
bisa dipakai untuk memantau keadaan SBUF pada pengiriman data berikutnya, pada baris 04
RI di-nol-kan.
SerialIn:
JNB RI,$ ; tunggu SBUF berisi data baru
MOV A,SBUF ; ambil data
CLR RI ; pentanda data sudah diambil
RET
Baud Rate
Baud rate pada mode 0 adalah tertentu: pada mode 0, Baud Rate = 1/12 x Frekuensi Osilator.
Baud rate pada mode 2 bergantung pada nilai bit SMOD pada SFR PCON. Jika SMOD = 0,
baud rate adalah 1/64 frekuensi osilator. Jika SMOD=1, baud rate adalah 1/32 frekuensi
osilator. Penentuan baud rate mode 2 adalah sebagai berikut:
Sedangkan baud rate pada mode 1 dan 3 ditentukan oleh nilai laju overflow dari Timer 1.
Interupsi timer 1 harus disable pada aplikasi ini. Pada kebanyakan aplikasi, timer ini
dioperasikan sebagai timer, dengan mode auto reload mode 2. Pada kasus ini baud rate
diberikan dengan rumus sebagai berikut:
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.
P3.1 ( Tx )
VCC
+
10u 7
1 3
3 C+ 8
+
4 C1- 4
5 C2+ 9
2 C2- 5
+
6 V+
V-
10u
P1
15
+ 10u
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.
(a) (b)
Gambar 10.3. (a) Pemberian nama koneksi (b) Pemilihan koneksi pada COM1
(a) (b)
J3
2
1 EN LED
D1
P0.0..P0.7
D8
Gambar 10.5. Display LED
Gambar 10.6. (a) Diagram alir rutin utama (b) subrutine ambil karakter pada percobaan 10.1
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.
Pada percobaan ini, data satu carácter akan dikirimkan dari mikrokontroller ke komputer
melalui port serial dan ditampilkan pada layar Hyperterminal.
org 0h
nop
Pada percobaan ini, data akan dikirimkan dari mikrokontroller ke komputer melalui port serial
dan ditampilkan pada layar Hyperterminal.
org 0h
nop
call initserial
mov dptr,#MyCharacter
gets: clr A
Movc A,@A+dptr
cjne A,#0,Next
sjmp getout
Next: call sendout
inc dptr
sjmp gets
getout: sjmp getout
;
initserial:
mov scon,#42h ; Konfigurasi komunikasi serial mode 1
Soal Tantangan:
1. Rencanakan program untuk cetak angka 1 sebanyak 1x, angka 2 sebanyak 2x, dan
angka 3 sebanyak 3x pada program hyperterminal, putunjuk pakai DJNZ
2. Rencanakan program untuk mengambil data mikrokontroller melalui port serial dan
ditampilkan pada layer Hyperterminal, dengan data-data sebagai berikut, secara
berturutan:
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.
P2.7..P2.0
SW8
4. Rencanakan program untuk mengambil data ADC pada mikrontroller dan dikirimkan
melalui port serial dan ditampilkan pada layar Hyperterminal
VCC VCC
3
VCC R6
2 10k 220
P1.7..P1.0 20 ADC0804
3
1
18 6
17 DB0 +IN 7
16 DB1 -IN
DB2
15
DB3 VREF/2
9 2 10k
14 19
DB4 CLKR
13
DB5 CLKIN
4 D1
12
DB6 10k
150p 3V
1
11 1
P3.2 DB7 CS 2
5 RD 3
INTR WR
10 8 PROG VCC
6
P3.3 5
4
P3.4 3
2
1
G 74LS244 RUN/ EN ADC
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:
Tanggal : 12-Mei-2008
Waktu : 00:00:00
Pada percobaan ini, data dikirimkan melalui port communication serial PC secara serial dan
ditangkap oleh mikrokontroller untuk dioutputkan ke LED
VCC
J3
2
1 EN LED
D1
P0.0..P0.7
D8
Gambar 10.7. Display LED
Gambar 10.8. (a) Diagram alir rutin utama (b) subrutine ambil karakter pada percobaan 10.1
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
Gambar 10.9 Diagram alir utama pengiriman data “1” ke port serial pada percobaan
10.1
11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial,
dengan tampilan sebagai berikut:
Pada percobaan ini, arah gerakan LED kekiri atau kekanan, dikendalikan melalui komunikasi
sercara serial RS232.
org 0h
nop
call initserial
gets: call inchar
cjne a,#128,rotR
sjmp rotL
sjmp gets
rotR: mov P0,#11111110b;
call delay
mov P0,#11111101b;
call delay ;
mov P0,#11111011b;
call delay ;
mov P0,#11110111b;
call delay ;
Start
Inisialisasi
Serial Komunikasi
Baudrate=2400
Data 8 bit, no paritas, 1 stop bit
End End
11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial.
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.
Pada percobaan ini, arah gerakan LED kekiri atau kekanan, dikendalikan melalui komunikasi
sercara serial RS232.
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)
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 108
7. Lakukan pengamatan pada nyala LED
8. Buka Program Delphi, dan lakukan pemrograman Delphi dengan tampilan sebagai
berikut
8. Pada Objeck Inspector pilih tabulasi Events, dan click dua kali pada OnRxChar.
9. Tampilan akhir program, sebagai berikut:
Pada percobaan ini, data ADC0804 diambil menggunakan port 1 mikrokontroller dan
dikirimkan melalui port serial ke PC
VCC VCC
3
VCC R6
2 10k 220
P1.7..P1.0 20 ADC0804
3
1
18 6
17 DB0 +IN 7
16 DB1 -IN
DB2
15
DB3 VREF/2
9 2 10k
14 19
DB4 CLKR
13
DB5 CLKIN
4 D1
12
DB6 10k
150p 3V
1
11 1
P3.2 DB7 CS 2
5 RD 3
INTR WR
10 8 PROG VCC
6
P3.3 5
4
P3.4 3
2
1
G 74LS244 RUN/ EN ADC
org 0h
call initserial
;
start: call ADC; ambil data dari adc
call Sendout
sjmp start
;
ADC: clr P3.3
nop
setb P3.3
eoc: jb P3.2,eoc
clr P3.4
mov A,P1
setb P3.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)
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 111
10. Buka Program Delphi
11. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial
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.
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
org 0h
call initserial
call init_LCD
;
start:
call GetChar
mov r1,#0c0h
acall write_inst
add a,#30h
mov r1,a
acall write_data
sjmp start
;
GetChar:
detect: jnb ri,detect ;
clr ri
Soal Kuis
1. Pelajari tentang Port Serial pada Mikrokontroller, letak pin dan fungsinya
2. Pelajari tentang register SCON pada mikrokontroller
3. Pelajari tentang mode 0,1,2 dan 3 perbedaan pada masing-masing mode tersebut,
termasuk instruksi pemrograman assembly
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
DASAR TEORI
Interupsi
8051 mempunyai 5 buah sumber interupsi. Dua buah interupsi eksternal, dua buah interupsi
timer dan sebuah interupsi port serial.
Program yang dijalankan dengan cara interupsi, dinamakan sebagai program layanan interupsi
(ISR - Interrupt Service Routine). Saat prosesor menjalankan ISR, pekerjaan yang sedang
dikerjakan pada program utama sementara ditinggalkan, selesai menjalankan ISR prosesor
kembali menjalankan program utama, seperti yang digambarkan dalam Gambar 1.
Sebuah prosesor bisa mempunyai beberapa perangkat keras yang merupakan sumber sinyal
permintaan interupsi, masing-masing sumber interupsi dilayani dengan ISR berlainan, dengan
demikian prosesor mempunyai beberapa vektor interupsi untuk memilih ISR mana yang
dipakai melayani permintaan interupsi dari berbagai sumber. Kadang kala sebuah vektor
interupsi dipakai oleh lebih dari satu sumber interupsi yang sejenis, dalam hal semacam ini ISR
bersangkutan harus menentukan sendiri sumber interupsi mana yang harus dilayani saat itu.
Jika pada saat yang sama terjadi lebih dari satu permintaan interupsi, prosesor akan melayani
permintaan interupsi tersebut menurut perioritas yang sudah ditentukan, selesai melayani
permintaan interupsi perioritas yang lebih tinggi, prosesor melayani permintaan interupsi
berikutnya, baru setelah itu kembali mengerjakan program utama.
Saat prosesor sedang mengerjakan ISR, bisa jadi terjadi permintaan interupsi lain, jika
permintaan interupsi yang datang belakangan ini mempunyai perioritas lebih tinggi, ISR yang
sedang dikerjakan ditinggal dulu, prosesor melayani permintaan yang perioritas lebih tinggi,
selesai melayani interupsi perioritas tinggi prosesor meneruskan ISR semula, baru setelah itu
kembali mengerjakan program utama . Hal ini dikatakan sebagai interupsi bertingkat (nested
interrupt), tapi tidak semua prosesor mempunyai kemampuan melayani interupsi secara ini.
Bit IE0 (atau bit IE1) dalam TCON merupakan bendera (flag) yang menandakan adanya
permintaan Interupsi Eksternal. Ada 2 keadaan yang bisa meng-aktip-kan bendera ini, yang
pertama karena level tegangan ‘0’ pada kaki INT0 (atau INT1), yang kedua karena terjadi
transisi sinyal ‘1’ menjadi ‘0’ pada kaki INT0 (atau INT1). Pilihan bentuk sinyal ini ditentukan
lewat bit IT0 (atau bit IT1) yang terdapat dalam register TCON.
1. Kalau bit IT0 (atau IT1) =’0’ maka bit IE0 (atau IE1) dalam TCON menjadi ‘1’ saat kaki
INT0=’0’.
2. Kalau bit IT0 (atau IT1) =’1’ maka bit IE0 (atau IE1) dalam TCON menjadi ‘1’ saat terjadi
transisi sinyal ‘1’ menjadi ‘0’ pada kaki INT0.
Menjelang prosesor menjalankan ISR dari Interupsi Eksternal, bit IE0 (atau bit IE1)
dikembalikan menjadi ‘0’, menandakan permintaan Interupsi Eksternal sudah dilayani. Namun
jika permintaan Interupsi Ekternal terjadi karena level tegangan ‘0’ pada kaki IT0 (atau IT1),
dan level tegangan pada kaki tersebut saat itu masih =’0’ maka bit IE0 (atau bit IE1) akan
segera menjadi ‘1’ lagi!
Bit TF0 (atau bit TF1) dalam TCON merupakan petanda (flag) yang menandakan adanya
permintaan Interupsi Timer, bit TF0 (atau bit TF1) menjadi ‘1’ pada saat terjadi limpahan pada
pencacah biner Timer 0 (atau Timer 1).
Menjelang prosesor menjalankan ISR dari Interupsi Timer, bit TF0 (atau bit TF1) dikembalikan
menjadi ‘0’, menandakan permintaan Interupsi Timer sudah dilayani.
Interupsi port seri terjadi karena dua hal, yang pertama terjadi setelah port seri selesai
mengirim data 1 byte, permintaan interupsi semacam ini ditandai dengan petanda (flag) TI=’1’.
Yang kedua terjadi saat port seri telah menerima data 1 byte secara lengkap, permintaan
interupsi semacam ini ditandai dengan petanda (flag) RI=’1’.
Petanda di atas tidak dikembalikan menjadi ‘0’ menjelang prosesor menjalankan ISR dari
Interupsi port seri, karena petanda tersebut masih diperlukan ISR untuk menentukan sumber
interupsi berasal dari TI atau RI. Agar port seri bisa dipakai kembali setelah mengirim atau
menerima data, petanda-petanda tadi harus di-nol-kan lewat program.
Petanda permintaan interupsi (IE0, TF0, IE1, TF1, RI dan TI) semuanya bisa di-nol-kan atau
di-satu-kan lewat instruksi, pengaruhnya sama persis kalau perubahan itu dilakukan oleh
perangkat keras. Artinya permintaan interupsi bisa diajukan lewat pemrograman, misalnya
permintaan interupsi eksternal IT0 bisa diajukan dengan instruksi SETB IE0.
Mengaktifkan Interupsi
Semua sumber permintaan interupsi yang di bahas di atas, masing-masing bisa di-aktip-kan
atau di-nonaktip-kan secara tersendiri lewat bit-bit yang ada dalam register IE (Interrupt
Enable Register).
Bit EX0 dan EX1 untuk mengatur interupsi eksternal INT0 dan INT1, bit ET0 dan ET1 untuk
mengatur interupsi timer 0 dan timer 1, bit ES untuk mengatur interupsi port seri, seperti yang
MSB LSB
EA X X ES ET1 EX1 ET0 EX0
Vektor Interupsi
Saat MCS51 menanggapi permintaan interupsi, Program Counter diisi dengan sebuah nilai
yang dinamakan sebagai vektor interupsi, yang merupakan nomor awal dari memori-program
yang menampung ISR untuk melayani permintaan interupsi tersebut. Vektor interupsi itu
dipakai untuk melaksanakan inststuksi LCALL yang diaktipkan secara perangkat keras.
Vektor interupsi untuk interupsi eksternal INT0 adalah $0003, untuk interupsi timer 0 adalah
$000B, untuk interupsi ekternal INT1 adalah $0013, untuk interupsi timer 1 adalah $001B dan
untuk interupsi port seri adalah $0023.
Jarak vektor interupsi satu dengan lainnya sebesar 8, atau hanya tersedia 8 byte untuk setiap
ISR. Jika sebuah ISR memang hanya pendek saja, tidak lebih dari 8 byte, maka ISR tersebut
bisa langsung ditulis pada memori-program yang disediakan untuknya. ISR yang lebih panjang
dari 8 byte ditulis ditempat lain, tapi pada memori-program yang ditunjuk oleh vektor interupsi
diisikan instruksi JUMP ke arah ISR bersangkutan.
J1 J2
CON8 U1 CON8
P0.0 39 21 P2.0
1 P0.1 38 P0.0/AD0 P2.0/A8 22 P2.1 1
2 P0.2 37 P0.1/AD1 P2.1/A9 23 P2.2 2
3 P0.3 36 P0.2/AD2 P2.2/A10 24 P2.3 3
4 P0.4 35 P0.3/AD3 P2.3/A11 25 P2.4 4
5
6
P0.5 34 P0.4/AD4
P0.5/AD5
P2.4/A12
P2.5/A13
26 P2.5 5
6
Interupsi Eksternal 0, agar
P0.6 33 27 P2.6
7 P0.7 32 P0.6/AD6 P2.6/A14 28 P2.7 7 terjadi interupsi pada system
8 P0.7/AD7 P2.7/A15 8
P1.0 1 10 P3.0 maka, pada pin ini harus
1 P1.0 P3.0/RXD 1
2
P1.1
P1.2
2
3 P1.1 P3.1/TXD
11
12
P3.1
P3.2 2 mendapat sebuah pulsa, baik
3 P1.2 P3.2/INTO 3
4
P1.3
P1.4
4
P1.3 P3.3/INT1
13 P3.3
P3.4 4 transisi hi-lo, atau berupa pulsa
5 14
5 P1.5 6 P1.4 P3.4/TO 15 P3.5 5
6 P1.6 7 P1.5/MOSI P3.5/T1 16 P3.6 6
7 P1.7 8 P1.6/MISO P3.6/WR 17 P3.7 7
8 P1.7/SCK P3.7/RD 8
J3 XTAL1 19 29 CON8
CON8 XTAL2 18 XTAL1 PSEN J4
RST 9 XTAL2 30
RST ALE/PROG
VCC 31
EA/VPP
VCC 40
VCC
AT89S51
Org 0000h
Ljmp Start
Org 000bh
Ljmp Timer0Interupt
Start: ; Instruksi Rutinitas
; Instruksi Rutinitas
; Instruksi Rutinitas
Sjmp Start; { Looping Forever }
;
Timer0Interupt:
:
:
Reti
End
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.
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
AdaInterupsiExt0:
mov P0,#11111111b
call delay
mov P0,#00000000b
call delay
reti
end
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
Gambar 11.1. (a) Diagram alir rutin utama, (b) subrutin interupsi, dan (c) subrutin display ke 7
segmen percobaan 11.1
;LOOKUPTABLE
; 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
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:
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
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
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 126
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
;========================================
;LOOKUPTABLE
; 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
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:
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
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
Web:www.mytutorialcafe.com Email: mytutorialcafe@yahoo.co.id – Triwiyanto 129
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
;========================================
;LOOKUPTABLE
; 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
Soal Kuis:
1. Apakah yang dimaksud dengan sistem interupsi
2. Pelajari tentang address (alamat) vektor interupsi
3. Pelajari tentang interupsi, eksternal, serial, dan timer, apakah perbedaannya
4. Pelajari tentang Register Interupt enable, dan TCON
VCC VCC
VCC VCC
D3 D5
L293 U1
1N4001 1N4001
16
8
J2 J1
2 3
VCC1
VCC2
3 7 1A 1Y 6 1
2 10 2A 2Y 11 2
1 15 3A 3Y 14 CON2
4A 4Y 12 D4 D6
CON3 1 GND 13
9 1,2EN GND 5 1N4001 1N4001
GND
3,4EN GND
Petunjuk:
Hubungkan kabel jumper dengan hubungan 1A ke P2.0, 2A ke P2.1 dan 1,2 EN ke P2.2
C1
C2
C3
C4
C5
C1
C2
C3
C4
C5
C1
C2
C3
C4
C5
7 I7 O7 R7 R7 R7
J4
10
10
10
1
3
7
8
1
3
7
8
1
3
7
8
ULN2003
VCC R21
1 2 O1
3 O2
4 O3 R1R6 R13
5 O4
6 O5 R7R8R9R10
R11
R12 R14
R19
R15
R16
R17
R18
7 O6 RR RR RRR R RR RRR RR
8 O7
9
C
RESISTOR SIP 9
15
15
1
2
3
4
5
6
7
1
2
3
4
5
6
7
9
U11
QA
QB
QE
QA
QB
QE
QG
QG
QF
QF
QC
QD
QH
QH
QC
QD
QH
QH
U7
SN74HC595 SN74HC595
SRCLR
SRCLR
SRCLK
SRCLK
RCLK
RCLK
SER
SER
G
G
14
11
10
12
13
14
11
10
12
13
Vcc
Vcc
J9
DS
3 SHCp
2 STCp
1
CON3
Petunjuk
Gunakan kabel jumper untuk menghubungan dari J4 ke P0 ( secara berurutan 1 ke P0.0 dst.),
hubungkan masing-masing secara berurutan konektor J9 ke P2 ( secara berurutan STCp ke
P2.0, SHCp ke P2.1 dan DS ke P2.2 ).
Percobaan 12.1
TUJUAN
1. Mahasiswa mamahami rangkaian interface mikrokontroller dengan motor stepper
2. Mahasiswa memahami rangkaian driver motor stepper ULN2003
3. Mahasiswa memahami bahasa assembly untuk mengatur arah putaran motor stepper
4. Mahasiswa memahami bahasa assembly untuk mengatur arah putaran motor stepper
dengan menggunakan saklar.
CON4 U2 CON5 J5
1 16
1 2 I1 O1 15 1
2 3 I2 O2 14 2
3 4 I3 O3 13 3
4 5 I4 O4 12 4
6 I5 O5 11 5
J3 I6 O6
7 10
I7 O7 VCC
ULN2003
DASAR TEORI
Pada Motor DC biasa, akan berputar dan berputar terus selama power supply ada. Tidak ada
rangkaian cerdas tertentu yang diperlukan untuk mengendalikan motor tersebut, kecuali hanya
memperlambat putaran atau membalik putaran, dengan menerapkan polaritas balik. Motor
stepper adalah sangat berbeda. Jika anda memberikan power pada motor ini, maka motor ini
akan berada dalam keadaan diam, agar motor dapat berputar, anda harus merubah sinyal yang
masuk ke motor. Sebagai ilustrasi, dapat dibayangkan sebuah kompas dengan elektromagnet
disekitarnya. Sebagaimana digambarkan pada gambar 2.2., apabila power yang diberikan pada
elektromagnet diganti, maka akan merubah posisi jarum dari kompas.
Gambar 8.3. Ilustrasi motor stepper dengan jarum kompas dengan elektromagnet
Pada ilustrasi tersebut, huruf-huruf yang melingkar mewakili elektromagnet. Semua magnet
dengan huruf yang sama berada dalam keadaan koneksi. Ketika anda memberi arus pada
rangkaian tersebut, maka semua elektromagnet dengan huruf yang sama akan on pada saat itu,
untuk menggerakkan kompas, maka elektromaget berikutnya harus dialiri arus, sehingga akan
menimbulkan gerakan.
A B C D Comment
1 0 0 0 Take a step clock wise
0 1 0 0 another step clock wise
0 0 1 0 another step clock wise
0 0 0 1 another step clock wise
0 0 0 1 No step take
0 0 1 0 Take a step back
A B C D Comment
1 0 0 0 Take a step clock wise
1 1 0 0 Half a step clock wise
0 1 0 0 The complete full step clock wise
0 1 1 0 another half step clock wise
0 0 1 0 The complete full step clock wise
0 0 1 1 Another half step clock wise
0 0 0 1 The complete full step clock wise
1 0 0 1 another half step clock wise
1 0 0 0 Start position
Percobaan 8.2 Pengaturan Arah Putaran CW/ CCW Motor Stepper Melalui
Saklar
Pada percobaan ini, motor stepper akan berputar searah jarum jam, atau berlawanan arah jarum
jam bergantung pada posisi push button yang ditekan ( P2.0 atau P2.1 ) secara terus menerus.
SW1
P2.7..P2.0
SW8
org 0h
start:
CW: JB P2.0,CCW ; jump ke ccw jika P2.0=1. SW1
call stepCW
sjmp start
;
CCW: JB P2.1,CW ; jump ke cw jika P2.1=1. SW2
Call stepCCW
Sjmp start
;
StepCW:
mov P0,#11101111b ; isi P0 dg.11101111. Turn on driver 1
call delay ; call delay time
mov P0,#11011111b ; Turn on driver 2
call delay ; call delay time
mov P0,#10111111b ; Turn on driver 3
call delay ; call delay time
mov P0,#01111111b ; Turn on driver 4
call delay ; call delay time
ret
;
StepCCW:
mov P0,#01111111b ; Turn on driver 1
call delay ; call delay time
mov P0,#10111111b ; Turn on driver 2
call delay ; call delay time
mov P0,#11011111b ; Turn on driver 3
call delay ; call delay time
mov P0,#11101111b ; Turn on driver 4
call delay ; call delay time
ret
;
delay: mov R0,#255
delay1: mov R2,#255
djnz R2,$
djnz R0,delay1
ret
end
TUJUAN
1. Mahasiswa memahami rangkaian interface keyboard PC PS/2
2. Mahasiswa memahami bahasa pemrograman assembly pengambilan data keyboard PC
3. Mahasiswa dapat menampilan data keyboard PC ke berbagai macam display antara
lain, LCD Karakter dan 7 Segmen
TEORI
Antarmuka keyboard standard adalah hubungan komunikasi serial. “Serial” yang menandakan
bahwa data dikirim satu bit pada suatu waktu tertentu pada satu jalur tunggal. Serial
komunikasi dipilih untuk antara muka keyboard karena hal ini simple dan mudah diterapkan,
dan tidak banyak data per detik yang harus dikirimkan pada antar muka keyboard.
Ada empat jalur yang menghubungkan keyboard dan PC. Dua dari ini adalah power supply dan
ground, yang digunakan untuk memberikan daya ke rangkaian keyboard. Dua sinyal yang lain
adalah sebagai berikut:
1. Data Keyboard: Disinilah jalur bit-bit data dan perintah yang akan dikirimkan ke sistem
PC dari keyboard.
2. Clock Keyboard: Ini merupakan sinyal clock regular, dengan suatu nilai yang berosilasi
dari logika “1” ke “0” dengan pola yang teratur. Tujuan dari sinyal clock ini adalah
untuk mensinkronisasi keyboard dan sistem, sehingga merekan selalu bekerja secara
bersamaan.
Keyboard PC AT yang terkoneksi, hanya menggunakan empat buah kabel, kabel ini
ditunjukkan pada gambar dibawah, untuk 5 pin DIM dan PS/2.
1.KBD Clock
2.KBD Data
3.N/C
4.GND
5. +5V (VCC)
5 PIN DIN
(a)
1. KBD Clock
2. GND
3. KBD Data
4. N/C
5. +5V (VCC)
6 PIN DIN 6. N/C
(b)
Sebagaimana yang anda lihat, kode scan ditandai dengan kode yang random. Pada beberapa
kasus, cara yang paling mudah untuk menerjemahkan kode scan ke ASCII adalah dengan
menggunakan metode look up table.
Transmisi data, dari keyboard ke sistem, dilakukan dengan frame 11 bit. Bit pertama adalah bit
start ( logika 0 ), diikuti dengan 8 bit data ( LSB first ), satau bit paristas ( paritas ganjil ) dan
bit stop ( logika 1 ). Setiap bit harus dibaca pada sisi turun dari clock.
10 K
. .
6 1 P3.3
5 2 IN4148
.
VCC
4 .3
.
. VCC
10 K
IN4148 P3.2
VCC
J3
2
1 EN LED
D1
P0.0..P0.7
D8
Gambar 12.7 Diagram alir (a) subrutin ambil_scancode, (b) subrutin konversi_scancode pada
percobaan 12.1
J3
3 P0.7..P0.0
EN LCD
1
2
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 P3.6
4
RS
6
EN
P3.7
LCD Character 2 X 16
Gambar 12.8. Rangkaian interface LCD karakter 2x16
a a
f b b
c
d
g e
e c f
d g
7 x 220 ohm
VCC VCC VCC VCC VCC VCC VCC VCC
Y7..Y0
PNP PNP PNP PNP PNP PNP PNP PNP
FCS 9013 FCS 9013
FCS 9013 FCS 9013 FCS 9013 FCS 9013 FCS 9013 FCS 9013
8 x 1k ohm
(a)
P3.5
Y7..Y0
P3.6 U8
1 15
P3.7 2 A Y0 14
3 B Y1 13
VCC C Y2 12
J2 Y3 11
6 Y4 10
4 G1 Y5 9
1 G2A Y6
EN 7 SEGMEN 2
5
G2B Y7
7
R28
74LS138
VCC 10K
(b)
Gambar 12.9. Rangkaian Display 8x7 segmen (a) dan rangkaian decoder (b)
VCC
R4 R5
10K 10K
J7
U3 1
1 5 2
2 A0 SDA
CON2
3 A1
A2
6 AT24C08-1.8
SCLK
7
VCC WP
8
VCC
Percobaan 15.1
Pada percobaan berikut akan disimulasikan proses penyimpanan data pada alamat 3Ch s/d 3Eh
Write_L_C:
MOV EEAddr, #00h ; WR address ..
MOV R0, #3Ch
MOV ByteCnt,#01h ; Send 1 bytes ..
EE_W_Loop:
MOV EEData, @R0
LCALL EE_Write
INC R0
INC EEAddr
LCALL Delay_20ms
DJNZ ByteCnt, EE_W_Loop
Read_L_C:
MOV EEAddr, #00h ; RD address ..
MOV R0, #3Ch
MOV ByteCnt,#01h ; Get 1 bytes ..
EE_R_Loop:
LCALL EE_READ
MOV @R0, EEData
INC R0
INC EEAddr
LCALL Delay_20ms
DJNZ ByteCnt, EE_R_Loop
RET
;--------------- READ THE EEPROM DATA - FIRST PERFORM 'DUMMY WRITE' ---------------
; one byte ..
EE_READ:
MOV EEData,#00H ; CLEAR OLD DATA ..
LCALL EE_START ; SEND A START FLAG TO EEPROM ..
MOV A,#0A0H ; SPECIFY A WRITE TO EEPROM @ ADDRESS 0H ..
LCALL SH_OUT ; PERFORM 'DUMMY WRITE' ..
JC RD_ABORT ; ABORT IF NO ACK ..
MOV A,EEAddr ; LOAD EEPROM MEMORY LOCATION FROM WHICH TO READ ..
LCALL SH_OUT ; WRITE EEPROM MEMORY LOCATION ..
JC RD_ABORT ; ABORT IF NO ACK ..
; NOW READ THE DATA! ..
end
4. Click pada button Compile pada gambar berikut, untuk menghasilkan file dcu pada
folder CPort.
7. Setelah proses instalasi komponen maka akan didapatkan tampilan sebagai berikut.
11. Lakukan pemilihan Path folder Cport dengan menekan button browse pada Library
Path
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.
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:
Untuk membuat file baru, klik pada menu File atau short cut seperti yang ditunjukkan pada
gambar, sehingga akan tampak halaman kosong.
Pada gambar tersebut tampak hubungan kabel dari Port Serial PC ke Board Mikrokontroller,
perhatikan indikator LED pada rangkaian programmer tersebut, apabila program sedang
menjalankan proses ERASE CHIP maka LED indikator akan nyala, tunggulah LED indikator
tersebut sampai mati, setelah itu baru melanjutkan proses WRITE CHIP. ( hal ini penting
untuk dilakukan, jangan pernah melakukan proses WRITE CHIP apabila LED
indikator tersebut dalam keadaan nyala, hal ini akan muncul komentar ERROR )
Sangat disayangkan sekali, bahwa keberadaan LPT pada sebuah computer, terutama pada
notebook, sudah sangat jarang terlihat, padahal keinginan untuk belajar mikrokontroller sudah
tidak bisa ditahan lagi, sehingga kebutuhan sebuah programmer sangat mutlak sangat
diperlukan. Pembuatan programmer dengan menggunakan port serial dapat digunakan sebagai
alternative untuk melakukan pemrograman ke mikrokontroller, dan keberadaan port serial ini
dapat tergantikan dengan menggunakan konverter USB to RS232, apabila di pc atau notebook
anda tidak tersedia port serial RS232. Dengan harga yang sangat terjangkau. Berikut
merupakan skamatik dari sebuah website yang sangat berguna sekali, 8052.com
ic tersebut merupakan saudara dari 89s51 dengan pin dan ROM yang lebih sedikit, tetapi
dengna kemampuan yang tidak kalah hebat. IC ini sesungguhny hanya berfungsi sebagai
konverter dari data serial menjadi data parallel, sehingga dapat digunakan untuk melakukan
DB9 MALE
1 R1 R2 R3 R4 R5
6 220 1k 1k 1k 1k
2
7
3 U2 D1
8 U1 LED
4 13 12 2 12
9 8 R1IN R1OUT 9 3 P3.0/RXD P1.0/AIN0 13
5 11 R2IN R2OUT 14 6 P3.1/TXD P1.1/AIN1 14
10 T1IN T1OUT 7 7 P3.2/INTO P1.2 15
P1 T2IN T2OUT 8 P3.3/INT1 P1.3 16 MISO
1 9 P3.4/T0 P1.4 17 RESET
3 C+ 11 P3.5/T1 P1.5 18 SCK
C1 + 4 C1- C7 P3.7 P1.6 19 MOSI
10uF 5 C2+ 30pF 5 P1.7
2 C2- 4 XTAL1
6 V+ XTAL2
J2
V- 1 MOSI
C3 RST/VPP VCC MISO 1
MAX232
C2 Y1 20 SCK 2
+ VCC
C4 + 10uF 11.0592 100nF VCC VCC RESET 3
10uF
10uF
+
C5 C6 4
+
30pF VCC AT89S2051 10uF 5
VCC C8 6
CON6
a. Buka program ISP PROG V1.4, pada desktop komputer anda, buatkan shortcut
b. Tampilan program ISP PROG V1.4, pada gambar tersebut tampak beberapa
menu utama yang dapat digunakan untuk keperluan pemrograman, File, Option
dan Help
menu Chip Erase untuk melakukan penghapusan isi program pada device dan
tersebut tampilan dialog box, Error (abaikan tampilan tersebut) dan lanjutkan
g. Untuk mengisi program memori dengan file HEX, pada daftar pilih menu
Write Flash, dan buka file HEX melalui menu File dengan pilihan Load
FLASH File.
P2.7
P2.0
P0.0
P0.7
74LS244
P1.0
P1.7
P3.0
P3.7
GND
+12V
-12V
+5V
CATATAN:
Pada saat penggunaan tombol pushbutton atau keypad 4x4, buka jumper pada DAC_EN