📄 multibyte-receive.txt
字号:
STATUS EQU 03H ; 定义状态寄存器地址
PORTA EQU 05H
PORTB EQU 06H ;端口B的数据寄存器地址
TRISA EQU 5H
TRISB EQU 6H ;定义端口B的方向控制寄存器地址
CMCON EQU 1FH
SPBRG EQU 19H
TXSTA EQU 18H
RCSTA EQU 18H
TXREG EQU 19H
RCREG EQU 1AH
PIR1 EQU 0CH
dataL EQU 20H
DATA1 EQU 21H
PIE1 EQU 0CH
INTCON EQU 0BH
RECEIVE_DATA EQU 23H
FSR EQU 04H
INDF EQU 00H
COUNT EQU 30H
;----------------------
RP0 EQU 5 ;定义状态寄存器中的RAM页选位RP0
RP1 EQU 6
RCIF EQU 5
TRMT EQU 1
KEY1 EQU 6
KEY2 EQU 7
RCIE EQU 5
PEIE EQU 6
GIE EQU 7
TXIE EQU 4
TXIF EQU 4
IRP EQU 7
ORG 0x000 ; Program starts at 0x000
; ----------------
; INITIALIZE PORTS
; ----------------
;
GOTO MAIN ;跳转到初始化程序
ORG 0X0004 ;中断矢量
BCF STATUS,RP0
BTFSS PIR1,RCIF
GOTO TX_INT
RC_INT
NOP
MOVF RCREG,W
MOVWF INDF
INCF FSR
INCF COUNT
NOP
GOTO INT_END
TX_INT
BSF STATUS,RP0
BTFSS PIE1,TXIE
GOTO INT_END
BCF STATUS,RP0
BTFSS PIR1,TXIF
GOTO INT_END
MOVLW 0FFH
MOVWF TXREG
bsf STATUS,RP0 ; RAM PAGE 1
WAIT_SEND btfss TXSTA,TRMT ; (1) transmission is complete if hi
goto WAIT_SEND
BSF STATUS,RP0 ; close send int
BCF PIE1,TXIE
bcf STATUS,RP0 ; RAM PAGE 0
INT_END
RETFIE
MAIN movlw 7
movwf CMCON ; CMCON=7 set comperators off
INITA
BCF STATUS,RP0
BCF STATUS,RP1
bsf STATUS,RP0 ; RAM PAGE 1
movlw b'11110010' ; RB7-RB4 and RB1(RX)=input, others output
movwf TRISB
; ------------------------------------
; SET BAUD RATE TO COMMUNICATE WITH PC
; ------------------------------------
; Boot Baud Rate = 9600, No Parity, 1 Stop Bit
; BSF STATUS,RP0
movlw 0x19 ; 0x19=9600 bps (0x0C=19200 bps)
movwf SPBRG
movlw b'00100100' ; brgh = high (2)
movwf TXSTA ; enable Async Transmission, set brgh
BSF PIE1,RCIE ; open receive int
; BCF PIE1,TXIE ; close send int
BCF STATUS,RP0
MOVLW B'10010000'
movwf RCSTA
BCF PIR1,RCIF
CLRF INTCON
BSF INTCON,GIE ;使能全局中断使能位
BSF INTCON,PEIE ;使能外设中断使能位
BSF STATUS,RP0
BCF STATUS,RP0
BCF STATUS,IRP
MOVLW 0A0H
MOVWF FSR
CLRF COUNT
LOOP
NOP
MOVLW 05H
XORWF COUNT,W
BTFSS STATUS,2
GOTO LOOP_END
GOTO SEND_BACK
LOOP_END
NOP
GOTO LOOP
SEND_BACK
MOVLW 0A0H
MOVWF FSR
SEND_LOOP
MOVF INDF,W
CALL SEND
INCF FSR
DECFSZ COUNT
GOTO SEND_LOOP
GOTO LOOP_END
SEND
movwf TXREG ; send data in W
bsf STATUS,RP0 ; RAM PAGE 1
WtHere btfss TXSTA,TRMT ; (1) transmission is complete if hi
goto WtHere
bcf STATUS,RP0 ; RAM PAGE 0
return
DLY10MS MOVLW 05H ;不是10MS
MOVWF 63H ;(254*3+2+3+2)*4+2=3078
DLY10MS1 MOVLW 0FFH
MOVWF 64H
DLY10MS2 DECFSZ 64H
GOTO DLY10MS2
DECFSZ 63H
GOTO DLY10MS1
RETLW 00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -