Kamis, 01 Mei 2008

Assembler MCS51

Denger (eh baca) kata Assembler lgs kebayang bahasa mesin, sulit, ribet, panjang, n capee deeee.....
Menurut anda gmana? Sama..?
Klo wa, slama g aritmetika n g pake metode aneh" si g masalah.

wa pake AT89S51 jd assemblernya yg MCS51 aj ya. Untuk Robot yg kmaren (Robot nyentuh dinding trus balik ato belok). Cukup beberapa perintah saja yg di gunakan n beberapa register aj klo mo blajar plajari bukunya, byk kok. (jgn fotokopi bukunya ya, kasian. jadi inget masa kuliah --> mang ud lulus....?)

Instruksi set-nya ini neh.......... dan ini jg...............

Listingnya begini :
;-----------------------------------------------------------------
;Listing Robot Pendeteksi dinding bY : PayZ
; www.RoboticFobia.Blogspot.com
;-----------------------------------------------------------------
;PORT2 driver motor DC
;PORT0.0 Limit switch kiri
;PORT0.1 Limit switch kanan

$MOD51

ORG 00H
;inisialisasi awal
BEGIN: MOV P2,#00H ;Port2 0x00 (motor stop)
MOV P0,#03H ;Port0.0 dan Port0.1 logika 1 (rendah aktif)
;bisa juga MOV P0,#00000011B (dalam biner)
ACALL TUNDA_1S ;tunda dulu

TESTDRIVE: ACALL MAJU ;robot maju 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL MUNDUR ;robot mundur 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL B_KANAN ;robot belok kanan 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL B_KIRI ;robot belok kiri 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL ROTASI ;robot rotasi 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
MOV P2,#00H ;test drive selesai
ACALL TUNDA_1S ;diam 1 detik (siap" neh)

MAIN: ACALL MAJU ;default robot maju
ACALL TUNDA ;tunda 100ms
JNB P0.0,S_KIRI ;cek sensor kiri
JNB P0.1,S_KANAN ;cek sensor kanan
SJMP MAIN ;looping terus menerus

S_KIRI: JNB P0.1,S_DUA ;cek dlu kanan jg tersentuh atau tdk?
ACALL B_KANAN ;sensor kiri tersentuh belok kanan
ACALL TUNDA_1S
SJMP MAIN

S_KANAN: ACALL B_KIRI ;sensor kanan tersentuh belok kiri
ACALL TUNDA_1S
SJMP MAIN

S_DUA: ACALL MUNDUR ;sensor kiri n kanan tersentuh robot mundur
ACALL TUNDA_1S
ACALL ROTASI ;setelah mundur robot rotasi
ACALL TUNDA_1S
ACALL TUNDA_1S
SJMP MAIN ;ke program utama

MAJU: MOV P2,#00110011 ;konfigurainya coba" aja
RET
MUNDUR: MOV P2,#11110000
RET
B_KANAN: MOV P2,#10110001
RET
B_KIRI: MOV P2,#01110010
RET

;-----------------------------------
; TUNDA
;-----------------------------------
TUNDA_1S: ACALL TUNDA_05S ; tunda selama 1 S
ACALL TUNDA_05S
RET

TUNDA_05S: MOV A,#100 ; tunda selama 0,5 S
TUNDA_LOOP: LCALL TUNDA_MODE
DJNZ ACC,TUNDA_LOOP
RET

TUNDA: MOV A,#20 ; tunda selama 100 mS
TUNDAX: LCALL TUNDA_MODE
DJNZ ACC,TUNDAX
RET

TUNDA_MODE: PUSH TMOD ; tunda selama 5 mS
MOV TMOD,#21H
MOV TH0,#0EDH
MOV TL0,#0FFH
SETB TR0
TUNDA_5MS: JBC TF0,TUNDA_OK
SJMP TUNDA_5MS
TUNDA_OK: CLR TR0
POP TMOD
RET

END


Biar enak liatnya klik aj gambar ini.....

Tidak ada komentar:

The Mikrokers