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