📄 hw_zb.asm
字号:
;************************************************************
;文档类型: 原代码
;项目编号:
;文档编号:
;修订版本:
;生成日期:
;文档作者:
;审 核:
;************************************************************
;相关文档:
;文档编号
;************************************************************
;修订说明
;修订版本
;************************************************************
$INCLUDE (RAML128.INC)
$INCLUDE (RAMH128.INC)
$INCLUDE (CONST.INC)
CODE_REG SEGMENT CODE
RSEG CODE_REG
PUBLIC HW_ZB
EXTRN CODE (RESET_SYS)
EXTRN CODE (CLR_HW)
;*******************************
;串口接收到的645格式的数据转换为复费率载波格式
;---------------------------------------------
HW_ZB_EER: JMP RESET_SYS
HW_ZB:
NOP
NOP
NOP
; MOV A,HW_OK
SETB ZB_ERR_SNO
MOV R0,#BAK_ZB_BUF0 ; 07-7-10 liheng
MOV R1,#MTR_ADDR0
MOV A,@R0
MOV B,@R1
CJNE A,B,HW_ZB_ERR_SNO
MOV R0,#BAK_ZB_BUF1 ; 07-7-10 liheng
MOV R1,#MTR_ADDR1
MOV A,@R0
MOV B,@R1
CJNE A,B,HW_ZB_ERR_SNO
MOV R0,#BAK_ZB_BUF2 ; 07-7-10 liheng
MOV R1,#MTR_ADDR2
MOV A,@R0
MOV B,@R1
CJNE A,B,HW_ZB_ERR_SNO
MOV R0,#BAK_ZB_C ; 07-7-10 liheng
MOV A,@R0
ANL A,#0FH
MOV R1,#HW_CTR
MOV B,@R1
ANL B,#0FH
CJNE A,B,HW_ZB_ERR_SNO
MOV R1,#HW_CTR
MOV A,@R1
CJNE A,#0C1H,HW_ZB_C4
JMP HW_ZB_OK
HW_ZB_C4: CJNE A,#0C4H,HW_ZB_04
JMP HW_ZB_OK
HW_ZB_04:
CJNE A,#84H,HW_ZB_RD
JMP HW_ZB_OK
HW_ZB_ERR_SNO: SETB ZB_ERR_SNO
RET
HW_ZB_RD: ANL A,#0FH
CJNE A,#01, HW_ZB_OK
MOV R0,#BAK_ZB_DI0 ; 07-7-10 liheng
MOV R1,#HW_DI0
MOV A,@R0
MOV B,@R1
CJNE A,B,HW_ZB_ERR_SNO
MOV R0,#BAK_ZB_DI1 ; 07-7-10 liheng
MOV R1,#HW_DI1
MOV A,@R0
MOV B,@R1
CJNE A,B,HW_ZB_ERR_SNO
HW_ZB_OK: CLR ZB_ERR_SNO
MOV ZB_09H,#09H
MOV ZB_AFH,#0AFH
MOV R0,#TAR_ADDR0
MOV R1,#ADDRZJ0 ;被叫表号
MOV R5,#3
HW_RW_ZB_ADDR:
MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R5,HW_RW_ZB_ADDR
MOV R0,#HW_CTR ;控制码
MOV A,@R0
MOV ZB_CTR,A
MOV R0,#HW_L
MOV A,@R0
ADD A,#4
MOV ZB_L,A ;数据长度
ADD A,#5
MOV FS_JYL,A ;校验数据长度
ADD A,#4
MOV FS_L,A ;发送数据长度
;//070130
RW_OR_SPE: MOV R0,#HW_CTR ;控制码是81,C1,84,C4即读/写命令返回数据
MOV A,@R0 ; 按 READ_OR_WRITE 中的方式处理
XRL A,#81H
JZ READ_OR_WRITE
MOV A,@R0
XRL A,#0C1H
JZ READ_OR_WRITE
MOV A,@R0
XRL A,#84H
JZ READ_OR_WRITE
MOV A,@R0
XRL A,#0C4H
JZ READ_OR_WRITE
MOV R0,#HW_L ;非读/写命令的处理,返回数据无DI0,DI1
MOV A,@R0
MOV R3,A
CJNE A,#0,SLENGTH_PD0
MOV R1,#ZB_BUF0 ;接收到的645数据长度为0不进行标识
JMP HW_RW_ZB_BH
SLENGTH_PD0: MOV R0,#HW_DI0 ;不为0
;MOV R1,#ZB_DI0
MOV R1,#ZB_BUF4 ;无DI0,DI1,所以数据从 ZB_BUF4 写起
SPECIAL_CMD: MOV A,@R0 ;(ZB_BUF0-ZB_BUF3 对应A0,A1,A2,STATE)
MOV @R1,A
INC R0
INC R1
DEC R3
MOV A,R3
CJNE A,#0,SPECIAL_CMD
MOV R1,#ZB_BUF0
JMP HW_RW_ZB_BH
;//070130
READ_OR_WRITE: MOV R0,#HW_L
MOV A,@R0
MOV R3,A
CJNE A,#0,LENGTH_PD0
MOV R1,#ZB_BUF0 ;接收到的645数据长度为0不进行标识
JMP HW_RW_ZB_BH
LENGTH_PD0:
CJNE A,#1,LENGTH_PD1
MOV R0,#HW_BUF0 ;接收到的645数据长度为1
MOV A,@R0
MOV ZB_BUF4,A
MOV R1,#ZB_BUF0
JMP HW_RW_ZB_BH
LENGTH_PD1: ;接收到的645数据长度大于等于2
MOV R0,#HW_DI0
MOV R1,#ZB_DI0
MOV R5,#2
HW_RW_ZB_DI:
MOV A,@R0 ;标识符
MOV @R1,A
INC R0
INC R1
DEC R3
DJNZ R5,HW_RW_ZB_DI
MOV A,R3
CJNE A,#0,HW_ZB_DATA
JMP HW_RW_ZB_BH
HW_ZB_DATA: ;转换除标识符以外的数据
MOV R1,#ZB_BUF6
HW_ZB_DATA1:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R3,HW_ZB_DATA1
MOV R1,#ZB_BUF2
HW_RW_ZB_BH: MOV R0,#HW_CTR ;0701312
MOV A,@R0 ;
CJNE A,#8AH,HW_RW_ZB_BH0 ;如果返回CTRL为8A时
MOV R0,#MINUTE
MOV @R0,#55H ;马上使抄表号标志有效
MOV R0,#MTR_ADDR0 ;从返回的数据中抄表号
MOV R5,#3 ;不从RAM中抄表号(可能已经更改)
JMP HW_RW_ZB_BH1 ;0701312
HW_RW_ZB_BH0: MOV R0,#BH_0 ;主叫表号
MOV R5,#3
HW_RW_ZB_BH1:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R5,HW_RW_ZB_BH1
MOV A,B_STATE ;继电器状态
MOV @R1,A
INC R1
;--------------------------------------------------------------------
HW_RW_ZB_JY: ;计算载波数据校验字节
MOV R0,#TAR_ADDR0
MOV R6,#0
MOV R7,#0
HW_RW_ZB_JY0:
MOV A,@R0
INC R0
ADD A,R6
MOV R6,A
MOV A,R7
ADDC A,#0
MOV R7,A
DJNZ FS_JYL,HW_RW_ZB_JY0
MOV A,R6
MOV @R0,A ;存低字节数据校验
INC R0
MOV A,R7 ;存高字节数据校验
MOV @R0,A
MOV A,FS_L
ADD A,#2 ;多发2字节
MOV FS_L,A
CALL CLR_HW ;清串口缓存
NOP
NOP
NOP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -