📄 hw_rcv.asm
字号:
;************************************************************
;文档类型: 原代码
;项目编号:
;文档编号:
;修订版本:
;生成日期:
;文档作者:
;审 核:
;************************************************************
;相关文档: 主程序,规约
;文档编号 说明
;************************************************************
;修订说明:
;修订版本
;修订说明:
;修订版本:
;************************************************************
$INCLUDE (PL3105.INC)
$INCLUDE (RAML128.INC)
$INCLUDE (RAMH128.INC)
$INCLUDE (io.INC)
$INCLUDE (CONST.INC)
CODE_REG SEGMENT CODE
RSEG CODE_REG
PUBLIC hw_rcv
EXTRN CODE (CLR_HW)
;--------------------------------------------------------------
;****************************************************
;串口0中断接收
;R0地址缓存,R7=计数器,R6=HW和校验,
;R2=RS485_CN接收计步器,R4数据缓存
;使用R2=RS485_CN变量,进行比较处理
;****************************************************
HW_RCV: NOP
NOP
JB RI,HW_BYTE1
MOV RS485_CN,#0
RETI ; LIHENG 07-3-26
HW_BYTE1:
PUSH PSW
PUSH ACC
PUSH B
SETB PSW.3 ;BANK 1
CLR PSW.4
MOV TMR_UART,#60 ;定时300MS
MOV A,SBUF0 ;统一移位处理SBUF
MOV R4,A ;方便后续统一处理SBUF
CLR RI
CJNE R2,#0,HW_NEXT1 ;接收计数器
CJNE A,#68H,HW_STOP
MOV R6,A ;校验和
MOV R7,#6 ;计数器;接收6位表号
MOV R0,#MTR_ADDR0
MOV RS485_CN,#1
JMP HW_RET
HW_NEXT1: CALL RCV_HW_ADDR
HW_RET:
CLR PSW.3
CLR PSW.4
POP B
POP ACC
POP PSW
NOP
NOP
NOP
RETI
; RET
HW_STOP: MOV RS485_CN,#0
MOV TMR_UART,#1 ;定时5MS
JMP HW_RET
;-------------------------------------------------------
RCV_HW_ADDR: CJNE R2,#1,HW_NEXT2 ;接收6位表号
MOV @R0,A
ADD A,R6
MOV R6,A
INC R0
DJNZ R7,HW_RET1
MOV RS485_CN,#2
RET
HW_NEXT2: CJNE R2,#2,HW_NEXT3
CJNE A,#68H,HW_ERR
ADD A,R6
MOV R6,A ;校验和
MOV RS485_CN,#3
HW_RET1: RET
HW_NEXT3: CJNE R2,#3,HW_NEXT4
MOV R0,#HW_CTR ;HW_CTR红外接收控制符
MOV @R0,A
HW_NEXT31: ADD A,R6
MOV R6,A
MOV RS485_CN,#4
RET
HW_ERR: MOV RS485_CN,#0 ;接收错误处理
MOV TMR_UART,#1 ;定时5MS
CALL CLR_HW ;清缓存
RET
HW_NEXT4: CJNE R2,#4,HW_NEXT5
MOV R7,A
MOV R0,#HW_L
MOV @R0,A
ADD A,R6
MOV R6,A ;校验和
CLR C
MOV A,R7
SUBB A,#HW_L0 ;最大数据长度 07-7-4 LIHENG
JNC HW_ERR ;字节数大于45
MOV R0,#HW_BUF0 ;数据接收BUF
MOV RS485_CN,#5
RET
HW_NEXT5: CJNE R2,#5,HW_NEXT6 ;接收数据体
MOV A,R7
JZ HW_NEXT66
CLR C
MOV A,R0
SUBB A,#HW_BUFEND ;冗余判断
JNC HW_ERR
MOV A,R4
MOV B,A
CLR C
SUBB A,#33H ;减33处理
MOV @R0,A
INC R0
MOV A,B
ADD A,R6
MOV R6,A
DJNZ R7,HW_RET1
MOV RS485_CN,#6
RET
HW_NEXT6: CJNE R2,#6,HW_NEXT7 ;接收校验
HW_NEXT66:
MOV A,R4
MOV B,R6
CJNE A,B,HW_ERR
MOV RS485_CN,#7
RET
HW_NEXT7: CJNE R2,#7,HW_ERR
CJNE A,#16H,HW_ERR
MOV HW_OK,#'H' ;红外数据包收到标志
MOV RS485_CN,#0
MOV TMR_UART,#0FFH
; CLR ES
; CLR EREN
HW_LOOP: NOP
NOP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -