Selasa, 12 Juni 2012

Simulasi Proteus Kontrol Traffic Light dengan MCS-51



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.

5 komentar:

  1. Mantaps gan, nice artikel.. ikut berkontrobusi gan, silakan, bagi yang ingin tambahan referensi mampir juga dimari

    http://gatewawan.blogspot.com/2014/08/pemrograman-traffic-light-menggunakan-bhs-assembly-dan-mesin.html

    thanks.

    BalasHapus
  2. Gan, jadi harus di press dulu button nya waktu Run (F9) baru bisa berjalan lampu merahnya ?

    BalasHapus
  3. Gan, alat ini bisa bekerja kan? soalnya untuk tugas praktikum microcontroller saya . trims

    BalasHapus
  4. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  5. Thanks 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