PENGEMBANGAN PROTOTIPE LAMPU LALU LINTAS PEJALAN KAKI BERBASIS MIKROKONTROLER MCS-51 YANG DIINISIASI DENGAN TOMBOL
IRENE PRICELLA SITUMORANG
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2013
PERNYATAAN MENGENAI SKRIPSI DAN SUMBER INFORMASI SERTA PELIMPAHAN HAK CIPTA Dengan ini saya menyatakan bahwa skripsi berjudul Pengembangan Prototipe Lampu Lalu Lintas Pejalan Kaki Berbasis Mikrokontroler MCS-51 yang Diinisiasi dengan Tombol adalah benar karya saya dengan arahan dari komisi pembimbing dan belum diajukan dalam bentuk apa pun kepada perguruan tinggi mana pun. Sumber informasi yang berasal atau dikutip dari karya yang diterbitkan maupun tidak diterbitkan dari penulis lain telah disebutkan dalam teks dan dicantumkan dalam Daftar Pustaka di bagian akhir disertasi ini. Dengan ini saya melimpahkan hak cipta dari karya tulis saya kepada Institut Pertanian Bogor. Bogor, Juli 2013 Irene Pricella Situmorang NIM G64104038
ABSTRAK IRENE PRICELLA SITUMORANG. Pengembangan Prototipe Lampu Lalu Lintas Pejalan Kaki Berbasis Mikrokontroler MCS-51 yang Diinisiasi dengan Tombol. Dibimbing oleh KARLISA PRIANDANA. Saat ini, di Indonesia, hak pejalan kaki untuk menyeberang jalan pada zebra cross sering diabaikan. Padahal, UU No. 22 tahun 2009 tentang Lalu Lintas dan Angkutan Jalan, Pasal 130 ayat 2 secara eksplisit menjelaskan bahwa pejalan kaki yang menyeberang pada zebra cross berhak mendapat prioritas. Penelitian ini mengembangkan dua prototipe lampu lalu lintas untuk pejalan kaki yang dapat diinisiasi dengan tombol dengan menggunakan mikrokontroler keluarga MCS-51, untuk diimplementasikan di zebra cross. Prototipe pertama menggunakan pushbutton, sedangkan prototipe kedua menggunakan keypad sebagai tombol untuk menginisiasi lampu lalu lintas. Penekanan tombol akan memulai kondisi menyeberang, yaitu kondisi pada saat lampu lalu lintas kendaraan menjadi merah dan lampu lalu lintas penyeberang jalan menjadi hijau. Dalam hal ini, seven segment akan menampilkan waktu hitung mundur yang dapat dipilih melalui tombol. Penelitian ini menunjukkan bahwa penggunaan push-button lebih ramah guna dan lebih mudah dipelihara. Sementara itu, penggunaan keypad lebih fleksibel dalam hal pemilihan waktu menyeberang. Kata kunci: keypad, lampu lalu lintas, mikrokontroler MCS-51, push-button, seven segment
ABSTRACT IRENE PRICELLA SITUMORANG. Development of Button-Initiated Pedestrian Traffic Lights Using MCS-51 Microcontroller. Supervised by KARLISA PRIANDANA. Nowadays, in Indonesia, pedestrian’s right to cross through zebra cross is often abandoned. On the other hand, Law No. 22 of 2009 concerning Traffic and Road Transportation, article 130 paragraph 2 explicitly mentioned that pedestrian who cross through zebra cross shall be prioritized. This study develops two button-initiated pedestrian traffic light prototypes using MCS-51 microcontroler, to be implemented in zebra cross. The first prototype utilizes several push-buttons, whereas the second prototype uses keypad as the button to initiate the traffic light. Pressure on the button will trigger the crossing condition, where the vehicle’s traffic light becomes red and the pedestrian’s traffic light becomes green. In this condition, seven segment will show the count down time that can be selected through the button. This study shows that the push-button prototype is more user friendly and easily maintained. Meanwhile, the keypad prototype is more flexible in terms of selecting the crossing time. Keywords: keypad, MCS-51 microcontroller, push-button, seven segment, traffic light
PENGEMBANGAN PROTOTIPE LAMPU LALU LINTAS PEJALAN KAKI BERBASIS MIKROKONTROLER MCS-51 YANG DIINISIASI DENGAN TOMBOL
IRENE PRICELLA SITUMORANG
Skripsi sebagai salah satu syarat untuk memperoleh gelar Sarjana Komputer pada Departemen Ilmu Komputer
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2013
Judul Skripsi : Pengembangan Prototipe Lampu Lalu Lintas Pejalan Kaki Berbasis Mikrokontroler MCS-51 yang Diinisiasi dengan Tombol : Irene Pricella Situmorang Nama N1M : G64104038
Disetujui oleh
Karlisa Priandana, ST M Eng
Pembimbing L
o MSiMKom
Tanggal Lulus: ~r 2
AUG 2013
Judul Skripsi : Pengembangan Prototipe Lampu Lalu Lintas Pejalan Kaki Berbasis Mikrokontroler MCS-51 yang Diinisiasi dengan Tombol Nama : Irene Pricella Situmorang NIM : G64104038
Disetujui oleh
Karlisa Priandana, ST M Eng Pembimbing I
Diketahui oleh
Dr Ir Agus Buono, MSi M Kom Ketua Departemen
Tanggal Lulus:
PRAKATA Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa atas segala karunia-Nya sehingga tugas akhir ini berhasil diselesaikan. Tema yang dipilih dalam tugas akhir yang dilaksanakan sejak bulan September 2012 ini ialah mikrokontroler, dengan judul Pengembangan Prototipe Lampu Lalu Lintas Pejalan Kaki Berbasis Mikrokontroler MCS-51 yang Diinisiasi dengan Tombol. Penulis sadar bahwa tugas akhir ini tidak akan terselesaikan tanpa bantuan dari berbagai pihak. Pada kesempatan ini, penulis ingin mengucapkan terima kasih kepada: 1 Orang tua tercinta Bapak Mangapul Adil Situmorang, SSos dan almarhum Ibu Ernata Siregar, kakak penulis Santa Elizabeth Situmorang, SE, dan Christina Natalia Situmorang, SE, abang penulis Ellyas Tarnama Uli Situmorang, ST, serta adik penulis Gunawan Situmorang atas segala doa dan dukungan yang tiada hentinya. 2 Ibu Karlisa Priandana ST MEng selaku dosen pembimbing tugas akhir. Terima kasih atas kesabaran dan dukungan dalam penyelesaian tugas akhir ini. 3 Teman-teman Ilkomerz Angkatan 5 atas kebersamaannya. 4 Gunawan Purba, SH yang selalu memberikan dukungan dan semangat kepada penulis. Penulis menyadari bahwa masih terdapat kekurangan dalam penulisan tugas akhir ini. Semoga tugas akhir ini bermanfaat.
Bogor, Juli 2013 Irene Pricella Situmorang
DAFTAR ISI DAFTAR TABEL
vi
DAFTAR GAMBAR
vi
DAFTAR LAMPIRAN
vi
PENDAHULUAN
1
Latar Belakang
1
Perumusan Masalah
2
Tujuan Penelitian
2
Manfaat Penelitian
2
Ruang Lingkup Penelitian
2
METODE
3
Alat
4
Penentuan Fungsi Prototipe
8
Perancangan dan Modifikasi Algoritme
8
Implementasi Algoritme pada Prototipe
8
Evaluasi
8
HASIL DAN PEMBAHASAN
9
Rancangan Fungsi Prototipe
9
Rancangan Algoritme
9
SIMPULAN DAN SARAN
14
Simpulan
14
Saran
15
DAFTAR PUSTAKA
15
LAMPIRAN
15
RIWAYAT HIDUP
27
DAFTAR TABEL 1 2 3 4
Tabel Kebenaran 74LS138 Alamat vektor interupsi Evaluasi prototipe Perbandingan kedua prototipe yang dikembangkan
6 12 14 14
DAFTAR GAMBAR 1 2 3 4 5 6 7 8 9 10 11 12
Diagram alur metode penelitian Mikrokontroler 89x52 merupakan keluarga MCS-51 Konfigurasi pin MCS-51 Seven segment Rangkaian decoder 74LS138 dengan mikrokontroler dan 7-Segment Skema rangkaian antarmuka push-button In-System Programming (ISP) Dua set lampu lalu lintas Rangkaian dasar keypad 4x4 Algoritme dengan push-button Algoritme dengan keypad Algoritme interupsi Timer 0
3 4 5 5 6 6 7 7 7 10 10 13
DAFTAR LAMPIRAN 1 2 3 4 5 6
Rangkaian praktikum yang digunakan Skematik antarmuka prototipe dengan push button Skematik antarmuka prototipe dengan keypad Diagram alir subrutin interupsi dan subrutin seven segment Listing program prototipe dengan push-button Listing program prototipe dengan keypad
16 16 17 18 18 23
PENDAHULUAN Latar Belakang Saat ini, kecelakaan lalu lintas yang menyebabkan pejalan kaki menjadi korban meningkat di Indonesia. Pengemudi kendaraan kurang memperdulikan hak pejalan kaki dalam penggunaan lalu lintas dan jalan raya. Walaupun, pejalan kaki memiliki hak yang sama dengan pengemudi kendaraan dalam penggunaan lalu lintas dan jalan raya. Kecelakaan-kecelakaan tersebut menunjukkan bahwa pejalan kaki kurang mendapatkan perlindungan yang memadai dalam penggunaan lalu lintas dan jalan raya. Meskipun fasilitas-fasilitas pendukung bagi pejalan kaki telah disediakan oleh pemerintah. Selain itu, fasilitas pendukung bagi pejalan kaki tersebut belum berfungsi sebagaimana mestinya. Zebra cross adalah salah satu fasilitas pendukung bagi pejalan kaki yang dinyatakan dengan marka jalan berbentuk garis membujur berwarna putih dan hitam, berfungsi untuk memberikan keamanan bagi pejalan kaki pada saat menyeberang jalan. Undang-Undang Nomor 22 Tahun 2009 Tentang Lalu Lintas dan Angkutan Jalan Pasal 130 ayat 2 menyatakan bahwa “Pejalan kaki yang sedang berjalan pada zebra cross berhak mendapatkan prioritas untuk menyeberang jalan”. Namun pada kenyataannya, banyak pengemudi kendaraan lebih mengutamakan kepentingannya dari pada pejalan kaki. Pengemudi kendaraan melaju kendaraannya lebih cepat pada saat melihat pejalan kaki yang akan atau sedang menyeberang jalan. Oleh karena, itu diperlukan suatu sistem lalu lintas tambahan untuk membantu memaksimalkan fungsi zebra cross tersebut. Adapun penelitian yang pernah dilakukan adalah Traffic Signal Control Modification Based on Self-Organizing in Indonesia (Jatmiko et al. 2009), yaitu mengenai kontrol lampu lalu lintas pada persimpangan jalan berdasarkan perubahan jumlah kendaraan pada masing-masing bagian simpang. Penelitian dalam bentuk simulasi ini menggunakan pendekatan pada suara dengan menghitung nilai frekuensi suara yang ditimbulkan. Penelitian tersebut diharapkan dapat mengurangi kemacetan di Indonesia khususnya pada bagian persimpangan jalan. Terkait penelitian sebelumnya, penelitian ini mengembangkan suatu sistem lalu lintas berbasis mikrokontroler yang juga masih dalam bentuk simulasi atau prototipe. Implementasi lampu lalu lintas pejalan kaki sudah diterapkan dibeberapa negara, salah satunya Indonesia. Beberapa kota di Indonesia yang telah mengimplementasi lampu lalu lintas tersebut adalah Jakarta, Bogor, dan Semarang. Tetapi implementasi lampu lalu lintas tersebut belum mendapat sambutan yang baik dari masyarakat. Selain itu pemerintah pun kurang memberikan sosialisasi cara penggunaannya kepada masyarakat. Mikrokontroler yang digunakan adalah mikrokontroler keluarga MCS51yang banyak dijumpai di pasaran. Kelebihan mikrokontroler ini yaitu memiliki fitur yang praktis dan ukuran memori yang cukup besar (Suyatno et al. 2007).
2 Perumusan Masalah Masalah yang akan diangkat dalam penelitian ini adalah bagaimana cara merancang atau mengembangkan suatu sistem lalu lintas untuk pejalan kaki. Sistem lalu lintas tersebut dirancang dalam bentuk prototipe berbasis mikrokontroler. Prototipe lampu lalu lintas bagi pejalan kaki yang dikembangkan tersebut akan diinisiasi dengan tombol. Tombol yang digunakan adalah pushbutton dan keypad sehingga sistem akan menghasilkan 2 prototipe. Mikrokontroler yang digunakan adalah mikrokontroler 89x52 yang telah terangkai pada rangkaian praktikum. Mikrokontroler 89x52 merupakan mikrokontroler keluarga MCS-51.
Tujuan Penelitian Penelitian ini bertujuan membuat prototipe sebuah aplikasi sederhana yang berbasis mikrokontroler MCS-51 berupa lampu lalu lintas pejalan kaki yang diinisiasi dengan tombol.
Manfaat Penelitian Penelitian ini diharapkan dapat menjadi pionir dalam pembuatan alat lalu lintas pejalan kaki berbasis mikrokontroler untuk diimplementasikan pada zebra cross. Implementasi lampu lalu lintas ini diharapkan dapat membantu memaksimalkan fungsi zebra cross untuk memberi keamanan bagi pejalan kaki dalam menyeberang jalan.
Ruang Lingkup Penelitian Ruang lingkup pada penelitian ini adalah: 1 Mikrokontroler yang digunakan adalah mikrokontroler 89x52, merupakan salah satu keluarga MCS-51, yang telah terangkai pada rangkaian praktikum. 2 Tombol yang digunakan adalah 6 push-button dan keypad sebagai inisiasi penyeberangan jalan yang dikembangkan pada 2 prototipe. Inisiasi tombol kembali dapat dilakukan setelah jeda waktu selama 5 menit. 3 Kondisi default adalah kondisi dimana lampu hijau pada salah satu set lampu lalu lintas (diasumsikan untuk kendaraan) dan lampu merah pada set lampu lalu lintas lainnya (diasumsikan untuk pejalan kaki) menyala. 4 Seven segment menampilkan perhitungan waktu mundur dari x detik ke 0. Rentang nilai x pada masing-masing push-button adalah 10-60 detik. Dan rentang nilai x dengan menggunakan keypad adalah 0-99 detik. 5 Lampu kuning digunakan sebagai lampu transisi yang akan menyala pada saat pergantian state dari lampu merah menyala menjadi lampu hijau menyala dan sebaliknya. 6 Implementasi prototipe diterapkan pada zebra cross yang berada pada jalan lurus dan bukan persimpangan.
3
METODE Metode yang digunakan adalah metode Trial and Error dengan alur yang dapat dilihat pada Gambar 1. Prototipe yang dikembangkan menggunakan perangkat keras berupa sebuah rangkaian praktikum (Lampiran 1) yang telah terangkai dengan mikrokontroler jenis 89x52, salah satu mikrokontroler keluarga MCS-51. Selain mikrokontroler, komponen lain yang terangkai pada rangkaian tersebut dan digunakan untuk mengembangkan prototipe adalah seven segment, light-emitting diode (LED) lampu lalu lintas, push-button, dan keypad. Setiap fungsi prototipe akan disesuaikan dengan kebutuhan pejalan kaki dalam menyeberang jalan. Fungsi-fungsi tersebut dirancang dengan menggunakan algoritme dan kemudian diimplementasikan pada prototipe. Implementasi algoritme dalam bentuk program menggunakan perangkat lunak Emulator MCU 8051 IDE dan compiler MIDE51 yang telah diinstal pada komputer. Kemudian program tersebut akan dimasukkan pada mikrokontroler dengan menggunakan In-System Programming (ISP) sebagai penghubung antara komputer dan mikrokontroler. Prototipe dievaluasi kembali untuk disesuaikan dengan fungsinya. Jika belum sesuai dengan fungsinya, algoritme akan dimodifikasi. Hasil modifikasi algoritme tersebut diimplementasikan kembali dan dievaluasi apakah syaratnya telah terpenuhi. Jika seluruh syarat telah terpenuhi, penelitian telah berhasil dan prototipe telah selesai dikembangkan.
Gambar 1 Diagram alur metode penelitian
4 Alat Perangkat Keras Mikrokontroler adalah suatu komponen elektronik, miniatur dari suatu sistem komputer. Mikrokontroler mempunyai kemampuan untuk diprogram sesuai keinginan seperti halnya komputer. Namun, mikrokontroler hanya dapat di gunakan untuk suatu aplikasi tertentu saja karena keterbatasan dalam menyimpan program. Mikrokontroler terdiri atas sebuah inti processor, memori (sejumlah kecil RAM, memori program, atau keduanya) dan perlengkapan input-output. Penelitian ini menggunakan mikrokontroler 89x52 yang merupakan salah satu mikrokontroler keluarga MCS-51 seperti terlihat pada Gambar 2. Mikrokontroler 89x52 memiliki respons yang lebih cepat daripada 89x51.
Gambar 2 Mikrokontroler 89x52 merupakan keluarga MCS-51 Beberapa fitur mikrokontroler ini adalah (Hamirani 2012): Sebuah CPU (Central Prossesing Unit) 8 bit yang termasuk keluarga osilator internal dan rangkaian timer. Flash memori 8 Kb RAM 128 bytes Empat buah programmable port I/O, masing-masing terdiri dari atas 8 jalur I/O Lima buah jalur interupsi (2 buah interupsi eksternal dan 3 buah interupsi internal) Sebuah port serial dengan kontrol serial full duplex UART. Kecepatan pelaksanaan intruksi persiklus untuk mikrokontroler ini adalah 1 mikrodetik pada frekuensi clock 12 MHz. Mikrokontroler ini memiliki timer internal dengan frekuensi 12 MHz (Suyatno et al. 2007). Susunan pin-pin mikrokontroler 89x52 dapat dilihat pada Gambar 3 dengan konfigurasi sebagai berikut. Pin 1 sampai 8 (Port 1) merupakan port paralel 8 bit 2 arah (input-output) yang digunakan untuk berbagai keperluan (general purpose). Pin 9 (Reset) adalah interupsi reset (aktif high) perpindahan kondisi rendah ke tinggi akan mereset 89x52. Pin ini dihubungkan dengan rangkaian power on reset. Pin 10 sampai 17 (port 3) adalah port paralel 8 bit 2 arah (input-output) yang memiliki fungsi pengganti. Fungsi pengganti meliputi TXD (Transmisi Data), RXD (Receiver Data), INT0 (Interrupt 0), INT1 (Interrupt 1), T0 (timer 0), T1 (Timer 1), WR (Write), dan RD (Read). Bila fungsi pengganti tidak dipakai, pin-pin ini dapat digunakan sebagai port paralel 8 bit serba guna.
5 Pin 18 dan 19 (XTAL1 dan XTAL2) adalah pin input osilator kristal, yang merupakan input clock bagi rangkaian osilator internal. Pin 20 (ground) dihubungkan ke VSS atau Ground. Pin 21 sampai 28 (port 2) adalah port paralel 8 bit 2 arah (input-output). Port 2 ini mengirim byte alamat apabila dilakukan pengaksesan memori ekternal. Pin 32 sampai 39 (port 0) merupakan port paralel 8 bit open drain 2 arah. Bila digunakan untuk mengakses memori luar, port ini akan memultipleks alamat memori dengan data. Pin 40 (Vcc) dihubungkan ke Vcc (+5 Volt) sebagai power supply untuk mikrokontroler.
Gambar 3 Konfigurasi pin MCS-51 Komponen pendukung lainnya yang digunakan pada penelitian ini ialah dapat seven segment (Gambar 4) yang digunakan untuk menampilkan waktu hitung mundur dalam satuan detik.
Gambar 4 Seven segment Seven segment merupakan sebuah display yang terbentuk dari 7 buah segmen LED (ditambah 1 segmen untuk menampilkan titik) dan terhubung pada port 0. Tujuh segmen tersebut dinamakan segmen A, B, C, D, E, F, dan G, serta DP, satu buah segmen tambahan untuk menampilkan titik. Pengaturan tampilan seven segment dilakukan dengan menyalakan/ memadamkan segmen led yang sesuai. Seven segment yang menyala dikontrol oleh decoder/ demultiplexer 74LS138 seperti yang ditunjukkan pada Gambar 5.
6
Gambar 5 Rangkaian decoder 74LS138 dengan mikrokontroler dan 7-Segment Pada Tabel 1, tampak bahwa seven segment yang menyala tergantung pada output dari decoder 74LS138. Output ini dikontrol oleh ketiga input decoder 74LS138 yang terhubung ke P3.5, P3.6, dan P3.7. Oleh karena itu, dari 8 buah display seven segment yang ada pada kit praktikum, selalu hanya ada satu display yang menyala. Display seven segment dihidupkan secara bergantian dengan waktu tunda tertentu yang tidak kasat mata akan membuat display tampak menyala secara bersamaan. Tabel 1 Tabel Kebenaran 74LS138 SELEKTOR C B A P3.7 P3.6 P3.5 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
G1 VCC 1 1 1 1 1 1 1 1
ENABLE G2A G2B EN EN 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
OUTPUT Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
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 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 0 1
1 1 1 1 1 1 1 0
Gambar 6 merupakan push-button yang digunakan sebagai tombol inisiasi terhadap lampu lalu lintas. Selain push-button, keypad juga dapat digunakan sebagai tombol untuk inisiasi.
7 Keypad terdiri dari sejumlah saklar yang terhubung sebagai baris dan kolom seperti Gambar 7. Untuk mengetahui tombol mana yang ditekan, mikrokontroler akan melakukan teknik scanning dengan cara memberi logika low “0” ke salah satu port yang terhubung ke kolom keypad (C1–C4). Selanjutnya, mikrokontroler memeriksa seluruh port yang terhubung pada baris (R1–R4) untuk menguji jika ada tombol yang ditekan pada baris dan kolom tersebut. Jika tidak ada tombol yang ditekan, maka mikrokontroler akan mendapati bahwa seluruh port yang terhubung pada baris (R1–R4) memiliki logika high “1”. Kedua tombol akan terhubung pada port yang sama, yaitu port 2. Oleh karena itu, dikembangkanlah 2 prototipe.
Gambar 7 Rangkaian dasar keypad 4x4 Dua set lampu lalu lintas yang digunakan dapat dilihat pada Gambar 8. Satu set lampu lalu lintas digunakan untuk pejalan kaki dan satu set lainnya digunakan untuk pengemudi kendaraan. Led yang digunakan sebagai lampu lalu lintas terhubung pada port 1. Komponen in system programming pada Gambar 9 digunakan untuk memprogram mikrokontroler 89x52. Skematik prototipe dengan push button dan keypad yang telah dihubungkan dengan seluruh komponen yang digunakan dapat dilihat pada Lampiran 2 dan Lampiran 3.
Gambar 8 Dua set lampu lalu lintas
Gambar 9 In-System Programming (ISP)
Perangkat Lunak Perangkat lunak yang akan digunakan pada penelitian ini adalah Emulator MCU 8051 IDE, compiler MIDE51, dan driver programmer ProgISP versi 1.72.
8 Penentuan Fungsi Prototipe Pada tahap ini prototipe akan dirancang sesuai dengan kebutuhan pejalan kaki dalam menyeberang jalan.
Perancangan dan Modifikasi Algoritme Algoritme yang diadopsi dalam penelitian ini adalah algoritme jam digital. Timer yang digunakan pada algoritme jam digital adalah timer internal. Algoritme lainnya akan dikembangkan sesuai dengan fungsi yang diinginkan. Pengembangan algoritme dilakukan dengan menggunakan bahasa Assembly dengan bantuan perangkat lunak Emulator MCU 8051 IDE.
Implementasi Algoritme pada Prototipe Algoritme yang telah dikembangkan akan diimplementasikan pada perangkat prototipe. Compiler yang digunakan adalah MIDE51 sedangkan programmer mikrokontroler yang digunakan adalah ProgISP versi 1.72.
Evaluasi Pada tahap ini, fungsionalitas prototipe akan diiuji dengan beberapa persyaratan, yaitu: 1 Kondisi default dapat ditampilkan. 2 Kondisi menyeberang dapat diinisiasi dengan tombol. Tombol yang digunakan terdiri atas push-button dan keypad. a Waktu kondisi menyeberang dengan menggunakan push-button diaktifkan dengan menekan push-button sebanyak 2 kali. b Waktu kondisi menyeberang dengan menggunakan tombol keypad diaktifkan dengan menekan keypad ENT setelah terlebih dahulu menekan keypad angka secara bebas. Pada keypad, waktu hitung mundur dapat dihapus dan kemudian diganti dengan menggunakan keypad COR atau MEN. 3 Waktu hitung mundur dapat ditampilkan pada seven segment. 4 Setelah waktu habis, lampu lalu lintas kembali ke kondisi default. 5 Tombol tidak dapat ditekan kembali sebelum jeda waktu 5 menit. 6 Prototipe akan memberikan waktu hitung mundur selama x detik. Nilai x yang tersimpan pada masing-masing push-button adalah 10, 20, 30, 40, 50, dan 60 detik, sedangkan nilai x yang dapat dihasilkan dengan keypad adalah 0-99 detik. 7 Transisi lampu merah menjadi hijau dan sebaliknya menggunakan lampu kuning. Apabila persyaratan fungsionalitas di atas belum seluruhnya terpenuhi maka algoritme yang dirancang perlu ditelusuri kembali. Penelitian dianggap selesai setelah ke-7 fungsi terpenuhi.
9
HASIL DAN PEMBAHASAN Rancangan Fungsi Prototipe Fungsi prototipe yang dikembangkan adalah: Kondisi default: lampu hijau pada salah satu set lampu lalu lintas (yang diasumsikan untuk kendaraan) dan lampu merah pada set lampu lalu lintas lainnya (yang diasumsikan untuk pejalan kaki) menyala. 2 Kondisi lampu lalu lintas dapat diubah menjadi “kondisi menyeberang”, yaitu kebalikan dari kondisi default-nya melalui inisiasi tombol. Setelah tombol ditekan, seven segment akan menampilkan perhitungan mundur dalam detik. 3 Waktu “kondisi menyeberang” yang akan ditampilkan pada seven segment ditentukan melalui push-button, dengan rentang nilai antara 10-60 detik, dan keypad, dengan rentang nilai 0-99 detik. 4 Transisi lampu merah menjadi hijau dan sebaliknya menggunakan lampu kuning. 5 Tombol dapat ditekan kembali setelah jeda waktu 5 menit. 1
Rancangan Algoritme Algoritme dikembangkan berdasarkan fungsi prototipe yang telah ditentukan, seperti yang dapat dilihat pada Gambar 10 (dengan push-button) dan Gambar 11 (dengan keypad). Prototipe dimulai dengan kondisi default, yaitu lampu hijau pada lampu A, satu set lampu lalu lintas untuk pengemudi kendaraan, dan lampu merah pada lampu B, satu set lampu lalu lintas untuk pejalan kaki, menyala serta seven segment masih dalam keadaan non-aktif. Tombol yang digunakan untuk inisiasi terdiri atas push-button dan keypad. Pada Gambar 10, dapat dilihat bahwa apabila push-button ditekan sekali, seven segment aktif untuk menampilkan waktu penyeberangan x detik. Enam buah pushbutton yang digunakan mewakili masing-masing nilai x, yaitu 10, 20, 30, 40, 50, dan 60. Penekanan push-button kedua kalinya akan membuat kondisi default berubah menjadi kondisi menyeberang, yaitu lampu hijau pada lampu A berubah menjadi merah, lampu merah pada lampu B berubah menjadi hijau, serta seven segment akan mulai menampilkan hitungan mundur dari x detik ke 0. Selain push-button, keypad dapat digunakan untuk menentukan waktu menyeberang. Prototipe yang kedua (Gambar 10), penekanan angka keypad akan menentukan waktu menyeberang. Nilai x yang dihasilkan dengan keypad memiliki rentang nilai yang lebih luas, yaitu antara 0-99 detik. Seven segment akan mulai menampilkan hitung mundur setelah keypad ENT ditekan. Pada kondisi ini, pejalan kaki menyeberang jalan. Transisi lampu merah menjadi hijau dan sebaliknya menggunakan lampu kuning. Setelah waktu penyeberangan mencapai 0, kondisi menyeberang berubah kembali menjadi kondisi default dan inisiasi tombol untuk kedua kalinya dapat digunakan setelah jeda waktu 5 menit.
10
Keterangan gambar: A= Pengemudi kendaraan B= Pejalan kaki x= 10, 20, 30, 40, 50, 60 Gambar 10 Algoritme dengan push-button
Keterangan gambar: A= Pengemudi kendaraan B= Pejalan kaki x= 00-99 Gambar 11 Algoritme dengan keypad
Pilihan waktu menyeberang yang diterapkan pada prototipe cukup bervarisi. Waktu menyeberang dipengaruhi oleh lebar jalan dan kecepatan pejalan kaki. Ukuran umum lebar jalan adalah 3.25 sampai 3.75 m (Bang 1997). Sedangkan rata-rata kecepatan pejalan kaki adalah 3.5 ft/s atau sama dengan 1.1 m/s (LaPlante and Kaeser 2007). Oleh karena itu, standar waktu menyeberang pejalan kaki dapat ditentukan dengan menghitung hasil bagi lebar jalan dengan kecepatan pejalan kaki. Rata-rata waktu menyeberang yang dapat dijadikan acuan untuk menyeberang adalah 20-30 detik (LaPlante and Kaeser 2007).
11 Perhitungan mundur (detik) yang ditampilkan pada seven segment menggunakan algoritme jam digital yang menggunakan sarana timer yang ditimbulkan oleh interupsi, ditunjukkan pada Gambar 12. Mikrokontroler jenis 89x52 mempunyai 3 perangkat timer/ counter, yaitu Timer 0, Timer 1, dan Timer 2. Perangkat timer/ counter tersebut dapat diakses dengan menggunakan register khusus yang tersimpan dalam SFR (Special Function Register). Dalam mengatur kerja timer/ counter tersebut digunakan 2 register tambahan yang dipakai bersama oleh Timer 0 dan Timer 1. Register tambahan tersebut adalah register TCON (Timer Control Register) dan register TMOD (Timer Mode Register). Pencacah biner timer/ counter 89x52 merupakan pencacah biner 16 bit naik yang mencacah dari 0000h sampai FFFFh. Saat kondisi pencacah berubah dari FFFFh kembali ke 0000h akan timbul sinyal limpahan (overflow). TL0 (Timer 0 low byte), TH0 (Timer 0 high byte), TL1 (Timer 1 low byte), dan TH1 (Timer 1 high byte) merupakan SFR yang dipakai untuk membentuk pencacah biner Timer 0 dan Timer 1 dengan indikator limpahan pada TF0 dan TF1. Timer 2 menggunakan register TL2, TH2, RCAP2L dan RCAP2H serta indikator limpahan TF2. Jumlah ruang untuk pencacahan ditentukan oleh mode kerja timer sebagai berikut: 1 Mode 0 mengaktifkan timer sebagai pencacah 13 bit dan diaktifkan dengan mengeset bit M1 = 0 dan bit M0 = 0 pada SFR TMOD. Pada mode ini, TLx hanya akan menghitung hingga 5 bit, sedangkan THx akan menghitung hingga 8 bit. Timer pencacah 13 bit akan overflow setelah 213 atau 8192 hitungan. 2 Mode 1 mengaktifkan timer sebagai pencacah 16 bit dan diaktifkan dengan mengeset bit M1 = 0 dan bit M0 = 1 pada SFR TMOD. Pada mode ini, TLx dan Thx difungsikan secara penuh (masing-maisng 8 bit). Timer pencacah 16 bit akan overflow setelah 216 atau 65536 hitungan. 3 Mode 2 mengaktifkan timer sebagai pencacah 8 bit dengan autoreload. Mode ini diaktifkan dengan mengeset bit M1 = 1 dan bit M0 = 0 pada SFR TMOD. TLx digunakan sebagai register pencacah, sementara THx diisi dengan data yang akan di-“reload”-kan jika TLx telah overflow. Jumlah hitungan pencacahan yang dilakukan adalah 28 atau 256 dikurangi nilai yang tersimpan pada THx. 4 Mode 3 hanya berlaku pada timer 0 yang akan memfungsikan TL0 dan TH0 sebagai register 8 bit yang memiliki fungsi berbeda satu sama lain. TL0 dikendalikan oleh bit-bit TMOD dan TCON untuk timer 0, sedangkan TH0 diatur oleh bit-bit TCON untuk timer 1. Mode ini diaktifkan dengan mengeset bit M1 = 1 dan bit M0 = 1 pada SFR TMOD. Prototipe ini menggunakan Timer 0 yang akan diakses melalui register TL0 dan TH0. Indikator limpahan memakai TF0 untuk membangkitkan clock jam digital yang akan ditampilkan pada seven segmen, bagian detik puluhan (display 6), dan detik satuan (display 7). Mode timer yang digunakan adalah mode 1 (timer 16 bit). Clock yang digunakan untuk timer adalah clock internal mikrokontroler, yaitu 12 MHz sehingga frekuensi pencacah adalah 12 MHz/12 = 1 MHz. Pembagi 12 ini diperlukan karena 1 machine cycle mikrokontroler MCS-51 setara dengan 12 clock cycle. Hal ini berarti bahwa satu hitungan timer setara dengan 1 mikrodetik.
12 Timer akan overflow setiap 65536 hitungan. Clock internal mikrokontroler adalah 12 MHz, maka satu hitungan setara dengan 1 mikrodetik. Dengan kata lain, timer akan overflow setiap 65536 mikrodetik. Hitungan timer yang akan digunakan setiap kali overflow adalah 50000 mikrodetik atau 0.05 detik dan 20 kali overflow akan setara dengan 1 detik. Angka 50000 dipilih agar hitungan menjadi bulat dan mudah dikonversi menjadi satuan detik. Untuk membangkitkan interupsi timer setiap 50000 mikrodetik, maka data awal yang harus diisikan pada register timer adalah sebagai berikut: 65536 - 50000 = 15536 (desimal) atau 3CB0h Nilai 3CB0h akan diberikan sebagai nilai awal timer dengan aturan data 3Ch diisikan sebagai nilai awal register TH0 dan B0h diisikan sebagai nilai awal register TL0. Dengan demikian, interupsi TF0 akan segera dibangkitkan setiap 50000 mikrodetik atau 0,05 detik. Berdasarkan perhitungan di atas, penggunaan mode 1 lebih mudah dibanding mode lainnya. Misalnya, perhitungan dengan menggunakan mode 3. Mode 3 sebagai register 8 bit memiliki nilai overflow setiap 28 atau 255 mikrodetik. Untuk menghasilkan 1 detik, maka timer dengan mode 3 akan overflow sebanyak 1 detik/ 255 mikrodetik. Nilai dari hasil bagi tersebut tidak bulat sehingga untuk mengkonversikannya pada bilangan hexadesimal cukup sulit. Oleh karena itu, dipilihlah angka 250 sebagai nilai untuk overflow. Untuk membangkitkan interupsi timer setiap 250 mikrodetik, data awal yang harus diisikan pada register timer adalah sebagai berikut: 255-250 = 5 (desimal) atau 5h Nilai 5h akan diberikan sebagai nilai awal timer pada register TL0. Timer dengan nilai overflow 250 mikrodetik akan menghasilkan 1 detik setelah 4000 kali overflow. Satu detik diperoleh setelah 4000 kali akan membutuhkan daya yang besar dibandingkan dengan overflow setelah 20 kali. Oleh karena itu, penggunaan timer 0 dengan mode 1 lebih menguntungkan untuk perhitungan interupsi pada prototipe. Mikrokontroler keluarga MCS51 menyediakan fasilitas untuk 5 jenis sumber interupsi yaitu 2 sumber interupsi eksternal (melalui pin INT0 dan INT1 pada mikrokontroler) dan 3 sumber interupsi internal (Timer 0, Timer 1, dan Port Serial). Agar interupsi dapat dilayani maka instruksi Assembly interrupt routine harus ditempatkan pada alamat vektor tertentu seperti pada Tabel 2, sesuai dengan sumber interupsi yang akan digunakan. Prototipe ini menggunakan interupsi internal Timer 0 (alamat 000Bh). Tabel 2 Alamat vektor interupsi Source
Vector Address
IE0 TF0 IE1 TF1 RI + TI
0003h 000Bh 0013h 001Bh 0023h
13
Gambar 12 Algoritme interupsi Timer 0 Implementasi Algoritme Algoritme yang telah dirancang diimplementasikan dalam bahasa Assembly 8051. Diagram alir untuk subrutin interupsi dan seven segment dapat dilihat pada Lampiran 4. Listing program Assembly untuk prototipe dengan push-button dapat dilihat pada Lampiran 5. Listing program Assembly untuk prototipe dengan keypad dapat dilihat pada Lampiran 6. Evaluasi Evaluasi kedua prototipe ditunjukkan pada Tabel 3. Prototipe yang dikembangkan berhasil memenuhi seluruh persyaratan/ fungsi yang diinginkan. Namun, prototipe pertama masih memiliki kekurangan, yaitu pemilihan waktu menyeberang belum fleksibel. Misalnya waktu yang diinginkan adalah 20, tetapi tombol yang di tekan adalah tombol 30 (salah menekan push-button), maka untuk menampilkan angka 20, tombol 40, 50, 60, dan 10 harus ditekan terlebih dahulu. Perbandingan kedua prototipe yang telah berhasil dikembangkan dapat dilhat pada Tabel 4. Prototipe dengan push-button kurang fleksibel dalam penentuan waktu menyeberang, hanya 10, 20, 30, 40, 50, dan 60 detik. Sedangkan prototipe dengan keypad dapat dipilih pada rentang nilai 0-99. Tetapi prototipe dengan push-button lebih mudah dalam penggunaannya dibandingkan dengan prototipe dengan keypad. Dalam implementasi, jika terjadi kerusakan pada pushbutton maka cukup dengan mengganti push-button yang rusak saja. Sedangkan keypad, apabila 1 keypad mengalami kerusakan maka keseluruhan keypad harus diganti karena keypad bersifat paralel. Koreksi kesalahan dalam pemilihan waktu
14 menyeberang dengan push-button lebih sulit dilakukan daripada prototipe dengan keypad karena pada keypad ada tombol yang digunakan untuk menghapus. Tabel 3 Evaluasi prototipe No
Fungsionalitas
Hasil
1 2
Kondisi default dapat ditampilkan Kondisi menyeberang dapat diinisiasi dengan tombol yang terdiri atas push button dan keypad Waktu hitung mundur dapat ditampilkan pada seven segment Setelah waktu habis, lampu lalu lintas kembali ke kondisi default Tombol tidak dapat ditekan kembali sebelum jeda waktu 5 menit Prototipe akan memberikan waktu hitung mundur selama x detik. Nilai x yang tersimpan pada masing-masing push button adalah 10, 20, 30, 40, 50, dan 60 detik. Nilai x yang dapat dihasilkan dengan keypad adalah 0-99 detik Transisi lampu merah menjadi hijau dan sebaliknya menggunakan lampu kuning
√
3
4 5 6
7
√ √ √ √ √ √
Tabel 4 Perbandingan kedua prototipe yang dikembangkan No 1 2 3 4
Perbandingan Fleksibilitas penentuan waktu menyeberang Kemudahan penggunaan Pemeliharaan Koreksi kesalahan penekanan
Prototipe dengan push-button
Prototipe dengan keypad
Kurang fleksibel
Lebih fleksibel
Lebih mudah Lebih mudah sulit
Lebih kompleks Lebih kompleks mudah
SIMPULAN DAN SARAN Simpulan Prototipe lampu lalu lintas bagi pejalan kaki berbasis mikrokontroler yang diinisiasi dengan tombol telah berhasil dikembangkan pada 2 prototipe. Kedua prototipe yang telah berhasil dibuat dengan menggunakan push-button dan menggunakan keypad. Kedua prototipe telah memenuhi ke-7 fungsi yang diinginkan. Prototipe dengan push-button lebih mudah dalam penggunaan dan pemeliharaannya. Sedangkan prototipe dengan keypad memiliki fleksibilitas dalam penentuan waktu menyeberang dan koreksi kesalahan penekanan lebih mudah.
15
Saran Prototipe dengan push-button masih memiliki kekurangan dalam hal koreksi kesalahan penekanan. Pada penelitian selanjutnya, algoritme scan push-button dapat diubah agar penekanan push-button tidak perlu berurutan. Kekurangan lainnya adalah jeda waktu penekanan tombol tidak dapat diubah selain melalui pemrograman ulang. Pada implementasinya dapat ditambahkan modul CCTV untuk menangkap gambar traffic kendaraan dan penyeberang jalan. Gambar ini dapat diolah dengan image processing untuk menentukan jumlah kendaraan dan penyeberang jalan. Informasi ini dapat digunakan untuk menentukan jeda waktu penekanan tombol berikutnya.
DAFTAR PUSTAKA Bang KL. 1997. Final Report: Indonesia Highway Capacity Manual and Software (Kaji). Indonesian Highway Capacity Manual Project. 1997 Feb 25; Bandung, Jakarta. Bandung (ID). Hamirani NS, Shaikh AA, Memon PM, Khatri YA. 2012. Wireless dual purpose propeller clock display. International Journal of Engineering and Technology. 2(3): 553-556. Indonesia. Undang-Undang tentang Lalu Lintas dan Angkutan Jalan. UndangUndang Nomor 22 Tahun 2009 Pasal 130 ayat 2 Jatmiko W, Arfan A, Krisnadhi AA, Kusumoputro B, Takagawa I, Sekiyama K, Fukuda T. 2009. Traffic signal control modification based on self-organizing in Indonesia. Di dalam: International Symposium on Micro-NanoMechatronics and Human Science. 2009 Nov 9-11. Nagoya, Jepang. hlm 598-601. LaPlante J., Kaeser TP. 2007. A history of pedestrian signal walking speed assumptions. Di dalam: 3rd Urban Street Symposium; 2007 Jun 24-27; Seattle, Amerika Serikat. hlm 1-8. Suyatno P, Istofa, Yuniarsari L. 2007. Rekayasa sistem pengatur parameter pesawat sinar-X diagnostik berbasis mikrokontroler keluarga MCS 51. Seminar Nasional III SDM Teknologi Nuklir; 2007 Nov 21-22; Yogyakarta, Indonesia. Yogyakarta (ID). hlm 337-344.
16 Lampiran 1 Rangkaian praktikum yang digunakan
Lampiran 2 Skematik antarmuka prototipe dengan push button
17 Lampiran 3 Skematik antarmuka prototipe dengan keypad
18 Lampiran 4 Diagram alir subrutin interupsi dan subrutin seven segment
Lampiran 5 Listing program prototipe dengan push-button ;program untuk perubahan lampu oleh tombol P2.1 sudah benar ;pada program ini waktu tunggu dibuat 5s detik equ 30h detikpuluhan equ 31h detiksatuan equ 32h counter20 equ 33h Org 0h Start0: sjmp Start Org 0bh Ljmp Interrupt_Timer0 Start: Mov P1,#11110011b loop:
19 jb P2.0,loop1 mov R7,#10 call delay_500ms disp: MOV detik, R7 CALL Update_tombol call ClockDisplay_tombol jnb P2.0,run jb P2.1, disp loop1: jb P2.1,loop2 mov R7,#20 call delay_500ms disp1: MOV detik, R7 CALL Update_tombol call ClockDisplay_tombol jnb P2.1,run jb P2.2,disp1 loop2: jb P2.2,loop3 mov R7,#30 call delay_500ms disp2: MOV detik, R7 CALL Update_tombol call ClockDisplay_tombol jnb P2.2,run jb P2.3,disp2 loop3: jb P2.3,loop4 mov R7,#40 call delay_500ms disp3: MOV detik, R7 CALL Update_tombol call ClockDisplay_tombol jnb P2.3,run jb P2.4,disp3 loop4: jb P2.4,loop5 mov R7,#50 call delay_500ms disp4: MOV detik, R7 CALL Update_tombol call ClockDisplay_tombol jnb P2.4,run jb P2.5,disp4 loop5: jb P2.5,loop mov R7,#60 call delay_500ms disp5:
20 MOV detik, R7 CALL Update_tombol call ClockDisplay_tombol jnb P2.5,run jb P2.0,disp5 jmp loop run: call delay_500ms jmp kuning_tombol kuning_tombol: Mov P1,#11101101b call delay_1s Mov P1,#11011110b call tunggu_tombol ; kuning2_tombol: call delay_500ms Mov P1,#11101101b call delay_1s Mov P1,#11110011b call delay_1s ulang_tombol: Mov P1,#11110011b call delay_60s jmp Start0 tunggu_tombol: mov Counter20,#20 mov detik,R7 call Update_tombol call ClockDisplay_tombol call DoClock_tombol call InitTimer call interrupt_timer0 Forever_tombol: call ClockDisplay_tombol sjmp Forever_tombol Interrupt_Timer0: mov tl0,#0b0h mov th0,#03ch djnz Counter20, EndInterrupt mov Counter20,#20 call DoClock_tombol EndInterrupt: reti ; DoClock_tombol: dec detik mov A,detik cjne A,#00h,Update_tombol call Update_tombol; call ClockDisplay_tombol jmp kuning2_tombol Update_tombol: mov A,detik mov B,#10
21 DIV AB mov detikpuluhan,A mov detiksatuan,B ret ; ClockDisplay_tombol: Mov DPTR,#Decoder7Segmen mov A,detikpuluhan Movc A,@A+DPTR mov P0,A ; clr P3.5 ; Setb P3.6 Setb P3.7 call delay ; Mov DPTR,#Decoder7Segmen mov A,detiksatuan Movc A,@A+DPTR mov P0,A ; Setb P3.5 ; Setb P3.6 Setb P3.7 call delay ; ret ; InitTimer: mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 ;Enable Timer 0 Interrupt setb EA ;Master Interrupt Enable setb TR0 ;Clock start running ret ; ;subroutine delay time delay: mov R1,#2 del1: mov R2,#255 del2: djnz R2,del2 djnz R1,del1 ret ; L O O K U P T A B L E ; Decode to Seven Segmen -> g f e d c b a Decoder7segmen: DB 11000000b,11111001b,10100100b,10110000b,10011001b DB 10010010b,10000010b,11111000b,10000000b,10010000b ; delay_60s: ; START: Wait loop, time: 60 s ; Clock: 12000.0 kHz (12 / MC) ; Used registers: R0, R1, R2, R3, R4 MOV R4, #02Ah MOV R3, #083h MOV R2, #006h
22 MOV MOV NOP DJNZ DJNZ DJNZ DJNZ DJNZ MOV MOV MOV NOP DJNZ DJNZ DJNZ MOV MOV MOV NOP DJNZ DJNZ DJNZ MOV DJNZ ; Rest: 0 ; END: Wait ret
R1, #0B5h R0, #003h R0, R1, R2, R3, R4, R2, R1, R0,
$ $-5 $-9 $-13 $-17 #002h #0A0h #0A1h
R0, R1, R2, R2, R1, R0,
$ $-5 $-9 #008h #0FCh #005h
R0, R1, R2, R0, R0,
$ $-5 $-9 #011h $
loop
delay_1s: ; START: Wait loop, time: 1 s ; Clock: 12000.0 kHz (12 / MC) ; Used registers: R0, R1, R2, R3 MOV R3, #003h MOV R2, #0D2h MOV R1, #024h MOV R0, #014h NOP DJNZ R0, $ DJNZ R1, $-5 DJNZ R2, $-9 DJNZ R3, $-13 MOV R0, #059h DJNZ R0, $ NOP ; Rest: 0 ; END: Wait loop ret delay_500ms: ; START: Wait loop, time: 500 ms ; Clock: 12000.0 kHz (12 / MC) ; Used registers: R0, R1, R2 MOV R2, #004h MOV R1, #0FAh MOV R0, #0F8h NOP DJNZ R0, $ DJNZ R1, $-5 DJNZ R2, $-9
23 ; Rest: -13.0 us ret End
Lampiran 6 Listing program prototipe dengan keypad col4 bit P2.7 col3 bit P2.6 col2 bit P2.5 col1 bit P2.4 row1 bit P2.0 row2 bit P2.1 row3 bit P2.2 row4 bit P2.3 counter20 equ 30h detik equ 31h output equ 32h keydata equ 33h keybounc equ 34h check equ 40h satuan equ 41h puluhan equ 42h keyport equ P2 Org 0h Start0: sjmp Start1 ;lompat ke Start Org 0bh ;mulai program dari alamat Ljmp Interrupt_Timer0 Start1: MOV P2,#11111111b ;isi P2 dengan 11111111 mov keydata,#00h mov output,#00h CALL CLEAR start: Mov 90h,#11110011b CALL keypad4x4 ;Calling subroutine keypad4x4 MOV A,keydata ;Copy keydata ke A CALL count0 call bin2dec CALL display2sevensegmen ; SJMP start tunggu: Mov P1,#11101101b call delay_1s Mov P1,#11011110b call delay_1s mov Counter20,#20 mov detik,output call Update call ClockDisplay call DoClock call InitTimer ;memanggil InitTimer call interrupt_timer0 Forever: call ClockDisplay
24 sjmp Forever ; Interrupt_Timer0: mov tl0,#0b0h mov th0,#03ch djnz Counter20, EndInterrupt mov Counter20,#20 call DoClock EndInterrupt: reti ; DoClock: dec detik ;mengurangi 1 nilai detik mov A,detik ;memindahkan nilai detik ke A cjne A,#0h,Update call Update; call ClockDisplay jmp kuning2 Update: mov A,detik mov B,#10 DIV AB mov puluhan,A mov satuan,B ret ; ClockDisplay: Mov DPTR,#data7segmen mov A,puluhan Movc A,@A+DPTR mov P0,A ; clr P3.5 ; Setb P3.6 Setb P3.7 call delay ; Mov DPTR,#data7segmen mov A,satuan Movc A,@A+DPTR mov P0,A Setb P3.5 ; Setb P3.6 Setb P3.7 call delay ; ret InitTimer: mov TMOD,#00000001b mov tl0,#0b0h mov th0,#03ch setb ET0 ;Enable Timer 0 Interrupt setb EA ;Master Interrupt Enable setb TR0 ;Clock start running ret ; ;subroutine delay time delay: mov R1,#2
25 del1: mov R2,#255 del2: djnz R2,del2 djnz R1,del1 ret kuning2: call delay_500ms Mov P1,#11101101b call delay_1s Mov P1,#11110011b call delay_1s ulang_tombol: Mov P1,#11110011b call delay_60s jmp Start0 mundur: mov a, output mov b,#10d div ab mov b,#0 mov output,a mov keydata, a dec r7 MOV R5,#0 ret COUNT0: CJNE R7, #00, COUNT1 MOV A, OUTPUT RET COUNT1: CJNE r7, #01, COUNT2 MOV R5, A MOV OUTPUT,A RET COUNT2: MOV R4,A MOV A,R5 MOV B,#10D MUL AB MOV r6,b mov b,#0 ADD A,R4 MOV R4,A MOV OUTPUT,A RET clear: MOV A,#00 MOV B,#00 MOV R1,#00 MOV R2,#00 MOV R3,#00 MOV R4,#00 MOV R5,#00 MOV R6,#00 MOV R7,#00 MOV KEYDATA,#00
26 mov mov clr RET Bin2Dec: mov div mov mov ret
puluhan,#0 satuan,#0 c b,#10d ab puluhan,a satuan,b
Keypad4x4: MOV keybounc,#1 ;keybounc = (default)50 MOV keyport,#0FFh ;keyport=P2= FF CLR col4 ;col4 = 0 keyC: jb row2,keyclr DJNZ keybounc, keyc call delaytombol call mundur ret keyCLR: jb row1,keyENT ; Key CLR DJNZ keybounc,keyCLR call delaytombol mov output,#00h CALL clear RET keyENT: setb col4 CLR col3 jb row4,key3 DJNZ keybounc,keyENT call delaytombol call tunggu RET key3: jb row1,key6 DJNZ keybounc,key3 ; Key ENT call delaytombol MOV keydata,#03D ;Data Output INC R7 RET key6: jb row2,key9 DJNZ keybounc,key6 ; Key 9 call delaytombol MOV keydata,#06D ;Data Output inc R7 RET key9: jb row3,key0 DJNZ keybounc,key9 ; Key 6 call delaytombol MOV keydata,#09D ;Data Output inc R7 RET key0: setb col3
27 CLR col2 jb row4,key2 DJNZ keybounc,key0 call delaytombol MOV keydata,#00D ;Data Output inc R7 RET key2: jb row1,key5 DJNZ keybounc,key2 call delaytombol MOV keydata,#02D ;Data Output inc R7 RET key5: jb row2,key8 DJNZ keybounc,key5 call delaytombol MOV keydata,#05D ;Data Output inc R7 RET key8: jb row3,keyCAN DJNZ keybounc,key8 call delaytombol MOV keydata,#08D ; Data Output inc R7 RET keyCAN: setb col2 CLR col1 jb row4,key1 DJNZ keybounc,keyCAN call delaytombol RET key1: jb row1,key4 DJNZ keybounc,key1 MOV keydata,#01D ;Data Output call delaytombol inc R7 RET key4: jb row2,key7 DJNZ keybounc,key4 call delaytombol MOV keydata,#04D ;Data Output inc R7 RET key7: jb row3,Nokey DJNZ keybounc,key7 call delaytombol MOV keydata,#07D ;Data Output inc R7 RET
28 Nokey: RET Display2SevenSegmen: mov A,puluhan mov DPTR, #data7segmen movc A, @A+DPTR mov P0,A ; clr P3.5 ;untuk kit praktikum: clr P3.5 setb P3.6 ;untuk kit praktikum: Setb P3.6 SETB P3.7 ;untuk kit praktikum: Setb P3.7 call delay;delaydisplay ; mov A,satuan mov DPTR, #data7segmen movc A, @A+DPTR mov P0,A ; setb P3.5 ;untuk kit praktikum: Setb P3.5 setb P3.6 ;untuk kit praktikum: Setb P3.6 setb P3.7 ;untuk kit praktikum: Setb P3.7 call delay;delaydisplay ret delaydisplay: MOV R1, MOV R0, NOP DJNZ R0, DJNZ R1, NOP NOP NOP ret delaytombol: MOV R2, MOV R1, MOV R0, NOP DJNZ R0, DJNZ R1, DJNZ R2, ret
#002h #0F7h $ $-5
#004h #0FAh #050h $ $-5 $-9
delay_60s: ; START: Wait loop, time: 60 s ; Clock: 12000.0 kHz (12 / MC) ; Used registers: R0, R1, R2, R3, R4 MOV R4, #02Ah MOV R3, #083h MOV R2, #006h MOV R1, #0B5h MOV R0, #003h NOP DJNZ R0, $ DJNZ R1, $-5 DJNZ R2, $-9
29 DJNZ DJNZ MOV MOV MOV NOP DJNZ DJNZ DJNZ MOV MOV MOV NOP DJNZ DJNZ DJNZ MOV DJNZ ; Rest: 0 ret
R3, R4, R2, R1, R0,
$-13 $-17 #002h #0A0h #0A1h
R0, R1, R2, R2, R1, R0,
$ $-5 $-9 #008h #0FCh #005h
R0, R1, R2, R0, R0,
$ $-5 $-9 #011h $
delay_1s: ; START: Wait loop, time: 1 s ; Clock: 12000.0 kHz (12 / MC) ; Used registers: R0, R1, R2, R3 MOV R3, #003h MOV R2, #0D2h MOV R1, #024h MOV R0, #014h NOP DJNZ R0, $ DJNZ R1, $-5 DJNZ R2, $-9 DJNZ R3, $-13 MOV R0, #059h DJNZ R0, $ NOP ; Rest: 0 ret delay_500ms: ; START: Wait loop, time: 500 ms ; Clock: 12000.0 kHz (12 / MC) ; Used registers: R0, R1, R2 MOV R2, #004h MOV R1, #0FAh MOV R0, #0F8h NOP DJNZ R0, $ DJNZ R1, $-5 DJNZ R2, $-9 ; Rest: -13.0 us ret data7segmen: db 11000000b,11111001b,10100100b,10110000b,10011001b db 10010010b,10000010b,11111000b,10000000b,10010000b end
30
RIWAYAT HIDUP Penulis dilahirkan di Padangsidimpuan pada tanggal 8 Maret 1989 dari almarhum ibu Ernata boru Siregar dan bapak Mangapul Adil Situmorang. Penulis merupakan anak ke-4 dari 5 bersaudara. Pada tahun 2007, penulis lulus dari Sekolah Menengah Atas (SMA) Negeri 4 Padangsidimpuan dan pada tahun yang sama diterima di Diploma Universitas Sumatera Utara (USU) Keahlian Ilmu Komputer. Pada tahun 2010 penulis lulus dari Diploma USU dan melanjutkan pendidikan di Program Alih Jenis Ilmu Komputer, Fakultas Matematika dan Ilmu Pengetahuan Alam, IPB.