| 2 komentar ]

;-----------bagian deklarasi----------------------
; bagian ini berfunggsi untuk mengganti bilangan
; dengan nama yang lebih mudah diingat
kiri equ 8
kanan equ 9
depan equ 10
kiri45 equ 11
kanan45 equ 12
kiri135 equ 13
kanan135 equ 14
waktu equ 0
waktu2 equ 0
isi equ 255
;-----------PROGRAM UTAMA-------------------------
jmp start
;-----------subrutines----------------------------
org 0003h
mov p2,#11111111b ;henti
acall procedure_tengok ;simpan data halangan
acall check ;check halangan
reti
;---------------delays--------------------------------
delay_belok:
mov r5,waktu
l1: mov r6,#isi
l2: mov r7,#isi
l3: djnz r7,l3
djnz r6,l2
djnz r5,l1
ret
delay_50ms:
mov th0,#01000110b ;delay 50ms
setb tr0
jnb tf0,$ ;tunggu limpahan timer flag 0
clr tf0 ;clearkan timer flag
clr tr0 ;matikan timer (timer run diclear)
ret
henti:
mov th0,#00 ;delay beberapa saat
setb tr0
jnb tf0,$
clr tf0
clr tr0
ret
;-----------------subrutin belok-------------------------
procedure_belok_kanan:
mov p2,#11111010b ;motor kiri maju, motor kanan mundur
acall delay_belok
ret
procedure_belok_kiri:
mov p2,#11110101b ;motor kiri mundur, motor kanan maju
acall delay_belok
ret
;-----------subrutin tengok-----------------
procedure_tengok_kiri_45:
mov r1,#7
mov p2,#10001111b
acall delay_50ms
mov p2,#01001111b
acall delay_50ms
mov p2,#00101111b
acall delay_50ms
mov p2,#00011111b
acall delay_50ms
djnz r1,$
ret
procedure_tengok_kanan_45:
mov r1,#7
mov P2,#00011111B
acall delay_50ms
mov P2,#00101111B
acall delay_50ms
mov P2,#01001111B
acall delay_50ms
mov P2,#10001111B
acall delay_50ms
djnz R1,$
ret
procedure_tengok:
acall procedure_tengok_kiri_45
acall henti
mov kiri45,p0
acall procedure_tengok_kiri_45
acall henti
mov kiri,p0
acall procedure_tengok_kiri_45
acall henti
mov kiri135,p0
acall procedure_tengok_kanan_45
acall procedure_tengok_kanan_45
acall procedure_tengok_kanan_45
acall procedure_tengok_kanan_45
acall henti
mov kanan45,p0
acall procedure_tengok_kanan_45
acall henti
mov kanan,p0
acall procedure_tengok_kanan_45
acall henti
mov kanan135,p0
acall procedure_tengok_kanan_45
acall procedure_tengok_kanan_45
acall procedure_tengok_kanan_45
ret
;------------------------subrutin check------------------------------------
check:
jb p0.0,limit_kiri ;check limit switch kanan
acall procedure_belok_kiri
sjmp akhir
limit_kiri:
jb p0.1,depan1 ;check limit switch kiri
acall procedure_belok_kanan
sjmp akhir
depan1: mov a,depan ;check halangan depan
jnb acc.2,kanan1
sjmp akhir
kanan1: mov a,kanan45 ;check halangan kanan 45 derajat
jnb acc.2,kanan2
acall procedure_belok_kiri
sjmp akhir
kanan2: mov a,kanan
jnb acc.2,kanan3
acall procedure_belok_kiri
sjmp akhir
kanan3: mov a,kanan135
jnb acc.2,kiri1
kiri1: mov a,kiri45 ;check halangan kiri
jnb acc.2,kiri2
acall procedure_belok_kanan
sjmp akhir
kiri2: mov a,kiri
jnb acc.2,kiri3
acall procedure_belok_kanan
sjmp akhir
kiri3: mov a,kiri135
jnb acc.2,putar
acall procedure_belok_kanan
sjmp akhir
putar: mov r5,waktu2
call procedure_belok_kanan
akhir: ret
;-----------------------main program---------------------------
start:
Inisialisasi:
mov sp,#0020h
mov tmod,#00000001b ;timer0 mode 1
mov ie,#00 ;inisialisasi interupsi
setb ex0 ;enable interupsi external 0
setb ea ;aktifkan interupsi
procedure_maju:
mov p1,#11111111b ;enable H (cepat)
mov p2,#11111001b ;motor1 maju motor2 maju
sjmp procedure_maju
;---------------------------akhir---------------------------------------
end

2 komentar

Anonim mengatakan... @ 18 Maret 2009 pukul 10.24

bro...
program apa tuh?
kok pake assembly..
pake c lah..
ntr tak coba

eska

Unknown mengatakan... @ 25 Maret 2009 pukul 18.39

kui program Robot Avoiderku mbiyen bro, ..

lha aku drung iso Bahasa C jawe, isone bahasa jowo, inggris kro indonesaia, wkwkwkwkwkwwk

:))

Posting Komentar