⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zb_do_with.asm

📁 一、 模块功能简介 &nbsp &#1048698 支持串口通信与电力线载波通信之间的转发; &nbsp &#1048698 ZF3106串口‐载波通讯模块可以完成载波信道到TTL串口
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;************************************************************
;文档类型: 原代码 
;项目编号: 
;文档编号: 
;修订版本:
;生成日期: 
;文档作者:
;审    核: 
;************************************************************
;相关文档:
;文档编号   
;************************************************************
;修订说明
;修订版本
;************************************************************
$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 + -