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