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

📄 trancieve.asm

📁 一、 模块功能简介 &nbsp &#1048698 支持串口通信与电力线载波通信之间的转发; &nbsp &#1048698 ZF3106串口‐载波通讯模块可以完成载波信道到TTL串口
💻 ASM
字号:
;************************************************************
;文档类型: 原代码 
;项目编号: 
;文档编号:  
;修订版本: 
;生成日期: 
;文档作者: 
;审    核: 
;************************************************************
;相关文档: 主程序,规约
;文档编号      说明 
;************************************************************
;修订说明:载波
;修订版本
;修订说明:
;修订版本: 
;************************************************************
$INCLUDE	(IO.INC)
$INCLUDE	(PL3105.INC)
$INCLUDE	(CONST.INC)
$INCLUDE	(RAML128.INC)
$INCLUDE	(RAMH128.INC)
CODE_REG	SEGMENT	CODE
RSEG		CODE_REG
PUBLIC          TRANCIEVE
EXTRN   CODE    (CLR_ZB)
EXTRN   CODE    (RESET_SYS)
;--------------------------------------------------------------
TRANCIEVE:
             NOP
             NOP
             NOP
             CLR    EA
             PUSH   PSW
             PUSH   ACC
             PUSH   B
             SETB   RS1            ;BANK2
             CLR    RS0
             
             MOV    A,PLM_RS0              
             CJNE   A,#'F',ZB_RT1  ;载波发送接受判断
             MOV    TMR_ZB,#200
             CALL   TRANS_BEGIN    ;载波发送
             JMP    ZB_RT_END
             
ZB_RT1:              
             SETB   ZB_RW
             CLR    PLM_RS
             MOV    PLM_RS0,#0
             
             MOV     EXT_CFG,#01H            ;//070131
          ;   SETB   PLM_SSC
             
             MOV    C,ZB_RW
             MOV    F10,C
             CALL   ZB_R           ;载波接收子程序
               
ZB_RT_END:             
             CLR    RS0
             CLR    RS1
             POP    B
             POP    ACC
             POP    PSW
             SETB   EA
             NOP
             NOP
             NOP
             RETI
             
             
             ;RET
;*************************************************************************
;载波发射数据,FS_WS中为位计数,R7中为当前要发送的数据,R0欲发送数据地址,FS_L中为FS数据个数
;要发送的数据放入ZB_BUF中.数据字节数为L+6
;*************************************************************************
TRANS_BEGIN:	MOV	PLM_RST,#0A2H	
		SETB	PLM_RS
		MOV     A,PLM_RS0
		CJNE    A,#'F',TRANS_RET
		JB	T_0,ZB_FS_NBYTE            ;FFH发送完成?
		
		SETB	ZB_RW
		DJNZ    FS_WS,TRANS_RET            ;发送ZTS个1
		MOV	FS_WS,#8
		MOV	R0,#ZB_09H                 ;准备待发送的数据
		CLR     A
		XCH	A,@R0                      ;载波缓存清0
		MOV	R7,A
		SETB	T_0
                
TRANS_RET:	NOP
		NOP
		NOP
		RET
                		
ZB_FS_NBYTE:	MOV     A,R7
		RLC	A
		MOV	R7,A
		MOV	ZB_RW,C				;发送当前BIT
		DJNZ	FS_WS,TRANS_RET
		MOV	FS_WS,#8
		INC	R0
		MOV	A,@R0
		MOV	R7,A
		
		DJNZ	FS_L,TRANS_RET
	;	MOV	ZB_IFG,#0
		MOV     ZB_RC_SIGN,#0           ; LILHENG 07-7-4
		MOV     EXT_CFG,#01H            ;//070131
	;	SETB    PLM_SSC
		CLR	PLM_RS			;置载波为收态
		MOV     PLM_RS0,#0
		MOV     FS_WS,#ZTS
		MOV	TMR_ZB,#0FFH
		NOP
		NOP
		NOP
		RET
;-----------------------------------------------------------------------
;R4--接收到的数据   R3--接收到的高字节帧头/接收到的数据位数计数
;R6、R7--校验       R2--接收到的数据字节数计数
;R0--数据地址
;------------------------------------------------------------------------
;载波接收子程序
ZB_R:
                JB      SYN0_BIT,ZB_R_BYTE              ;R_SYNC_BIT=1,帧同步已被接收,进入正常接收状态
                MOV     A,R4
                MOV     C,F10
                RLC     A
                MOV     R4,A                         	;当未进入正常接收状态时,将接收窗口扩大为一个WORD
                MOV     A,R3
                RLC     A
                MOV     R3,A                            ;移入SYNC_WORD
                CJNE    A,#09H,ZB_R_END                 ;当R6!=0x09,接收到的高字节不符合,返回
                MOV     A,R4                            ;读入SYNC_WORD的低位字节
                CJNE    A,#0AFH,ZB_R_END   
                SETB    SYN0_BIT
                CLR     ADDR_BIT
                
                MOV     TMR_ZB,#40
                MOV     R4,#0
                MOV     R3,#8
                MOV     R2,#3
                MOV     R6,#0
                MOV     R7,#0
                MOV     R0,#TAR_ADDR0                    ;准备接收被叫地址
ZB_R_END: 
                RET 
;------------------------------------------------    
ZB_R_BYTE:
                MOV     A,R4
                MOV     C,F10
                RLC     A
                MOV     R4,A
                DJNZ    R3,ZB_R_END            ;已接收到一字节?
;-------------------------------------------------    
;接收3字节被叫地址           
                JB      ADDR_BIT,ZB_R_CTR      ;3字节地址接收完毕?
                MOV     A,R4
                MOV     @R0,A
                INC     R0
                ADD     A,R6
                MOV     R6,A
                MOV     A,R7
                ADDC    A,#0
                MOV     R7,A
                MOV     R4,#0
                MOV     R3,#8
                DJNZ    R2,ZB_R_BYTE_END             
                SETB    ADDR_BIT
                CLR     CTR_BIT
                MOV     R0,#ZB_CTR
ZB_R_BYTE_END:
                RET
;-------------------------------------------------
;接收控制码
ZB_R_CTR:
               JB      CTR_BIT,ZB_R_LENGTH            ;控制码接收完毕?
               MOV     A,R4
               MOV     @R0,A
               ADD     A,R6
               MOV     R6,A
               MOV     A,R7
               ADDC    A,#0
               MOV     R7,A
               MOV     R4,#0
               MOV     R3,#8
               SETB    CTR_BIT
               CLR     LENGH_BIT
               MOV     R0,#ZB_L
               RET
;-------------------------------------------------------
;接收数据长度
ZB_R_LENGTH:
               JB      LENGH_BIT,ZB_R_DATA           ;数据长度接收完毕?
               MOV     A,R4
               MOV     @R0,A
               MOV     R2,A                       ;数据长度存R2
               ADD     A,R6
               MOV     R6,A
               MOV     A,R7
               ADDC    A,#0
               MOV     R7,A
               MOV     R4,#0
               MOV     R3,#8
               MOV     A,R2
               JZ      ZB_R_ERR                 ;数据长度为0,接收错误
               CLR     C
               MOV     A,R2
	       SUBB    A,#ZB_L0                   ;接收最大数据长度 LIHENG 07-7-4
	       JNC     ZB_R_ERR
             
               MOV     TMR_ZB,#0FFH
               SETB    LENGH_BIT
               CLR     DATA_BIT
               MOV     R0,#ZB_BUF0
               RET
;--------------------------------------------------
ZB_R_ERR:
               MOV     TMR_ZB,#1                 ;载波接收错误处理
               MOV     ZB_RC_SIGN,#0
               CALL    CLR_ZB                    ;载波缓存清0
               RET
;---------------------------------------------------
;接收数据
ZB_R_DATA:
              JB       DATA_BIT,ZB_R_CSL         ;数据体接收完毕?
              MOV      TMR_ZB,#0FFH
              MOV      A,R4
              MOV      @R0,A
            
              ADD      A,R6
              MOV      R6,A
              MOV      A,R7
              ADDC     A,#0
              MOV      R7,A
              CLR      C
              MOV      A,R0
	      SUBB     A,#ZB_BUFEND              ;数据个数冗余处理
	      JNC      ZB_R_ERR
            
              INC      R0
              MOV      R4,#0
              MOV      R3,#8
              DJNZ     R2,ZB_RF3_END
              MOV      TMR_ZB,#20
              SETB     DATA_BIT
              CLR      CSL_BIT
ZB_RF3_END:
              RET
;--------------------------------------------------------
;接收校验码
ZB_R_CSL:
              JB       CSL_BIT,ZB_R_CSH       ;校验码低字节接收完毕?
              MOV      A,R4
              MOV      @R0,A
              MOV      B,R6
              CJNE     A,B,ZB_R_ERR           ;校验错误
            
              INC      R0
              MOV      R4,#0  
              MOV      R3,#8
              SETB     CSL_BIT         
              RET           

ZB_R_CSH:
              MOV      A,R4              ;接收数据校验高字节
              MOV      @R0,A
              MOV      B,R7
              CJNE     A,B,ZB_R_ERR
              MOV      R4,#0   
              MOV      R3,#0
              MOV      ZB_RC_SIGN,#0     ;接收数据完成处理
              MOV      ZB_OK,#'O'
              MOV      TMR_ZB,#160
              
              RET
;------------------------------------------                 
              END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -