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

📄 hldmsapp.asm

📁 645规约集中抄表源代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                RET
RDNOW:
RDNOW_COM:      MOV  A,@R1    ;;
                MOV  @R0,A    ;;
                INC  R0       ;;
                INC  R1       ;;
                DJNZ  B,RDNOW_COM        ;;
                RET
RDNCOMM3:      MOV   ADDR_DATATRB,#81H   ;;
                MOV   ADDR_DATATRB+2,24H ;;
                MOV   ADDR_DATATRB+3,7EH ;;
               LCALL SENDDATA1           ;;
                RET                      ;;
RDBS_ERROR1:   AJMP   RDBS_ERROR
MOVCOM:         MOV   B,#4
MOVCOMA:        MOV  A,@R0
                MOV  @R1,A
                INC  R0
                INC  R1
                DJNZ  B,MOVCOMA
                RET
RDSY:
RDBS_ERROR4:    LJMP   RDBS_ERROR
RDSNO_NUM:      CJNE   A,#0F3H,RDBS_ERROR4     ;读表数量
                MOV   69H,ADDR_DATARE
                MOV   B,#1               ;; 需读数量标识
                MOV   R2,#ADDR_SNONUMXX  ;; 读24C02 的地址
                MOV   R0,#ADDR_DATARE    ;; 读出数据保存的地址
                MOV   R1,#RD1_COM        ;; 读命令字 RD1_COM
                LCALL RD_X
                mov  A,@R0
                CJNE  A, #'K', N_OK1_R
                MOV   ADDR_DATARE,69H
                AJMP  YES_OK_R
 JMPXXX:        AJMP  RDBS_ERROR
 N_OK1_R:
                MOV   B,#1               ;; 需读数据数量
                MOV   R2,#ADDR_SNONUMYY  ;; 读24C02 的地址
                MOV   R0,#ADDR_DATARE    ;; 读出数据保存的地址
                MOV   R1,#RD1_COM        ;; 读命令字 RD1_COM
                LCALL RD_X
                mov  A,@R0
                CJNE  A, #'K', JMPXXX
                MOV   ADDR_DATARE,69H
YES_OK_R:       MOV    A,24h
                CJNE  A,#69H,RD_RE
                MOV   ADDR_DATATRB+1,#3       ;读表数量
                MOV   1FH,#5
                MOV   B,#1
                MOV   R2,#ADDR_SNONUM
                MOV   R0,#ADDR_DATATRB+4
                MOV   R1,#RD1_COM
               LCALL RD_X
                mov  A,@R0
                ANL  A,#1FH
                AJMP  COMM2a
 RD_RE:         CJNE  A,#68H,RDSNO1
                MOV   ADDR_DATATRB+1,#3
                MOV   1FH,#5
                MOV    A,ADDR_DATARE+48
                ANL    A,#04H
                JZ     RD_RA
               MOV    Addr_DataTrB+4,#0FH
               AJMP   RD_RB
RD_RA:         MOV    Addr_DataTrB+4,#00H
RD_RB:         AJMP   RDNCOMM3
RDSNO1:        CJNE   A,#73H,RDSNO2
RDXXX:         MOV   R2,#ADDR1_SNO
 COMM_SNO:     MOV   1FH,#10
               MOV   ADDR_DATATRB+1,#08
               MOV   B,#6
 COMM2:        MOV   R0,#ADDR_DATATRB+4
               MOV   R1,#RD1_COM
              LCALL RD_X
 comm2a:       MOV    R1,#ADDR_DATARE
               MOV    R0,#ADDR_DATARE-6
               MOV    B,#6
              ACALL  RDNOW_COM
               MOV   ADDR_DATATRB,#81H
COMM3:         MOV   ADDR_DATATRB+2,24h        ; D0
               MOV   ADDR_DATATRB+3,7eh        ; D1
               MOV   R0,  #ADDR_DATATRB+4
               MOV   R2,  #6
COMLOPP:       MOV   A,   @R0
               ADD   A,   #33H
               MOV   @R0, A
               INC   R0
               DJNZ  R2,  COMLOPP
               LCALL SENDDATA1
               RET
RDSNO2:        CJNE   A,#74H,RDSNO3            ;读表号2
               MOV   R2,#ADDR2_SNO
               AJMP  COMM_SNO
RDSNO3:         CJNE   A,#75H,RDSNO4           ;读表号3
                MOV   R2,#ADDR3_SNO
                AJMP  COMM_SNO
RDSNO4:         CJNE   A,#76H,RDSNO5           ;读表号4
                MOV   R2,#ADDR4_SNO
                AJMP  COMM_SNO
RDSNO5  :       CJNE   A,#77H,RDSNO6           ;读表号5
                MOV   R2,#ADDR5_SNO
                AJMP  COMM_SNO
RDSNO6  :       CJNE   A,#78H,RDSNO7           ;读表号6
                MOV   R2,#ADDR6_SNO
                AJMP  COMM_SNO
RDSNO7  :      CJNE   A,#79H,RDSNO8            ;读表号7
                MOV   R2,#ADDR7_SNO
                AJMP  COMM_SNO
RDSNO8  :       CJNE   A,#7AH,RDSNO9           ;读表号8
                MOV   R2,#ADDR8_SNO
                AJMP  COMM_SNO
RDSNO9  :       CJNE   A,#7BH,RDSNO10          ;读表号9
                MOV   R2,#ADDR9_SNO
                AJMP  COMM_SNO
RDSNO10  :      CJNE   A,#7CH,RDSNO11          ;读表号10
                MOV   R2,#ADDR10_SNO
                AJMP  COMM_SNO
RDSNO11  :      CJNE   A,#7DH,RDSNO12          ;读表号11
                MOV   R2,#ADDR11_SNO
                AJMP  COMM_SNO
RDBS_ERROR:     MOV  ADDR_DATATRB+2,#02H
RDBS_ERROR1A:   MOV ADDR_DATATRB,#0C1H
                AJMP  WRBS_ERROR
RDSNO12  :      CJNE   A,#7EH,RDSNO13          ;读表号12
                MOV   R2,#ADDR12_SNO
                AJMP  COMM_SNO
RDSNO13  :      CJNE   A,#7FH,RDSNO14          ;读表号13
                MOV   R2,#ADDR13_SNO
                AJMP  COMM_SNO
RDSNO14  :      CJNE   A,#80H,RDSNO15          ;读表号14
                MOV   R2,#ADDR14_SNO
                AJMP  COMM_SNO
RDSNO15  :     CJNE   A,#81H,RDSNO16           ;读表号15
               MOV   R2,#ADDR15_SNO
               AJMP  COMM_SNO
RDSNO16  :     CJNE   A,#82H,RDBS_ERROR        ;读表号16
               MOV   R2,#ADDR16_SNO
               AJMP  COMM_SNO
TJLOP4:
WRBS_ERRORZ:   AJMP   WRBS_ERROR
ON_CHECK1_X:   AJMP   ON_CHECK1
DELSNO_X:      AJMP   DELSNO
WDATA:         MOV    A,Addr_DataRe+10      ; 读数据项标识高位
               CJNE   A,#0F3H,WRBS_ERRORZ
               MOV    A,ADDR_DATARE+8
               CJNE   A,#0CH, WRBS_ERRORZ   ; 数据长度不为0C 错误
               MOV    A,24h
WSNO:          CJNE   A,#65H,ON_CHECK1_X
               JNB    E99_BIT,DELSNO_X      ;;为 999999 999999时 添加表号
               CLR    E99_BIT
               SETB   P3.3                        ;; 设置键重恢复
               MOV    C,P3.3
               JNC    WDATAST
WDATASTDD:     MOV   ADDR_DATARE,  DPL      ;; 加入表号
               MOV   ADDR_DATARE+1,DPH
               MOV   ADDR_DATARE+2,23H
               MOV   ADDR_DATARE+3,ADDR_DATARE-3
               MOV   ADDR_DATARE+4,ADDR_DATARE-2
               MOV   ADDR_DATARE+5,ADDR_DATARE-1
               MOV   ADDR_DATARE+7, #0C4H
               MOV   ADDR_DATARE+8, #01H
               MOV   ADDR_DATARE+9, #37H
                LCALL SENDDATA2
 RETEND2:       RET
WDATAST:       MOV    R0, #ADDR_DATARE+15
               MOV    R2,  #6
TJLOP:         MOV    A,   @R0             ;; 减 33H
               CLR    C
               SUBB   A,   #33H
               CLR    C
               CJNE   A, #99H, TJLOP2
               AJMP   TJLOP3
TJLOP2:        JNC    TJLOP4
TJLOP3:        MOV    B, A
               ANL    A, #0FH
               CLR    C
               CJNE   A, #9H, TJLOP5
               AJMP   TJLOP6
TJLOP5:        JNC    TJLOP2
TJLOP6:        MOV    A,   B
               MOV    @R0, A
               INC    R0
               DJNZ   R2, TJLOP
               MOV    R0, #ADDR_DATARE+15
               MOV    R2, #6
COMPLOP:       MOV    A,  @R0
               CJNE   A,  #99H, COMPEND
               INC    R0
               DJNZ   R2, COMPLOP
               AJMP   WRBS_ERROR

COMPEND:       MOV   R2,#6
               MOV   R0,#ADDR_DATARE+15
CMP1XX:         MOV   A,@R0
               INC   R0
               CJNE  A,#99H,CMPADDA   ;  不允许全 9
               DJNZ  R2,CMP1XX
               AJMP  WRBS_ERROR
CMPADDA:       MOV   R2,#6
               MOV   R0,#ADDR_DATARE+15
CMP1Y:         MOV   A,@R0
               INC   R0
               CJNE  A,#0H,CMPADDB    ;  不允许全 0
               DJNZ  R2,CMP1Y
               AJMP  WRBS_ERROR
CMPADDB:     MOV   B,#1               ;; 需读数量标识
             MOV   R2,#ADDR_SNONUMXX  ;; 读24C02 的地址
             MOV   R0,#ADDR_DATARE    ;; 读出数据保存的地址
             MOV   R1,#RD1_COM        ;; 读命令字 RD1_COM
             LCALL RD_X
             mov  A,@R0
             CJNE  A, #'K', N_OK1
             AJMP  YES_OK
N_OK1:       MOV   B,#1               ;; 需读数据数量
             MOV   R2,ADDR_SNONUMYY   ;; 读24C02 的地址
             MOV   R0, #ADDR_DATARE   ;; 读出数据保存的地址
             MOV   R1,#RD1_COM        ;; 读命令字 RD1_COM
             LCALL RD_X
             mov  A,@R0
             CJNE  A, #'K', N_OK2
             AJMP  YES_OK
N_OK2:       MOV   B,#1               ;; 需读数据数量
             MOV   R2,#ADDR_SNONUMYY  ;; 读24C02 的地址
             MOV   R0,#ADDR_DATARE    ;; 读出数据保存的地址
             MOV   R1,#RD1_COM        ;; 读命令字 RD1_COM
             LCALL RD_X
             mov  A,@R0
             CJNE  A, #'K', N_OK3
             AJMP  YES_OK
 retX_1:    ;       NOP
             ;    NOP
                 NOP
                 SETB   WDI
                 clr  ea
                 ajmp $

N_OK3:       SETB   P3.3                        ;; 设置键重恢复
             MOV    C,P3.3
             JNC    WDSTR
             AJMP  WDATASTDD
WDSTR:       MOV   ADDR_DATARE,#0      ;; 存储 表号数量   初始化表号数量
             mov   69h, addr_datare+7   ;;cccccccccccccccccccc
             MOV   ADDR_DATARE+7, #04H ;; 写允许
             MOV   R2,#ADDR_SNONUM     ;; 2402中的表号存储地址 首地址
             MOV   B,#1                ;; 需写的个数
             MOV   R0,#ADDR_DATARE     ;; 要写数据的首地址
             MOV   R1,#WR1_COM         ;; 写命令字 WR_COM
             setb   wr_bit
             jNb   hwr1_FRAM_ALL,retX_1
             CLR   ROM_WP
             LCALL  WR_CMP
             MOV   ADDR_DATARE,#'K'      ;; 设置表号数量标志
             MOV   R2,#ADDR_SNONUMXX     ;; 表号标志存储地址
             MOV   B,#1
             MOV   R0,#ADDR_DATARE
             MOV   R1,#WR1_COM
             setb   wr_bit
             jNb   hwr1_FRAM_ALL,retX_1
             CLR   ROM_WP
             LCALL  WR_CMP
             MOV   R2,#ADDR_SNONUMYY     ;; 表号标志存储地址
             MOV   B,#1
             MOV   R0,#ADDR_DATARE
             MOV   R1,#WR1_COM
             setb   wr_bit
             jNb   hwr1_FRAM_ALL,retX_1
             CLR   ROM_WP
             LCALL  WR_CMP
             MOV   R0, #ADDR_DATARE
             MOV   R2, #6
N_OK_LP:     MOV   @R0, #0
             INC   R0
             DJNZ  R2, N_OK_LP
             MOV   ADDR_DATARE+55, #16     ;;
             MOV   ADDR_DATARE+7, #04H     ;; 写允许
             MOV    ADDR_DATARE+54, #0
N_OK_LP1:    MOV    R2, ADDR_DATARE+54     ;; 存储区清0
             MOV    R0, #ADDR_DATARE
             MOV    B,  #6
             MOV   R1,#WR1_COM
             setb   wr_bit
             jNb   hwr1_FRAM_ALL,retX_1
             CLR   ROM_WP
             LCALL  WR_CMP
             MOV    A, ADDR_DATARE+54
             ADD    A, #10H
             MOV    ADDR_DATARE+54,A
             DJNZ   ADDR_DATARE+55,N_OK_LP1
             mov   addr_datare+7,69H
             ajmp  tadd
YES_OK :
               MOV    ADDR_DATARE, ADDR_DATARE+15
               MOV    ADDR_DATARE+1, ADDR_DATARE+16
               MOV    ADDR_DATARE+2, ADDR_DATARE+17
               MOV    ADDR_DATARE+3, ADDR_DATARE+18
               MOV    ADDR_DATARE+4, ADDR_DATARE+19
               MOV    ADDR_DATARE+5, ADDR_DATARE+20
               LCALL  ADDR_CMP      ;;/ 比较是否有相同的表号
               MOV    ADDR_DATARE,   #99H
               MOV    ADDR_DATARE+1, #99H
               MOV    ADDR_DATARE+2, #99H
               MOV    ADDR_DATARE+3, #99H
               MOV    ADDR_DATARE+4, #99H
               MOV    ADDR_DATARE+5, #99H
               JC     TADD
               AJMP   WRBS_ERRORZ
TADD:          MOV    R1,#RD1_COM
               MOV    R2,#ADDR_SNONUM
               MOV    B,#1
               MOV    R0,#60H      ; 读出的数量存在60H中
               LCALL   RD_X
               MOV    A,@R0
               anl    a,#1fh
               mov   @r0,a
               CLR    C
               SUBB   A,#16
               JC     WSNO1
               AJMP   WRBS_ERROR1C ;表计数量等于16,不再添加,返回表数已满错误帧
RET4:       ;   ajmp   WRBS_ERROR1C
               NOP
               NOP
              ; NOP
               clr  ea
               ajmp $
WSNO1:         MOV    B,#16
               MUL   AB
               ADD   A,#ADDR1_SNO
               MOV  R2,A
               MOV   R0,#ADDR_DATARE+15   ; 表号首地址
               MOV   B,#6
               CLR   hwbr_fram_all
               CLR   hwbr_fram_all
               jNb   hwr1_FRAM_ALL,ret4
               CLR   ROM_WP
               MOV   R1,#WR1_COM
               LCALL  WR_CMP
               INC   60H
               MOV   R0,#60H
               MOV   R2,#ADDR_SNONUM
               MOV   B,#1
               MOV   R1,#WR1_COM
              ; nop
              ; nop
              ; nop
               nop
               jNb   hwr1_FRAM_ALL,RET4
               CLR   ROM_WP
              LCALL  WR_CMP
               mov   addr_datare+7,#0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -