📄 waterm2.asm
字号:
main:
mov sp,#r_sp
cpl watchdog
clr re184
lcall iniall
cpl watchdog
;***********************
;clear the sign of valibale
;***********************
clr f_plusa
clr f_plusb
clr lastplusa
clr lastplusb
clr f_iic
clr f_zh
clr f_com
clr f_master
clr f_status
clr f_sal
clr f_id
clr f_60ms
clr f_card
clr f_card0
clr f_updata
clr f_kguan0
clr f_kguan1
clr f_kguan2
clr f_erra
clr f_money
clr f_time
mov rimod,#0
mov rimod1,#0
mov rimod2,#0
mov rcount,#0
mov kgcount,#0
mov salecount,#1
lcall beep_1
lcall read_address
lcall disp_name
lcall closevalue
;==========================
mov dptr,#fm_master
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov master,icdata
;==========================
mov dptr,#fm_status
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov status,icdata
lcall read_sys
setb ea
;==========================
mmain: cpl watchdog
;===========================
;判断是否有脱机消费数据
;===========================
jnb f_com,upstatus
jb f_sal,upstatus
lcall readrecord
;==========================
;系统状态更新
;==========================
upstatus: jnb f_status,upmaster
clr f_status
mov dptr,#fm_status
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,status
lcall irwrbyte
upmaster: jnb f_master,insertcard
clr f_master
mov dptr,#fm_master
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,master
mov icdata,master
lcall irwrbyte
;===========================
;靠卡消费部分
;===========================
insertcard: jb f_id,expence
lcall disp_name
ljmp mmain
expence: clr f_id
jb f_sal,mmain
clr f_id
lcall openvalue
jnb f_com,lunconexpence
setb f_zh
nop
nop
nop
mov Request_Information_Count,#50
wait: jnb f_zh,del_zh
cpl watchdog
mov a,Request_Information_Count
jnz wait
jb f_zh,lfail_zh
ljmp del_zh
lunconexpence:
ljmp unconexpence
lfail_zh: ljmp fail_zh
;================================
;申请到了帐户
;================================
del_zh: cpl watchdog
lcall acounts
jb f_erra,erra_del0
ljmp conexpence
erra_del0: ljmp erra_del
;=================================;
; ;
;联机消费 ;
;=================================;
conexpence: mov sal_time,#0
setb f_card
setb f_card0
setb et1
mov expence_h,#0
mov expence_x,#0
mov expence_l,#0
mov liuliang_h,#0
mov liuliang_x,#0
mov liuliang_l,#0
mov Card_On_Or_Off_Count,#50
;============================
;消费结算
;============================
conexpence0:
cpl watchdog
jnb f_kguan1,conexpence2
clr f_kguan1
mov a,kgcount
mov b,#2
div ab
mov a,b
jz open1
lcall closevalue
setb f_kguan2
ljmp check_card
open1: lcall openvalue
clr f_kguan2
conexpence2:
jb f_kguan2,check_card
jnb f_60ms,check_card
clr f_60ms
lcall read_plus
jnb f_updata,check_card
clr f_updata
lcall updata
check_card:
jb f_card,conexpence0
lcall closevalue
clr et1
jnb f_com,check_card1
lcall collect_saledata
setb f_sal
clr f_kguan2
mov kgcount,#0
lcall disp_name
ljmp mmain
check_card1:lcall save_saledata
clr f_kguan2
mov kgcount,#0
lcall disp_name
ljmp mmain
;=====================
;未声请到帐户
;=====================
fail_zh: mov error,#err13
clr f_zh
setb f_erra
setb f_card
lcall erro_del
clr f_erra
ljmp unconexpence0
;=====================
;脱机消费状态
;=====================
unconexpence:
cpl watchdog
mov error,#err12
setb f_erra
;======================
unconexpence0:
setb et1
mov sal_time,#0
setb f_card
mov expence_h,#0
mov expence_x,#0
mov expence_l,#0
mov liuliang_h,#0
mov liuliang_x,#0
mov liuliang_l,#0
mov Card_On_Or_Off_Count,#50
lcall erro_del
clr f_erra
;========================
;脱机消费结算
;========================
unconexpence1:
cpl watchdog
jnb f_kguan1,unconexpence2
clr f_kguan1
mov a,kgcount
mov b,#2
div ab
mov a,b
jz open
lcall closevalue
setb f_kguan2
ljmp check_card_in
open: lcall openvalue
clr f_kguan2
unconexpence2:
jb f_kguan2,check_card_in
jnb f_60ms,check_card_in
clr f_60ms
lcall read_plus
jnb f_updata,check_card_in
clr f_updata
lcall updata1
ljmp check_card_in
;========================
check_card_in:
jb f_card,unconexpence1
lcall closevalue
nop
nop
mov kgcount,#0
clr f_kguan2
clr et1
lcall save_saledata
lcall disp_name
ljmp mmain
;======================
;错误帐户信息处理
;======================
erra_del: lcall erro_del
clr f_erra
lcall closevalue
lcall disp_name
ljmp mmain
;******************************************
;子程序部分
;******************************************
;*******************************************
;读取系统信息
;*******************************************
read_sys:
mov dptr,#sal_flag
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov a,icdata
cjne a,#0aah,read_sys0
mov dptr,#sal_rate
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov rate,icdata
ret
read_sys0: mov icdata,#0aah
lcall irwrbyte
mov dptr,#sal_beg
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,#00h
lcall irwrbyte
mov dptr,#sal_end
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,#00h
lcall irwrbyte
mov dptr,#sal_rate
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,#0ah
lcall irwrbyte
ret
;*******************************************
;脱机消费数据更新
;*******************************************
updata1: lcall expence_add
lcall liuliang_add
mov money_h,expence_h
mov money_x,expence_x
mov money_l,expence_l
lcall disp_money
ret
;********************************************
;脱机数据保存
;********************************************
save_saledata:
mov dptr,#sal_beg
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov a,icdata
cjne a,#100,save_saledata0
mov icdata,#0
lcall irwrbyte
mov dptr,#sal_end
mov icadd_h,dph
mov icadd_l,dpl
lcall irwrbyte
ret
save_saledata0:
mov a,icdata
mov b,#11
mul ab
mov icadd_h,b
mov icadd_l,a
mov dptr,#fm_buf
clr c
add a,dpl
mov icadd_l,a
mov a,icadd_h
addc a,dph
mov icadd_h,a
mov dph,icadd_h
mov dpl,icadd_l
;===================
;save idnumber
;===================
mov icdata,idnum0
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,idnum1
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,idnum2
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,idnum3
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,idnum4
lcall irwrbyte
;==========================
;save liuliang
;==========================
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,liuliang_h
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,liuliang_x
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,liuliang_l
lcall irwrbyte
;============================
;save expence
;============================
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,expence_h
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,expence_x
lcall irwrbyte
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,expence_l
lcall irwrbyte
;=========================
;sal_beg++
;=========================
mov dptr,#sal_beg
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov a,icdata
inc a
mov icdata,a
mov dptr,#sal_beg
mov icadd_h,dph
mov icadd_l,dpl
lcall irwrbyte
ret
;*******************************************
;读取保存数据
;*******************************************
readrecord:
mov dptr,#sal_beg
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov b,icdata
mov dptr,#sal_end
mov icadd_h,dph
mov icadd_l,dpl
push b
lcall irdbyte
pop b
mov a,icdata
clr c
cjne a,b,readrecord0
readrecord0:
jc readrecord1
mov dptr,#sal_beg
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,#0
lcall irwrbyte
mov dptr,#sal_end
mov icadd_h,dph
mov icadd_l,dpl
mov icdata,#0
lcall irwrbyte
ret
readrecord1: clr c
mov dptr,#sal_end
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov a,icdata
mov b,#11
mul ab
mov icadd_l,a
mov icadd_h,b
mov dptr,#fm_buf
clr c
add a,dpl
mov icadd_l,a
mov a,b
addc a,dph
mov icadd_h,a
mov dph,icadd_h
mov dpl,icadd_l
mov r0,#salbuf
mov @r0,#41h
inc r0
mov @r0,address
inc r0
mov rrx0,#11
readrecord2:
lcall irdbyte
mov @r0,icdata
inc dptr
mov icadd_h,dph
mov icadd_l,dpl
inc r0
djnz rrx0,readrecord2
mov @r0,salecount
mov a,salecount
inc a
mov salecount,a
readrecord3:
mov dptr,#sal_end
mov icadd_h,dph
mov icadd_l,dpl
lcall irdbyte
mov a,icdata
inc a
mov icdata,a
mov dptr,#sal_end
mov icadd_h,dph
mov icadd_l,dpl
lcall irwrbyte
setb f_sal
ret
;*******************************************
;蜂鸣器短叫一声
;*******************************************
beepup: clr p3.6
lcall delay_254ms
setb p3.6
ret
;***************************
;read the pos address
;***************************
read_address:
clr p1.3
mov a,p0
cpl a
mov address,a
setb p1.3
ret
;***************************
;cpu install
;***************************
iniall: mov th0,#15h
mov tl0,#0a0h
mov th1,#0ffh
mov tl1,#00h
mov tmod,#11h
mov th2,#0ffh
mov tl2,#baud
mov rcap2h,#0ffh
mov rcap2l,#baud
mov t2con,#00110100b ;tf2 exf2 rclk tclk exen2 tr2 c/t2 cp/rl2
mov scon,#11110000b ;sm0 sm1 sm2 ren tb8 rb8 ti ri
mov ip,#00010000b ;* * pt2 ps pt1 px1 pt0 px0
mov tcon,#01010100b ;tf1 tr1 tf0 tr0 ie1 it1 ie0 it0
mov ie,#00010110b ;ea * * es et1 ex1 et0 ex0
;setb ea
ret
;****************************
;CLOSE VALUE
;****************************
closevalue:
setb cm_a
nop
nop
clr cm_b
nop
nop
ret
;***************************
;OPEN VALUE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -