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
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