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

📄 hw_zb.asm

📁 一、 模块功能简介 &nbsp &#1048698 支持串口通信与电力线载波通信之间的转发; &nbsp &#1048698 ZF3106串口‐载波通讯模块可以完成载波信道到TTL串口
💻 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 + -