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

📄 waterm1.01.asm

📁 一卡通源码程序是我公司的一卡通源码程序,绝对难得
💻 ASM
📖 第 1 页 / 共 5 页
字号:
            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 + -