📄 rx2120.asm
字号:
;********************RX2120********************
;本程序实现单片机从2120接收多字节数据。
;入口参数:波特率延时因子在SOU中,数据存放的首地址在DADR中,接收的字节数在W中。
;出口参数:接收到的数据在指定RAM中。
;占用资源:W,STATUS,FSR,RD0,RD1,022H,023H,024H,028H~02AH,3重堆栈。
;说明: 1.SOU的计算方法为: SOU=Fosc/(16*bit2120)-4。其中,Fosc为单片机的主频,
; bit2120为由硬件选择的2120的波特率。
; 2.要保证MCP2120和单片机的波特率匹配。
; 3.本程序用在硬件选择波特率的情况下。
IFNDEF RX21201
#DEFINE RX21201
#define RXD2120 PORTD,1 ;来自 MCP2120 的信号
#define TXD PORTD,2 ;送到 MCP2120 的信号
#define EN2120 PORTD,0 ;2120使能禁止信号
;*****************************************************************
IFNDEF TX21201
DELAY3 MOVWF TEMP2 ;产生波特率的延时程序
DELLP NOP
DECFSZ TEMP2,F
GOTO DELLP
RETLW 0
ENDIF
;****************************************************************
RX2120 MOVWF TEMP1 ;字节数存放在TEMP1
MOVF DADR,W
MOVWF FSR ;数据存放首地址
BCF EN2120
BSF STATUS,RP0
BSF TRISD,1;
BCF TRISD,0
BCF STATUS,RP0
MOVLW D'08' ;位计数
MOVWF CNT
MOVF SOU,W
MOVWF TEMP3 ;TEMP3存放位延时时间
BSF EN2120 ;2120使能
MOVLW D'230' ;延时1MS
CALL DELAY3
LOOP112 BTFSC RXD2120 ;检查是否有来自 MCP2120 的信号
GOTO $-1
CALL RXSER
MOVF SOU,W
MOVWF INDF
INCF FSR,F
DECFSZ TEMP1,F ;数据接收完毕?
GOTO LOOP112
BCF EN2120 ;2120禁用
RETURN
;********************接收一个字节数据********************
RXSER NOP ;接收到起始位后延时
NOP
NOP
NOP
NOP
NOP
NOP
RXDB MOVF TEMP3,W
CALL DELAY3
NOP
NOP
RRF SOU,F ;字节移位
BTFSC RXD2120 ; rxd=0 则 bit=0
GOTO RXDB1 ; rxd=1 则 bit=1
RXDB0 NOP
NOP
BCF SOU,7 ;BIT=0
DECFSZ CNT,F ;接收完了吗?
GOTO RXDB
GOTO RXSP
RXDB1 NOP
BSF SOU,7
DECFSZ CNT,F ;8位接收完了吗?
GOTO RXDB
GOTO RXSP
RXSP MOVLW D'08' ;恢复位计数值
MOVWF CNT
MOVF TEMP3,W ;结束位延时
CALL DELAY3
RETLW 0
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -