📄 hldmsapp.asm
字号:
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 + -