;-----------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
          [Senin, Maret 16, 2009
 | 
2
komentar
]
    

2 komentar
bro...
program apa tuh?
kok pake assembly..
pake c lah..
ntr tak coba
eska
kui program Robot Avoiderku mbiyen bro, ..
lha aku drung iso Bahasa C jawe, isone bahasa jowo, inggris kro indonesaia, wkwkwkwkwkwwk
:))
Posting Komentar