Sob untuk postingan kali ini kita akan sedikit belajar
bahasa assembly….. compiler yang saya gunakan adalah MIDE-51 (download saja di
internet.. buanyak kog…. Hehehe.. maaf ya Sob, g kasih link downloadnya).
Langsung saja ke TKP…….
* Program Aplikasi Kontrol
Traffic Light Menggunakan MCS51
Gambar Rangkaian
(Skema Proteus) :
Program (Menggunakan
Software MIDE-51): (download saja di internet)
org 0h
ljmp awal
org 3h
eksternal0:
mov P2,#10110110b
mov P0,#10111111b
jnb p1.0,timurhijau
jnb p1.1,selatanhijau
jnb p1.2,barathijau
jnb p1.3,utarahijau
RETI
timurhijau:
mov P2,#11110110B
mov p0,#00111111b
acall ulang
ljmp eksternal0
selatanhijau:
mov P2,#10011110B
mov p0,#10111111b
acall ulang
ljmp eksternal0
barathijau:
mov P2,#10110011B
mov p0,#10111111b
acall ulang
ljmp eksternal0
utarahijau:
mov IE,#81h
SETB IE.0
mov P2,#10110110B
mov p0,#11101111b
acall ulang
ljmp eksternal0
org 60h
awal:
jnb p3.0,mulai
jb p3.0,berhenti
sjmp awal
mulai:
mov IE,#81h
SETB IE.0
mov P2,#10110011B
mov p0,#10111111b
acall ulang
acall ulang
mov P2,#10110101B
mov p0,#10111111b
acall ulang
mov P2,#10011110B
mov p0,#10111111b
acall ulang
acall ulang
mov P2,#10101110B
mov p0,#10111111b
acall ulang
mov P2,#11110110B
mov p0,#00111111b
acall ulang
acall ulang
mov P2,#01110110B
mov p0,#10111111b
acall ulang
mov P2,#10110110B
mov p0,#11101111b
acall ulang
acall ulang
mov P2,#10110110B
mov p0,#11011111b
acall ulang
ljmp awal
berhenti:
mov P2,#11111111B
mov p0,#11111111b
sjmp awal
ulang:
mov r0,#5h
ulang1:
mov r1,#0ffh
ulang2:
mov r2,#0
djnz r2,$
djnz r1,ulang2
djnz r0,ulang1
ret
end
Penjelasan program
dan cara kerja :
Program
diatas merupakan suatu program simulasi kontrol perempatan traffic light. Perintah “ORG 0H” merupakan perintah agar instruksi dituliskan mulai alamat 0H.
Kemudian lompat ke program awal menggunakan perintah “LJMP AWAL” di alamat 60H, hal ini disebabkan program akan
memulai menjalankan instruksi di lokasi 0H
setelah dihidupkan RESET. Dalam
program awal tersebut terdapat 2 buah instruksi, yaitu “jnb P3.0,mulai” dan “jb
P3.0, berhenti”. Perintah jnb maksudnya adalah lompat jika bit tidak di set
(bit=0) sedangkan jb , yaitu kebalikan dari jnb sehingga program akan lompat
jika bit di set (bit=1). Dari perintah di atas maka ketika jnb P3.0, program
akan melompat ke sub rutin “mulai” dan
jika jb P3.0 maka program akan melompat ke sub rutin “berhenti”.
Dalam sub rutin “mulai”, program
mula-mula mengaktifkan interupsi eksternal 0 menggunakan perintah “MOV IE,#81h”, yaitu dengan mengisi
register IE dengan 10000001B(81h) pada IE.0.
Selama tidak ada Interupsi maka program akan menjalankan perintah-perintah yang
ada di luar Interupsi, yaitu perintah “MOV P2,#10110011B” dan
perintah-perintah berikutnya yang merupakan perintah untuk
menghidupkan led-led pada masing-masing port.Untuk mengatur nyala dari setiap led digunakan perintah
delay dengan label “ULANG”. Dalam
sub rutin delay tersebut terditi dari 3 label dimaksudkan untuk membuat waktu
tundaan yang lebih lama. Berikut penjelasan dari Sub Rutin Ulang:
ulang:
mov r0,#5h
ulang1:
mov r1,#0ffh
ulang2:
mov r2,#0
djnz r2,$
djnz r1,ulang2
djnz r0,ulang1
ret
Dalam label Ulang
perintah “MOV R0,#5h” merupakan
perintah untuk mengisi register R0 dengan 5. Kemudian dalam label Ulang1
perintah “MOV R1,#0ffh” sama seperti
perintah diatasnya yaitu mengisi register R1 dengan 255 (ffh). Sedangkan register
R2 diisi dengan 0. Untuk perintah “djnz”
merupakan perintah yang memiliki arti kurangi 1 dan lompat jika tidak 0. Jadi
dari salah satu perintah djnz diatas sebagai contoh “djnz R1,ulang2” maksudnya adalah nilai R1 dikurangi 1 (R1=R1-1),
dan jika hasil dari R1 tersebut belum 0 maka program akan melompat ke label “Ulang 2” dan mengulang instruksi yang
ada di label “Ulang 2” tersebut.
Dari alur program
tersebut maka program selanjutnya akan menunggu hingga terjadinya interupsi dan
melakukan tindakan sesuai dengan perintah yang ada dalam interupsi. Jika tidak
ada Interupsi maka program akan menjalankan perintah –perintah dalam label “Mulai” tersebut secara terus menerus selama
P3.0 diberi logika 1.
Ketika Interupsi
diaktifkan (P3.0=1) maka seluruh kegiatan diluar perintah interupsi akan
berhenti dan program akan beralih ke perintah-perintah yang ada dalam
interupsi. Berikut merupakan sub rutin dari interupsi:
eksternal0:
mov P2,#10110110b
mov P0,#10111111b
jnb p1.0,timurhijau
jnb p1.1,selatanhijau
jnb p1.2,barathijau
jnb p1.3,utarahijau
RETI
Dalam sub rutin eksternal0 ini digunakan untuk perintah push button yang
berfungsi menyalakan 1 led hijau saja dari 12 led yang membentuk perempatan
jalan. Sedangkan 3 bagian yang lain menyala merah. Program dalam Interupsi ini
akan dijalankan ketika Interupsi Eksternal dalam kondisi aktif (IE.0=0).
Sedangkan jika IE.0=0 maka program akan keluar dari sub rutin eksternal0
(Interupsi) dan menjalankan sub rutin “awal”
kembali.
Seperti pada penjelasan sebelumnya dalam sub rutin “awal” terdapat 2 buah interupsi yang memanfaatkan P3.0. Jika P3.0
diberi logika 1 maka program akan melompat dan menjalankan perintah-perintah
yang ada dalam sub rutin “mulai”.
Sedangkan jika P3.0 diberi logika 0 maka program akan melompat ke sub rutin
“berhenti” dimana dalam sub rutin tersebut merupakan perintah untuk mematikan
semua led.
Untuk mensimulasikan sistem
kontrol traffic light tersebut digunakan
software Proteus. Komponen yang digunakan antara lain yaitu mikrokontroler
AT89C51, 2 buah switch, 4 buah push-button,
dan 12 buah led. Switch 1 dan 2 dihubungkan ke P3.0 dan P3.2. P3.0 digunakan
sebagai kontrol on/off dari system sedangkan P3.2 sebagai pemicu interupsi. 4
buah push button tersebut masing-masing terhubung ke P1.0, P1.1, P1.2, dan
P1.3. Ke empat push button tersebut digunakan ketika Interupsi aktif, yaitu
untuk mengatur nyala led hijau pada simulasi perempatan traffic light. Output
dari simulasi traffic light ini berupa 12 buah led yang terhubung pada P2 dan
P0.
Prinsip kerja dari rangkaian ini
yaitu traffic light akan bekerja ketika
switch pada P3.0 ditekan. Kemudian jika switch interupsi pada P3.2 ditekan maka
semua nyala led pada system traffic light akan menyala merah sebelum dilakukan
penekanan pada salah satu push button yang terhubung ke P1. Dari keempat buah
push button tersebut jika P1.0 ditekan maka pada salah satu bagian traffic
light akan menyala hijau, dalam simulasi system ini dimisalkan bagian timur. Jika P1.1 ditekan maka bagian selatan traffic
light yang akan menyala hijau. Jika P1.2 ditekan maka bagian barat traffic
light yang akan menyala hijau. Sedangkan jika P1.3 yang ditekan maka bagian
utara traffic light yang akan menyala hijau.
Mantaps gan, nice artikel.. ikut berkontrobusi gan, silakan, bagi yang ingin tambahan referensi mampir juga dimari
BalasHapushttp://gatewawan.blogspot.com/2014/08/pemrograman-traffic-light-menggunakan-bhs-assembly-dan-mesin.html
thanks.
Gan, jadi harus di press dulu button nya waktu Run (F9) baru bisa berjalan lampu merahnya ?
BalasHapusGan, alat ini bisa bekerja kan? soalnya untuk tugas praktikum microcontroller saya . trims
BalasHapusKomentar ini telah dihapus oleh pengarang.
BalasHapusThanks kak tutorialnya, sangat membantu sekali. Udah aku coba loh, dan berhasil, sesuai tutorial diatas :) jadi, simulasi lampu2 ini kira-kira kalo dalam kehidupan sehari-hari bisa digunakan dimana kak? masih kurang ngerti... trima kasih...
BalasHapus