?? 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 + -