📄 waterm1.01.asm
字号:
cpl plus
lcall closevalue
clr f_id
;clr f_card
;======================================
;添加阀门处理
;======================================
;lcall judgevalue
;jnb f_value,check_card_in_1
;lcall delay_254ms
;cpl watchdog
; lcall delay_254ms
;cpl watchdog
;lcall delay_254ms
;lcall delay_254ms
;lcall openvalue
;lcall delay_254ms
;cpl watchdog
;lcall delay_254ms
;cpl watchdog
;lcall delay_254ms
;cpl watchdog
;;lcall delay_254ms
;cpl watchdog
;lcall delay_254ms
;cpl watchdog
;lcall delay_254ms
;lcall closevalue
;lcall judgevalue
;jnb f_value,check_card_in_1
;setb f_valuerr
;mov error,#14
;lcall erro_del
;ljmp check_card_in_2
check_card_in_1:
clr f_valuerr
nop
nop
check_card_in_2:
mov kgcount,#0
clr f_kguan2
clr et1
mov hongcount,#0
lcall save_saledata
lcall disp_name
clr f_id
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,#01h
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 a,expence_h
jnz esc1
mov a,expence_x
jnz esc1
mov a,expence_l
jnz esc1
mov expence_h,#0
mov expence_x,#0
mov expence_l,#50
esc1:
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,#0c1h ;脱机消费标志为0XC1
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,#0fch
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
setb cm_b
ret
;***************************
;OPEN VALUE
;***************************
openvalue:
setb cm_a
clr cm_b
ret
;****************************
;judge value
;****************************
judgevalue: clr f_value
setb overload
mov valuecount,#15
setwatchdog:mov a,valuecount
cpl watchdog
jnz setwatchdog
mov valuecount,#50
value_wait0:jnb overload,judgevalue0
mov a,valuecount
cpl watchdog
jnz value_wait0
setb f_value
ret
judgevalue0:mov valuecount,#10
setwatchdog1:
cpl watchdog
mov a,valuecount
jnz setwatchdog1
setb overload
mov valuecount,#50
value_wait1:jb overload,judgevalue1
mov a,valuecount
cpl watchdog
jnz value_wait1
setb f_value
judgevalue1:
ret
;****************************
;write a byte to 74HC595
;****************************
write_595: mov rrx0,#8
write_595_1: clr c
rlc a
jc write_595_0
clr ser
ljmp write_595_2
write_595_0: setb ser
write_595_2: clr srclk
nop
nop
nop
setb srclk
djnz rrx0,write_595_1
ret
;*******************************
;read the formation of the water
;---|_|-----
;*******************************
read_plus: jb plusa,read_plusa0
lcall delay_10ms
jb plusa,read_plusa0
jnb lastplusa,read_plusa0
setb f_plusa
clr lastplusa
ljmp read_plusb
read_plusa0:setb lastplusa
read_plusb: jb plusb,read_plusb0
lcall delay_10ms
jb plusb,read_plusb0
jnb lastplusb,read_plusb0
setb f_plusb
clr lastplusb
ret
read_plusb0:setb lastplusb
ret
;***************************
;delay_1ms program
;***************************
delay_1ms: mov r6,#0ah
dl2: mov r7,#18h
dl1: nop
cpl watchdog
djnz r7,dl1
djnz r6,dl2
ret
;***************************
;delay_10ms program
;***************************
delay_10ms: mov r5,#10
dl3: lcall delay_1ms
nop
nop
djnz r5,dl3
ret
delay_254ms:mov r5,#254
dl4:lcall delay_1ms
nop
nop
nop
djnz r5,dl4
ret
delay_1500ms: mov r4,#50
r_delay:lcall delay_10ms
djnz r4,r_delay
ret
;************************************
;iic_start
;describe:
;当SCL为高电平时SDA从高电平到低
;电平产生一个跳变即开始
;************************************
iic_start: setb sda1
nop
nop
setb scl1
nop
nop
nop
nop
nop
nop
clr sda1
nop
nop
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -