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

0 Komentar