Lampiran


Lampiran 1


Lampiran 2


Lampiran 3

List Program Alat Penghitung Random


$mod51
;NAMA = JOKO SUSANTO
;JUDUL TUGAS AKHIR :
;----- PERANCANGAN SISTEM PENGHITUNG RANDOM 10% TERHADAP BARANG BAWAAN -----
;----- YANG DIPERIKSA DENGAN MESIN X- RAY UNTUK PEMERIKSAAN -----
;----- SECARA MANUAL GUNA MEMATUHI REGULASI KEAMANAN PENERBANGAN -----


seg_out equ p0 ;data segmen --> tabel (tbl)
latch1 equ p2.0 ;scan satuan
latch2 equ p2.1 ;scan puluhan
mtr_out equ p2 ;output ke motor stepper


sensing bit p1.0 ;input sensor
s_bagasi bit p1.1 ;switch bagasi
led_1 bit p1.2 ;output led 1
led_2 bit p1.3 ;output led 2
led_3 bit p1.4 ;output led 3


buzzer bit p3.7 ;output alarm


limit equ 10 ; batas counter


f_0 equ 20h.0 ;flag bit


DSEG
org 30h
tm0: ds 1
temp: ds 1
tmp_knn: ds 4
tmp_krr: ds 4


sv_stp: ds 2
tmp_dl: ds 2
v_dl1: DS 1
v_dl2: DS 1


SND: DS 1
TT_1: DS 2
SND1: DS 1
SND2: DS 1
SND3: DS 1


CSEG
ORG 0H
JMP START


ORG 03H
reti


ORG 0BH
PUSH ACC
PUSH PSW
MOV TL0,SND1
MOV TH0,SND2
CPL buzzer
POP PSW
POP ACC
RETI


start: jb s_bagasi,$
jnb sensing,$


;== inisialisasi timer 0 , mode 1 ==
;== deklarasi isi tabel suara beep ==
MOV TMOD,#11H
MOV IE,#8aH


MOV TT_1, #HIGH nada
MOV TT_1+1,#LOW nada
MOV SND,#00H
;<<<<<<<<<<<<<>>>>>>>>>>>>>


setb buzzer
mov seg_out,#0
mov temp,#0h


mov dptr,#t_knn2
mov sv_stp+0,dpl
mov sv_stp+1,dph
mov tmp_dl, #0
mov tmp_dl+1,#0
mov v_dl1,#100
mov v_dl2,#5


loop_sens:


mov a,temp
call displaykan ; ==>> display counter


;call motor_stepper ; ==>> putar motor


;call bandingkan ; ==>> nilai counter = limit?


setb sensing ; ==>> cek sensor counting = 0 ?
jnb sensing,up_angka ; Ya = 0 >> lompat ke label up_angka


jmp loop_sens


;-------------------------------
;===== subrutin counter up =====
;-------------------------------
up_angka:
INC temp ; ==>> tambah nilai counter


wait: ;call motor_stepper
mov a,temp
call displaykan


call bandingkan ; ==>> nilai counter = limit?


jnb sensing,wait
jmp loop_sens


;-----------------------------------
;===== subrutin display segmen =====
;-----------------------------------
;tabel data segmen (dptr = data pointer)
tbl: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H


dly_segmen:
push b
mov b,#10
dly20ms:
push b
mov b,#2
djnz b,$
call motor_stepper
pop b
djnz b,dly20ms
pop b
ret


displaykan:
mov b,#10 ; b = 10
div ab ; (a) dibagi (b) = hasil= b , sisa bagi= a
mov dptr,#tbl ; ambil tabel
movc a,@a+dptr ; salin isi dptr ke acc
;cpl a ; common katoda
mov seg_out,a ; keluarkan isi acc ke port
clr latch1 ; nyalakan bit scan satuan
call dly_segmen ; tunda nyala segmen
setb latch1 ; matikan bit scan satuan
mov seg_out,#0ffh ; matikan segmen utk menghindari framing (bayangan)


