📄 trancieve.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 + -