⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waterm4.1.1.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:







;*******************************************
;蜂鸣器短叫一声
;*******************************************

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 + -