📄 zb_do_with.asm
字号:
;************************************************************
;文档类型: 原代码
;项目编号:
;文档编号:
;修订版本:
;生成日期:
;文档作者:
;审 核:
;************************************************************
;相关文档:
;文档编号
;************************************************************
;修订说明
;修订版本
;************************************************************
$INCLUDE (RAML128.INC)
$INCLUDE (RAMH128.INC)
$INCLUDE (IO.INC)
$INCLUDE (PL3105.INC)
CODE_REG SEGMENT CODE
RSEG CODE_REG
PUBLIC ZB_DO_WITH
EXTRN CODE (RESET_SYS)
EXTRN CODE (HW_DO_WITH)
EXTRN CODE (CLR_ZB)
EXTRN CODE (GB_BH)
;*******************************
ZB_EER: JMP RESET_SYS
ZB_DO_WITH:
NOP
NOP
NOP
MOV R0,#ZB_OK
MOV A,@R0
CJNE A,#'O',ZB_EER
;ZB检查表号是否为0?
MOV R7,#3
MOV R1,#TAR_ADDR0
CMP_SN0:
MOV A,@R1
JNZ CHK_ZB_SN1
INC R1
DJNZ R7,CMP_SN0
CALL CLR_ZB ;表号为0清载波缓存后返回
RET
;------------------------------------------------------
CHK_ZB_SN1: ;是否为广播地址
MOV R7,#3
MOV R1,#TAR_ADDR0
CHK_ZB_SN1_LOOP:
MOV A,@R1
INC R1
CJNE A,#99H,CHK_ZB_SNO
DJNZ R7,CHK_ZB_SN1_LOOP
JMP ZB_DO_0
;--------------------------------------------------------
;ZB检查表号是否是正确?
CHK_ZB_SNO:
MOV R0,#BH_BAK_0 ;比较表号与备份表号是否一致
MOV A,@R0
MOV B,BH_0
CJNE A,B,ZB_SNO_ERR
MOV R6,A
MOV R0,#BH_BAK_1
MOV A,@R0
MOV B,BH_1
CJNE A,B,ZB_SNO_ERR
ADD A,R6
MOV R6,A
MOV R0,#BH_BAK_2
MOV A,@R0
MOV B,BH_2
CJNE A,B,ZB_SNO_ERR
ADD A,R6
MOV R6,A
MOV R0,#BH_BAK_3
MOV A,@R0
MOV B,BH_3
CJNE A,B,ZB_SNO_ERR
ADD A,R6
MOV R6,A
MOV R0,#BH_BAK_4
MOV A,@R0
MOV B,BH_4
CJNE A,B,ZB_SNO_ERR
ADD A,R6
MOV R6,A
MOV R0,#BH_BAK_5
MOV A,@R0
MOV B,BH_5
CJNE A,B,ZB_SNO_ERR
ADD A,R6
ADD A,#'X'
MOV R6,A
MOV R0,#BH_BAK_JY ;表号备份是否一致
MOV A,@R0
MOV B,BH_JY
CJNE A,B,ZB_SNO_ERR
MOV A,R6
CJNE A,B,ZB_SNO_ERR ;校验是否正确
CLR ERR_SNO ;
MOV A,TAR_ADDR0 ;比较接收到的被叫表号与本表表号
MOV B,BH_0
CJNE A,B,DO_ZB_RET
; CJNE A,B,ZB_SNO_ERR ; 直抄命令都转发 07-7-3 LIHENG
MOV A,TAR_ADDR1
MOV B,BH_1
CJNE A,B,DO_ZB_RET
; CJNE A,B,ZB_SNO_ERR
MOV A,TAR_ADDR2
MOV B,BH_2
CJNE A,B,DO_ZB_RET
; CJNE A,B,ZB_SNO_ERR
MOV ZB_BH_BUF0,BH_0 ; 07-7-3 liheng
MOV ZB_BH_BUF1,BH_1
MOV ZB_BH_BUF2,BH_2
MOV ZB_BH_BUF3,BH_3
MOV ZB_BH_BUF4,BH_4
MOV ZB_BH_BUF5,BH_5
JMP ZB_DO_1
DO_ZB_RET:
CALL CLR_ZB ;非本表抄作数据,清载波缓存返回
RET
ZB_SNO_ERR: MOV ZB_BH_BUF0,TAR_ADDR0 ; 07-7-3 liheng
MOV ZB_BH_BUF1,TAR_ADDR1
MOV ZB_BH_BUF2,TAR_ADDR2
MOV ZB_BH_BUF3,#0AAH
MOV ZB_BH_BUF4,#0AAH
MOV ZB_BH_BUF5,#0AAH
SETB ERR_SNO
JMP ZB_DO_1
ZB_ZJ_UP1: JB ERR_SNO,DO_ZB_RET ;
JNB ZJ_TX_BIT,DO_ZB_RET
CLR ZJ_TX_BIT
JMP ZB_ZJ_UP ;MOVE TO RUJ
ZB_ZJ_DOWN1: JB ERR_SNO,DO_ZB_RET ;
SETB ZJ_TX_BIT
JMP ZB_ZJ_DOWN ;MOVE TO RU_N
ZB_DO_1:
MOV A,ZB_CTR
JB ACC.7,ZB_ZJ_UP1
JB ACC.6,ZB_ZJ_DOWN1 ;中继
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ZB_DO_WITH_RD:
MOV R0,#BAK_ZB_BUF0 ; 07-7-3 liheng
MOV @R0,TAR_ADDR0
MOV R0,#BAK_ZB_BUF1 ; 07-7-3 liheng
MOV @R0,TAR_ADDR1
MOV R0,#BAK_ZB_BUF2 ; 07-7-3 liheng
MOV @R0,TAR_ADDR2
MOV R0,#BAK_ZB_C ; 07-7-3 liheng
MOV @R0,ZB_CTR
MOV R0,#BAK_ZB_DI0 ; 07-7-3 liheng
MOV @R0,ZB_DI0
MOV R0,#BAK_ZB_DI1 ; 07-7-3 liheng
MOV @R0,ZB_DI1
CLR EREN
CLR ES
MOV A,ZB_CTR
ANL A,#0FH
CJNE A,#01H,ZB_DO_WITH_W ;==1读数据
MOV R0,#HW_CTR
MOV @R0,#01H
JMP ZB_DO_WITH_RD1
ZB_DO_WITH_W:
MOV A,ZB_CTR
ANL A,#0FH
CJNE A,#04H,ZB_DO_WITH_S ;写数据
; MOV MINUTE,#55H ;设置一分钟读取表号标志,保证重新设置表号后能马上读取新表号
MOV TMR_M1,#3 ; 07-4-29 LIHENG
MOV R0,#HW_CTR
MOV @R0,#04H
JMP ZB_DO_WITH_RD1
ZB_DO_WITH_S: ;//070131, 非广播且非读/写命令的处理
; MOV ADDRZJ0,ZB_BUF0
; MOV ADDRZJ1,ZB_BUF1
; MOV ADDRZJ2,ZB_BUF2 ;保存主叫地址
MOV R0,#ADDRZJ0
MOV A,ZB_BUF0
MOV @R0,A
INC R0
MOV A,ZB_BUF1
MOV @R0,A
INC R0
MOV A,ZB_BUF2
MOV @R0,A
MOV TMR_M1,#3 ; 07-4-29 LIHENG
; MOV MINUTE,#55H ;070131 设置一分钟读取表号标志,保证重新设置表号后能马上读取新表号
; MOV R0,#HW_CTR
; MOV @R0,A ;//070130
MOV R0,#HW_681 ;//070130
MOV @R0,#068H
MOV R0,#HW_682
MOV @R0,#068H
MOV R0,#MTR_ADDR0
; MOV R3,#6
MOV @R0,ZB_BH_BUF0 ; 07-7-3 liheng
INC R0
MOV @R0,ZB_BH_BUF1
INC R0
MOV @R0,ZB_BH_BUF2
INC R0
MOV @R0,ZB_BH_BUF3
INC R0
MOV @R0,ZB_BH_BUF4
INC R0
MOV @R0,ZB_BH_BUF5
; MOV GB_OR_SP,#1
; DJNZ R3,ZB_GB_ADDR ;//070130
JMP ZB_GB_CTRL ;070131 无DI0,DI1,后续处理与广播方式相同
ZB_DO_WITH_RD1:
CALL ZB_TO_HW ;载波数据转换为645格式
CALL HW_DO_WITH ;串口发送645格式数据
MOV ZB_HW,#'O' ;置载波抄表标志,与一分钟读表号命令区别
; MOV TMR_INIT1,#3 ; 07-3-23 LIHENG
MOV R0,#TMR_INIT1
MOV @R0,#3
MOV RS485_CN,#0 ; 07-3-23 liheng 串口重新接受
ZB_DO_WITH_END:
NOP
CALL CLR_ZB ;清缓存返回
NOP
RET
;--------------------------------------------------
;上行载波数据转发
ZB_ZJ_UP:
; MOV R0,#ADDRZJ0
MOV R0,#ZB_ADDR_ZJ0 ; 2007-07-10 LIHENG
MOV R1,#TAR_ADDR0 ;被叫地址
MOV A,@R0
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
INC R0
INC R1
MOV A,@R0
MOV @R1,A
MOV A,ZB_L
ADD A,#5
MOV FS_JYL,A
MOV FS_L,A
CALL ZB_FS_CHK ;校验
MOV A,FS_L
ADD A,#5 ;多发一字节
MOV FS_L,A
MOV ZB_09H,#09H
MOV ZB_AFH,#0AFH
SETB PLM_RS
MOV PLM_RS0,#'F'
MOV EXT_CFG,#01H ;//070131
; SETB PLM_SSC
MOV PLM_RST,#0A2H
MOV TMR_ZB,#0FFH
RET
;----------------------------------------------------
ZB_ERR: JMP RESET_SYS
ZB_ZJ_DOWN:
MOV A,ZB_CTR
JNB ACC.6,ZB_ERR ;中继?
MOV B,A
ANL A,#00110000B
SWAP A
MOV ZJ_NUM,A ;中继NUM=ZJ_NUM+1
JZ NO_ZJ ;1 级
MOV A,B
SWAP A
DEC A
SWAP A
MOV R0,#ZB_CTR
MOV @R0,A ;NEW ZB_CTR
JMP NOR_ZJ
NO_ZJ: ;一级中继
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -