?? rx2120.asm
字號(hào):
;********************RX2120********************
;本程序?qū)崿F(xiàn)單片機(jī)從2120接收多字節(jié)數(shù)據(jù)。
;入口參數(shù):波特率延時(shí)因子在SOU中,數(shù)據(jù)存放的首地址在DADR中,接收的字節(jié)數(shù)在W中。
;出口參數(shù):接收到的數(shù)據(jù)在指定RAM中。
;占用資源:W,STATUS,FSR,RD0,RD1,022H,023H,024H,028H~02AH,3重堆棧。
;說明: 1.SOU的計(jì)算方法為: SOU=Fosc/(16*bit2120)-4。其中,F(xiàn)osc為單片機(jī)的主頻,
; bit2120為由硬件選擇的2120的波特率。
; 2.要保證MCP2120和單片機(jī)的波特率匹配。
; 3.本程序用在硬件選擇波特率的情況下。
IFNDEF RX21201
#DEFINE RX21201
#define RXD2120 PORTD,1 ;來自 MCP2120 的信號(hào)
#define TXD PORTD,2 ;送到 MCP2120 的信號(hào)
#define EN2120 PORTD,0 ;2120使能禁止信號(hào)
;*****************************************************************
IFNDEF TX21201
DELAY3 MOVWF TEMP2 ;產(chǎn)生波特率的延時(shí)程序
DELLP NOP
DECFSZ TEMP2,F
GOTO DELLP
RETLW 0
ENDIF
;****************************************************************
RX2120 MOVWF TEMP1 ;字節(jié)數(shù)存放在TEMP1
MOVF DADR,W
MOVWF FSR ;數(shù)據(jù)存放首地址
BCF EN2120
BSF STATUS,RP0
BSF TRISD,1;
BCF TRISD,0
BCF STATUS,RP0
MOVLW D'08' ;位計(jì)數(shù)
MOVWF CNT
MOVF SOU,W
MOVWF TEMP3 ;TEMP3存放位延時(shí)時(shí)間
BSF EN2120 ;2120使能
MOVLW D'230' ;延時(shí)1MS
CALL DELAY3
LOOP112 BTFSC RXD2120 ;檢查是否有來自 MCP2120 的信號(hào)
GOTO $-1
CALL RXSER
MOVF SOU,W
MOVWF INDF
INCF FSR,F
DECFSZ TEMP1,F ;數(shù)據(jù)接收完畢?
GOTO LOOP112
BCF EN2120 ;2120禁用
RETURN
;********************接收一個(gè)字節(jié)數(shù)據(jù)********************
RXSER NOP ;接收到起始位后延時(shí)
NOP
NOP
NOP
NOP
NOP
NOP
RXDB MOVF TEMP3,W
CALL DELAY3
NOP
NOP
RRF SOU,F ;字節(jié)移位
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' ;恢復(fù)位計(jì)數(shù)值
MOVWF CNT
MOVF TEMP3,W ;結(jié)束位延時(shí)
CALL DELAY3
RETLW 0
ENDIF
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -