📄 snt-c485.asm
字号:
MOV DPH,#1
LCALL WRITE_1
INC TEMP1
INC TEMP2
DJNZ R2,DEL_A5 ;以上为跨页的表地址转移
MOV R0,#00 ;以下为页2的表地址转移
MOV R1,#01
DEL_A5A: MOV DPH,#2
DEL_A6: MOV B,#07H
MOV A,R0
MUL AB
MOV DPL,A
MOV TEMP1,A ;
LCALL READ_1
CJNE A,#0AAH,DEL_A8
MOV A,R1
MOV B,#07H
MUL AB
MOV DPL,A
MOV TEMP2,A
MOV R2,#07H
DEL_A7: MOV DPL,TEMP2
LCALL READ_1
MOV DPL,TEMP1
LCALL WRITE_1
INC TEMP1
INC TEMP2
DJNZ R2,DEL_A7
INC R0
INC R1
LJMP DEL_A6
DEL_A8: LJMP DEL_A3
;*******************************************************
;判断表地址中是否有所给表号子程序,即从EEPROM中找到要所给
;的表号,将表号序号存于寄存器R2中.YOUBIAO为是否有表标志
;寄存器: R2:地址序号 R3:表号字节数
;R0:所给表号的高字节地址 TEMP:临时寄存器
;*******************************************
PAN_HAO: MOV R2,#00H
MOV R0,#BADD5
PAN_LOOP: MOV A,R2
CJNE A,#36,PAN_1
PAN_1: JNC PAN_4
MOV A,R2
MOV B,#07
MUL AB
MOV DPL,A
MOV DPH,#01H
LCALL READ_1
INC DPL
CJNE A,#0AAH,PAN_2B
MOV R3,#6
PAN_2: LCALL READ_1
MOV TEMP,A
MOV A,@R0
CJNE A,TEMP,PAN_3
INC DPTR
INC R0
DJNZ R3,PAN_2
SETB YOUBIAO
PAN_2A: RET
PAN_2B: CLR YOUBIAO
RET
PAN_3: INC R2
MOV R0,#BADD5
LJMP PAN_LOOP
PAN_4: MOV A,R2
CLR C
SUBB A,#36
MOV R2,A
PAN_4A: MOV A,R2
MOV B,#07H
MUL AB
MOV DPL,A
MOV DPH,#2
LCALL READ_1
INC DPL
CJNE A,#0AAH,PAN_5B
MOV R3,#6
PAN_5: LCALL READ_1
MOV TEMP,A
MOV A,@R0
CJNE A,TEMP,PAN_6
INC DPTR
INC R0
DJNZ R3,PAN_5
SETB YOUBIAO
MOV A,R2
ADD A,#36
MOV R2,A
PAN_5A: RET
PAN_5B: CLR YOUBIAO
RET
PAN_6: INC R2
MOV R0,#BADD5
LJMP PAN_4A
;*********************************************
;向上位机回应增/删表地址子程序
;*********************************************
ADDEL: JNB ZS_OK,ADDEL_5
MOV 41H,#97H ;41H:97 起始符
MOV R3,#97H
MOV 42H,#40H ;42H:40 电表代号
MOV A,R3
ADD A,42H
MOV R3,A
MOV A,TEMP
MOV 43H,A
ADD A,R3
MOV R3,A
MOV R2,#6 ;43H-49H:A6-A0 采集器地址
MOV R0,#BADD5
MOV R1,#44H
ADDEL_1: MOV A,@R0
MOV @R1,A
ADD A,R3
MOV R3,A
INC R1
INC R0
DJNZ R2,ADDEL_1
MOV A,R3
MOV @R1,A ;4AH:R3 校验和
INC R1
MOV @R1,#16H ;4BH:16 结束符
MOV R1,#41H
MOV R2,#11
ADDEL_2: MOV SBUF,@R1
ADDEL_3: JBC TI,ADDEL_4
LJMP ADDEL_3
ADDEL_4: INC R1
DJNZ R2,ADDEL_2
ADDEL_5: RET
;************************************
;定时器T0中断服务子程序,0.05S中断一次
;************************************
TINT0: MOV TH0,#4CH ;T=11059200*0.05/12=B400H 10000-B400=4C00H
SETB TINT_F
;*** 以下用于10S延时并判断是否到 ***
JNB ST_YAN,TINT2 ;是否允许10秒定时
PUSH ACC
PUSH PSW
CLR C
MOV A,MINLAY_L
ADD A,#01H
MOV MINLAY_L,A
CLR C
SUBB A,#0C8H
JC TINT1
MOV MINLAY_L,#0
SETB MIN_FLAG
TINT1: POP PSW
POP ACC
TINT2: RETI
;***********************串行中断服务子程序************************
;本程序用于接收上位机下达的命令,发送数据时不进中断
;*****************************************************************
ESINT: CLR ES
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
PUSH TEMP
CLR RS1 ;工作寄存器用1区
SETB RS0
MOV A,SBUF
CLR RI
MOV R5,A
MOV A,COMMTYPE ;命令字类型
CJNE A,#00H,ACOMM1A
MOV A,RECCNT
RL A
MOV DPTR,#ACOMM1 ;COMMTYPE=0时,判断如下
JMP @A+DPTR
ACOMM1: AJMP ACOMM2 ;帧头
AJMP ACOMM3 ;表类型
AJMP ACOMM4 ;控制码
ACOMM1A: LJMP BCOMM
ACOMM2: MOV A,R5 ;判断帧头
CJNE A,#97H,ACOMM2A
INC RECCNT
MOV R3,#97H
LJMP RETURN
ACOMM2A: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
ACOMM3: MOV A,R5 ;判断表类型
CJNE A,#40H,ACOMM3A
INC RECCNT
MOV A,R3
ADD A,R5
MOV R3,A
LJMP RETURN
ACOMM3A: MOV COMMTYPE,#0
MOV RECCNT,#0
; LJMP RETURN
LJMP ACOMM2
ACOMM4: MOV A,R5 ;判断控制码
MOV B,A
CJNE A,#0A1H,ACOMM4A
MOV COMMTYPE,#01H ;设置采集器地址
LJMP ACOMM4H
ACOMM4A: CJNE A,#0A2H,ACOMM4B
MOV COMMTYPE,#02H ;增表地址
LJMP ACOMM4H
ACOMM4B: CJNE A,#0A3H,ACOMM4C
MOV COMMTYPE,#03H ;删表地址
LJMP ACOMM4H
ACOMM4C: CJNE A,#00H,ACOMM4D
MOV COMMTYPE,#04H ;读单表数据
LJMP ACOMM4H
ACOMM4D: CJNE A,#0A5H,ACOMM4E
MOV COMMTYPE,#05H ;读表地址
LJMP ACOMM4H
ACOMM4E: CJNE A,#0A6H,ACOMM4F
MOV COMMTYPE,#06H ;写表地址
LJMP ACOMM4H
ACOMM4F: CJNE A,#0A7H,ACOMM4G
MOV COMMTYPE,#07H ;抄表数据
LJMP ACOMM4H
ACOMM4G: MOV COMMTYPE,#0
MOV RECCNT,#0
; LJMP RETURN
LJMP ACOMM2
ACOMM4H: INC RECCNT
MOV A,B
ADD A,R3
MOV R3,A
LJMP RETURN
;*****************;设置采集器地址部分*****************
ACOMM4I: LJMP CCOMM
BCOMM: CJNE A,#01H,ACOMM4I
MOV A,RECCNT ;设置采集器地址
CLR C
SUBB A,#03H
RL A
MOV DPTR,#BCOMM1
JMP @A+DPTR
BCOMM1: AJMP BCOMM2 ;数据长度
AJMP BCOMM3 ;地址A6
AJMP BCOMM4 ;地址A5
AJMP BCOMM5 ;地址A4
AJMP BCOMM6 ;地址A3
AJMP BCOMM7 ;地址A2
AJMP BCOMM8 ;地址A1
AJMP BCOMM9 ;地址A0
AJMP BCOMMA ;序列号
AJMP BCOMMB ;校验和
AJMP BCOMMC ;结束符16H
BCOMM2: MOV A,R5 ;判数据长度
CJNE A,#08H,BCOMM2A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM2A: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
BCOMM3: MOV A,R5 ;暂存采集器地址A6
MOV ADDR6,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM4: MOV A,R5 ;暂存采集器地址A5
MOV ADDR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM5: MOV A,R5 ;暂存采集器地址A4
MOV ADDR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM6: MOV A,R5 ;暂存采集器地址A3
MOV ADDR3,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM7: MOV A,R5 ;暂存采集器地址A2
MOV ADDR2,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM8: MOV A,R5 ;暂存采集器地址A1
MOV ADDR1,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMM9: MOV A,R5 ;暂存采集器地址A0
MOV ADDR0,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMMA: MOV A,R5 ;暂存采集器序列号
MOV SERNO,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
BCOMMB: MOV A,R5 ;判校验和
MOV B,A
MOV A,R3
CJNE A,B,BCOMMD
INC RECCNT
LJMP RETURN
BCOMMC: MOV A,R5 ;判结束符
CJNE A,#16H,BCOMMD
LCALL STOR_ADDR ;存采集器地址及序列号
LCALL RET_DI
BCOMMD: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
;***************增表地址部分********************
BCOMMDA: LJMP DCOMM
CCOMM: CJNE A,#02H,BCOMMDA
MOV A,RECCNT ;增加表地址
CLR C
SUBB A,#03H
RL A
MOV DPTR,#CCOMM1
JMP @A+DPTR
CCOMM1: AJMP CCOMM2 ;数据长度
AJMP CCOMM3 ;地址A6
AJMP CCOMM4 ;地址A5
AJMP CCOMM5 ;地址A4
AJMP CCOMM6 ;地址A3
AJMP CCOMM7 ;地址A2
AJMP CCOMM8 ;地址A1
AJMP CCOMM9 ;地址A0
AJMP CCOMMA ;表地址A5
AJMP CCOMMB ;表地址A4
AJMP CCOMMC ;表地址A3
AJMP CCOMMD ;表地址A2
AJMP CCOMME ;表地址A1
AJMP CCOMMF ;表地址A0
AJMP CCOMMG ;校验和
AJMP CCOMMH ;结束符16H
CCOMM1A: LJMP CCOMMI
CCOMM2: MOV A,R5 ;判数据长度
CJNE A,#0DH,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM3: MOV A,R5 ;判采集器地址A6
CJNE A,CK_ADDR6,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM4: MOV A,R5 ;判采集器地址A5
CJNE A,CK_ADDR5,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM5: MOV A,R5 ;判采集器地址A4
CJNE A,CK_ADDR4,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM6: MOV A,R5 ;判采集器地址A3
CJNE A,CK_ADDR3,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
LJMP RETURN
CCOMM7: MOV A,R5 ;判采集器地址A2
CJNE A,CK_ADDR2,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM8: MOV A,R5 ;判采集器地址A1
CJNE A,CK_ADDR1,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMM9: MOV A,R5 ;判采集器地址A0
CJNE A,CK_ADDR0,CCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMA: MOV A,R5 ;暂存表地址A5
MOV DBADR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMB: MOV A,R5 ;暂存表地址A4
MOV DBADR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMC: MOV A,R5 ;暂存表地址A3
MOV DBADR3,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMD: MOV A,R5 ;暂存表地址A2
MOV DBADR2,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMME: MOV A,R5 ;暂存表地址A1
MOV DBADR1,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMF: MOV A,R5 ;暂存表地址A0
MOV DBADR0,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
CCOMMG: MOV A,R5 ;判校验和
MOV B,A
MOV A,R3
CJNE A,B,CCOMMI
INC RECCNT
LJMP RETURN
CCOMMH: MOV A,R5 ;判结束符
CJNE A,#16H,CCOMMI
MOV R0,#BADD5
MOV R1,#DBADR5
MOV R2,#6
CCOMMHA: MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,CCOMMHA
LCALL ADDR_ADD ;增加表地址
LCALL ADDEL
MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
CCOMMI: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
;***************删表地址部分***************
CCOMMJ: LJMP ECOMM
DCOMM: CJNE A,#03H,CCOMMJ
MOV A,RECCNT ;删除表地址
CLR C
SUBB A,#03H
RL A
MOV DPTR,#DCOMM1
JMP @A+DPTR
DCOMM1: AJMP DCOMM2 ;数据长度
AJMP DCOMM3 ;地址A6
AJMP DCOMM4 ;地址A5
AJMP DCOMM5 ;地址A4
AJMP DCOMM6 ;地址A3
AJMP DCOMM7 ;地址A2
AJMP DCOMM8 ;地址A1
AJMP DCOMM9 ;地址A0
AJMP DCOMMA ;表地址A5
AJMP DCOMMB ;表地址A4
AJMP DCOMMC ;表地址A3
AJMP DCOMMD ;表地址A2
AJMP DCOMME ;表地址A1
AJMP DCOMMF ;表地址A0
AJMP DCOMMG ;校验和
AJMP DCOMMH ;结束符16H
DCOMM1A: LJMP DCOMMI
DCOMM2: MOV A,R5 ;判数据长度
CJNE A,#0DH,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM3: MOV A,R5 ;判采集器地址A6
CJNE A,CK_ADDR6,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM4: MOV A,R5 ;判采集器地址A5
CJNE A,CK_ADDR5,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM5: MOV A,R5 ;判采集器地址A4
CJNE A,CK_ADDR4,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM6: MOV A,R5 ;判采集器地址A3
CJNE A,CK_ADDR3,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
LJMP RETURN
DCOMM7: MOV A,R5 ;判采集器地址A2
CJNE A,CK_ADDR2,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM8: MOV A,R5 ;判采集器地址A1
CJNE A,CK_ADDR1,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMM9: MOV A,R5 ;判采集器地址A0
CJNE A,CK_ADDR0,DCOMM1A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMA: MOV A,R5 ;暂存表地址A5
MOV DBADR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMB: MOV A,R5 ;暂存表地址A4
MOV DBADR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMC: MOV A,R5 ;暂存表地址A3
MOV DBADR3,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMD: MOV A,R5 ;暂存表地址A2
MOV DBADR2,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMME: MOV A,R5 ;暂存表地址A1
MOV DBADR1,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMF: MOV A,R5 ;暂存表地址A0
MOV DBADR0,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
DCOMMG: MOV A,R5 ;判校验和
MOV B,A
MOV A,R3
CJNE A,B,DCOMMI
INC RECCNT
LJMP RETURN
DCOMMH: MOV A,R5 ;判结束符
CJNE A,#16H,DCOMMI
MOV R0,#BADD5
MOV R1,#DBADR5
MOV R2,#6
DCOMMHA: MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,DCOMMHA
LCALL DEL_ADDR ;删除表地址
LCALL ADDEL
MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
DCOMMI: MOV COMMTYPE,#0
MOV RECCNT,#0
LJMP RETURN
;*********************读单表数据命令部分***********
DCOMMJ: LJMP FCOMM
ECOMM: CJNE A,#04H,DCOMMJ
MOV A,RECCNT ;读单表数据
CLR C
SUBB A,#03H
RL A
MOV DPTR,#ECOMM1
JMP @A+DPTR
ECOMM1: AJMP ECOMM2 ;表地址A5
AJMP ECOMM3 ;表地址A4
AJMP ECOMM4 ;表地址A3
AJMP ECOMM5 ;表地址A2
AJMP ECOMM6 ;表地址A1
AJMP ECOMM7 ;表地址A0
AJMP ECOMM8 ;控制码
AJMP ECOMM9 ;数据域长度
AJMP ECOMMA ;数据标识A0H
AJMP ECOMMB ;数据标识17H
AJMP ECOMMC ;序列号
AJMP ECOMMD ;数据
AJMP ECOMME ;校验和
AJMP ECOMMF ;结束符16H
ECOMM2: MOV A,R5 ;暂存表地址A5
MOV DBADR5,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
ECOMM3: MOV A,R5 ;暂存表地址A4
MOV DBADR4,A
ADD A,R3
MOV R3,A
INC RECCNT
LJMP RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -