📄 waterm4.1.1.asm
字号:
;*******************************************
;蜂鸣器短叫一声
;*******************************************
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,#00011110b ;ea * * es et1 ex1 et0 ex0
;setb ea
ret
;****************************
;CLOSE VALUE
;****************************
closevalue:
clr 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,#5
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
jnb f_plusa,read_plus0
clr f_plusa
jnb f_plusb,read_plus0
clr f_plusb
; inc sal_time
; mov a,sal_time
; lcall beep_1
; cjne a,#10,read_plus0
; mov sal_time,#0
; setb f_updata
read_plus0:
ret
;***************************
;delay_1ms program
;***************************
delay_1ms: mov r6,#0ah
dl2: mov r7,#18h
dl1: nop
nop
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
nop
nop
nop
clr scl1
nop
nop
nop
ret
;**************************
;iic_stop
;describe
;当SCL处于高电平时,SDA从低电平到
; 高电平的跳变即停止
;*********************************
iic_stop: clr sda1
nop
nop
setb scl1
nop
nop
nop
nop
nop
nop
nop
setb sda1
nop
nop
nop
nop
nop
nop
ret
;*********************************
;mack
;发送应答信号
;*********************************
mack: clr sda1
nop
nop
nop
setb scl1
nop
nop
nop
nop
nop
clr scl1
nop
nop
nop
ret
;*********************************
;mnack
;发送非应答信号
;*********************************
mnack: setb sda1
nop
nop
nop
setb scl1
nop
nop
nop
nop
nop
clr scl1
nop
nop
ret
;*********************************
;cack
;check che ack program
;*********************************
cack: setb sda1
nop
nop
nop
setb scl1
nop
nop
nop
nop
jb sda1,cack0
nop
clr scl1
nop
setb f_iic
ret
cack0: nop
clr scl1
nop
clr f_iic
ret
;*****************************
;write a byte to iic
;*****************************
wrbyte: mov r7,#8
wrbyte0: clr c
rlc a
jc wrbyte_0
clr sda1
ljmp wrbyte_1
wrbyte_0:setb sda1
nop
nop
wrbyte_1:setb scl1
nop
nop
nop
nop
nop
clr scl1
nop
nop
nop
nop
nop
djnz r7,wrbyte0
ret
;*******************************
;rdbyte
;*******************************
rdbyte: mov r7,#8
rdbyte0: setb sda1
nop
nop
setb scl1
nop
nop
jb sda1,rdbyte_0
clr c
rlc a
ljmp rdbyte_1
rdbyte_0:setb c
rlc a
rdbyte_1:clr scl1
nop
nop
nop
nop
nop
djnz r7,rdbyte0
ret
;*******************************
;从指定地址读取一个字节
;addressh:icadd_h
;addressl:icadd_l
;data: icdata
;*******************************
irdbyte: mov a,icadd_h
rl a
mov b,a
mov a,#0a0h
orl a,b
lcall iic_start
lcall wrbyte
lcall cack
jb f_iic,irdbyte0
lcall iic_stop
ret
irdbyte0:clr f_iic
mov a,icadd_l
lcall wrbyte
lcall cack
jb f_iic,irdbyte1
lcall iic_stop
ret
irdbyte1:clr scl1
clr f_iic
lcall iic_start
mov a,icadd_h
rl a
mov b,#0a1h
nop
orl a,b
lcall wrbyte
lcall cack
jb f_iic,irdbyte2
lcall iic_stop
ret
irdbyte2:clr f_iic
lcall rdbyte
mov icdata,a
lcall mnack
lcall iic_stop
ret
;******************************
;向指定地址写一个字节
;address: icadd_h
; icadd_l
;data: icdata
;******************************
irwrbyte: clr wp
mov a,icadd_h
rl a
mov b,#0a0h
orl a,b
lcall iic_start
lcall wrbyte
lcall cack
jb f_iic,irwrbyte0
lcall iic_stop
setb wp
ret
irwrbyte0:clr f_iic
mov a,icadd_l
lcall wrbyte
lcall cack
jb f_iic,irwrbyte1
lcall iic_stop
setb wp
ret
irwrbyte1:clr f_iic
mov a,icdata
lcall wrbyte
lcall cack
jb f_iic,irwrbyte2
lcall iic_stop
setb wp
ret
irwrbyte2:clr f_iic
lcall iic_stop
setb wp
ret
;****************************
;蜂鸣器短叫一声
;beep
;****************************
beep_1: clr beep
lcall delay_254ms
setb beep
ret
;*******************************
;updata
;*******************************
updata: lcall money_dec
lcall expence_add
lcall liuliang_add
lcall disp_money
;lcall money_hextobcd
;lcall get_int
;lcall get_dot
;lcall send_money
ret
;********************************
;帐户金额更新
;********************************
money_dec:
mov r0,#money_l
mov a,@r0
mov b,rate
clr c
subb a,b
mov @r0,a
mov r0,#money_x
mov a,@r0
subb a,#0
mov @r0,a
mov r0,#money_h
mov a,@r0
subb a,#0
mov @r0,a
jnc money_dec4
clr f_card
mov money_h,#0
mov money_x,#0
mov money_l,#0
money_dec4:
ret
;********************************
;消费金额更新
;********************************
expence_add:clr c
mov r0,#expence_l
mov a,@r0
mov r1,#rate
mov b,@r1
add a,b
mov @r0,a
jc expence_add0
ret
expence_add0:
mov r0,#expence_x
mov a,@r0
addc a,#0
mov @r0,a
jc expence_add1
ret
expence_add1:
mov r0,#expence_h
mov a,@r0
addc a,#0
mov @r0,a
ret
;*******************************
;liuliang自加一
;*******************************
liuliang_add:
mov r0,#liuliang_l
mov a,@r0
add a,#1
mov @r0,a
mov r0,#liuliang_x
mov a,@r0
addc a,#0
mov @r0,a
mov r0,#liuliang_h
mov a,@r0
addc a,#0
mov @r0,a
ret
;*********************************
;money to bcd in order to display
;*********************************
money_hextobcd:
mov sdispbuf0,money_h
mov sdispbuf1,money_x
mov sdispbuf2,money_l
mov dmoney_hh,#0
mov dmoney_h,#0
mov dmoney_x,#0
mov dmoney_l,#0
mov rrx1,#24
money_hextobcd0:mov a,sdispbuf2
clr c
rlc a
mov sdispbuf2,a
mov a,sdispbuf1
rlc a
mov sdispbuf1,a
mov a,sdispbuf0
rlc a
mov sdispbuf0,a
mov a,dmoney_l
addc a,dmoney_l
da a
mov dmoney_l,a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -