Selasa, 06 Juni 2017

PEMROGRAMAN / KODINGAN LIGHT DETECTOR ROBOT BERBASIS MIKROKONTROLLER

Light Detector Robot 

Robot ini akan menuju sumber cahaya yang terdeteksi oleh LDR. LDR diletakkan masing-masing pada bagian depan dan belakang. Saat ada cahaya yang masuk ke LDR depan, maka robot akan jalan ke depan. Sebaliknya saat cahaya masuk ke LDR belakang maka robot akan jalan mundur ke belakang. Jika kedua LDR terkena cahaya maka robot akan diam.

Listing Program

$mod51

org 100h

mov p0,#0ffh

mov p1,#0fch

mov p2,#0f0h

mov p3,#0ffh

;

mulai: 

    mov a,p1

    cjne a,#11111111b,start

    sjmp diam

start:

     jb p1.0, maju

     jb p1.1, mundur

     jnb p1.0,diam

     jnb p1.1,diam

     sjmp mulai

maju:

     mov p2,#11111010b

    sjmp mulai

mundur:

     mov p2,#11110101b

    sjmp mulai

diam:

     mov p2,#11110000b

     sjmp mulai

end

Keterangan Program

$mod51
Merupakan sebuah perintah deklarasi atau sebagai perintah inisialisasi pada mikrokontroler seri 51 yang berguna sebagai referensi alamat memori untuk port, register, akumulator dan lainnya.

Org 100h
Perintah masuk ke alamat 100h. Program yang ditulis masuk ke alamat tersebut. Perintah ini sama dengan A100 pada pemrograman BGC 8088.

mov p0,#0ffh // menyalin (memberi) nilai #0ffh ke P0.
mov p1,#0fch // menyalin (memberi) nilai #0fch ke P1.

mov p2,#0f0h // menyalin (memberi) nilai #0f0h ke P2.

mov p3,#0ffh // menyalin (memberi) nilai #0ffh ke P3.

Menset suatu port guna inisialisasi suatu port.

mulai: 
mov a,p1 // menyalin (memasukkan) nilai P1 ke Akumulator “a”.

cjne a,#11111111b,start // lompat ke label diam jika nilai “a” = 11111111b jika tidak sama, maka lompat ke label start.

sjmp diam  // lompat ke label diam.

            Label mulai dimaksudkan untuk mengetahui proses yang dilakukan koding dibawahnya. Pertama nilai pada p1 yaitu 0fch dimasukkan ke a, lalu program membandingkan nilai a dengan 11111111b (ffh) menggunakan perintah cjne (Compare and Jump if Not Equal), jika nilai sama maka akan melanjutkan ke label start dan bila tidak akan loncat ke label diam.

start:
jb p1.0, maju // jika P1.0 mendapatkan logika 1 maka lompat ke label maju.

jb p1.1, mundur // jika P1.1 mendapatkan logika 1 maka lompat ke label mundur.

jnb p1.0,diam // jika P1.0 mendapatkan logika 0 maka lompat ke label diam.

jnb p1.1,diam // jika P1.1 mendapatkan logika 0 maka lompat ke label diam.

sjmp mulai // lompat ke label mulai.

Label start ini berisi koding jb (Jump if Bit Set) yaitu melakukan loncatan bila terdapat bit set pada port (Logika 1). Bila terdapat bit set pada p1.0 maka program akan melompat ke label maju. Bila terdapat bit set pada p1.1 maka program akan melompat ke label mundur.

Selain jb, terdapat jnb (Jump if Not Bit Set) yaitu melakukan lompatan jika tidak ada bit set pada port (Logika 0). Bila tidak terdapat bit set pada p1.0 maka program akan melompat ke label diam. Bila tidak terdapat bit set pada p1.1 maka program akan melompat ke label diam. Bila semua kondisi tidak terpenuhi maka mengulang ke label mulai.

maju:

mov p2,#11111010b
 sjmp mulai

Label maju ini berisi koding untuk memasukkan nilai 11111010b (fah) ke p2, bila nilai sesuai maka roda akan bergerak maju setelah itu kembali ke label mulai.

mundur:
mov p2,#11110101b

sjmp mulai

            Label mundur ini berisi koding untuk memasukkan nilai 11110101b (f5h) ke p2, bila nilai sesuai maka roda akan bergerak mundur setelah itu kembali ke label mulai.

diam:
mov p2,#11110000b

sjmp mulai

            Label diam ini berisi koding untuk memasukkan nilai 11110000b (f0h) ke p2, bila nilai sesuai maka roda akan diam setelah itu kembali ke label mulai.


end

Label end berfungsi untuk mengakhiri program.

Gambar Rangkaian Light Detector Robot