clr a ; bersihkan acc
mov a,b ; salin isi b ke acc
mov dptr,#tbl ; ambil tabel
movc a,@a+dptr ; salin isi dptr ke acc
;cpl a ; common katoda
mov seg_out,a ; keluarkan isi acc ke port
clr latch2 ; nyalakan bit scan puluhan
call dly_segmen ; tunda nyala segmen
setb latch2 ; matikan bit scan puluhan
mov seg_out,#0ffh ; matikan segmen utk menghindari framing (bayangan)
ret


;----------------------------------
;===== subrutin putar stepper =====
;----------------------------------
;-------------------
; tabel putaran motor stepper (dptr = data pointer)
;-------------------
t_knn: db 1000b,0100b,0010b,0001b,255 ;putar motor ke kanan half step
t_knn2: db 1000b,1100b,0100b,0110b,0010b,0011b,0001b,1001b,255 ;putar motor ke kanan full step
t_krr: db 0001b,0010b,0100b,1000b,255 ;putar motor ke kiri half step
t_krr2: db 0001b,0011b,0010b,0110b,0100b,1100b,1000b,1001b,255 ;putar motor ke kiri full step


motor_stepper:
;mov dptr,#t_knn2
mov dpl,sv_stp+0 ;ambil data pointer low
mov dph,sv_stp+1 ;ambil data pointer high
mtr_stp1:
clr a
movc a,@a+dptr
cjne a,#255,nxt_step
mov dptr,#t_knn2
mov sv_stp+0,dpl
mov sv_stp+1,dph
mov tmp_dl+0,#0
mov tmp_dl+1,#0
ret
nxt_step:
call delay_stepper
ret


delay_stepper:
swap a
anl a,#0f3h ;ambil high nibble (= 4 bit bagian atas)
mov mtr_out,a
inc tmp_dl
mov a,tmp_dl
mov b,v_dl1
cjne a,b,ext_dl ;#35
mov tmp_dl,#0
inc tmp_dl+1
mov a,tmp_dl+1
mov b,v_dl2
cjne a,b,ext_dl ;#2
mov tmp_dl+1,#0
inc dptr ;naikkan isi data pointer
mov sv_stp+0,dpl ;simpan data pointer low
mov sv_stp+1,dph ;simpan data pointer high
ext_dl:
ret


;--------------------------------------
;===== subrutin cek limit counter =====
;--------------------------------------
bandingkan:
mov a,temp ; batas counter 0-10
mov b,#limit
cjne a,b,rst_angka


mov tmp_dl+0,#0
mov tmp_dl+1,#0
mov v_dl1,#100
mov v_dl2,#2
wait_2_cek:
call alarm_on
INC SND
mov v_dl1,#100
mov v_dl2,#5


mov a,temp
call displaykan
jb s_bagasi,wait_2_cek


clr tr0
setb buzzer
mov seg_out,#0
mov temp,#0h
mov a,temp
call displaykan
jmp start
rst_angka:
ret


;--------------------------
;===== subrutin alarm =====
;--------------------------
alarm_on:
MOV A,SND
MOV DPH,TT_1
MOV DPL,TT_1+1
MOVC A,@A+DPTR
MOV R2,A
JZ STOP
ANL A,#0FH
MOV R1,A
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
JMP W1
;-------------------
SING: mov tmp_dl+0,#0
mov tmp_dl+1,#0


DEC A
MOV SND3,A
RL A
MOV DPTR,#not_balok
MOVC A,@A+DPTR
MOV TH0,A
MOV SND2,A
MOV A,SND3
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV SND1,A
SETB TR0
W1: LCALL DELAY30
ret
;-------------------
STOP: CLR TR0
RET


DELAY30:
SETB latch1
SETB latch2


mov tmp_dl+0,#0
mov tmp_dl+1,#0
mov v_dl1,#100
mov v_dl2,#2

MOV R7,#2
W2: MOV R4,#125
W3: MOV R3,#124


call motor_stepper


DJNZ R3,$
DJNZ R4,W3
DJNZ R7,W2
DJNZ R1,DELAY30
RET


not_balok:
DW 64580,64684,64777,64820
DW 64898,64968,65030,64260
DW 64400,64524,65058,63835,64021


nada: DB 0b2H,01H,0b1H,01H,0b3H,03H
DB 0b2H,01H,0b1H,01H,0b3H,0aH
DB 00


end


Lampiran 4


Lampiran 5

Posting Komentar

0 Komentar