16F877A UART 模組測試 II

前一篇UART測試只有用道TxD將Data送到終端機上,

這次加上了RxD的運用,由終端機這端按下鍵盤任何一鍵

由RxD接收再由TxD送出You press the key ?字串

其中RxD以中斷方式控制,Program開始執行時進入無窮迴圈

等待CPU中斷觸發

	list	p=16f877a,r=DEC

	include"p16f877.inc"
temp	equ	0x20
cnt	equ	0x21
DEY1	equ	0x22
DEY2	equ	0x23
DEY3	equ	0x24
W_temp	equ	0x25
STATUS_temp	equ	0x26
temp1	equ	0x27

	org	0x00
	goto	main

	;中斷向量0x04
	org	0x04
	movwf	W_temp
	swapf	STATUS,W
	movwf	STATUS_temp
	banksel	PIR1
	btfsc	PIR1,RCIF	;檢查RCIF是否為1
	call	send_data	;溢位,作清除動作
	swapf	STATUS_temp,W
	movwf	STATUS
	swapf	W_temp,F
	swapf	W_temp,W

	retfie

main:
	call	UART_Init
	banksel	temp
	clrf	temp
	movlw	.18
	movwf	cnt
	call	DELAY		;延遲程式執行
	goto	$

send_data:
	call	DELAY
	banksel	PIR1
	btfsc	PIR1,TXIF
	goto	get_data
	goto	send_data
get_data:
	nop
	movf	temp,W
	call	text_DT1
	banksel	TXREG
	movwf	TXREG
	nop
	incf	temp,F
	decfsz	cnt,F
	goto	send_data
get_key:
	banksel	PIR1
	btfss	PIR1,TXIF
	goto	get_key
	banksel	RCREG
	movf	RCREG,W
	movwf	TXREG
	clrf	temp
	movlw	.18
	movwf	cnt
	return

text_DT1:	addwf	PCL
	DT	"you press the key "

;;;;;;;;;;;;;;;;;;;;
UART_Init:
	banksel	TRISC
	bcf		TRISC,6
	bsf		TRISC,7

	movlw	.25
	movwf	SPBRG		;設定鮑率
	bsf		TXSTA,BRGH	;選擇快速鮑率
	bcf		TXSTA,SYNC	;選擇非同步模式
	bcf		TXSTA,TX9D	;選擇8bit資料封包
	bsf		TXSTA,TXEN	;致能傳送模組

	banksel	RCSTA
	bsf		RCSTA,CREN	;致能接收模組
	bcf		RCSTA,RX9D	;選擇8bit資料封包
	bsf		RCSTA,SPEN	;致能串列通訊模組
	bsf		INTCON,GIE	;致能中斷總開關
	bsf		INTCON,PEIE	;致能周邊中斷
	banksel	PIE1
	bsf		PIE1,RCIE	;致能傳送模組中斷
				;傳送模組中斷旗號RCIF需以讀取
				;RCREG方式清除
	return

DELAY:
	MOVLW   .10
	MOVWF   DEY3
DELAY1:
	MOVLW   .250
	MOVWF   DEY2
INNER2:
	MOVLW   .25
	MOVWF   DEY1
INNER1:
	DECFSZ  DEY1,F
	GOTO    INNER1
	DECFSZ  DEY2,F
	GOTO    INNER2
	DECFSZ  DEY3,F
	GOTO    DELAY1
	RETURN
	END

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料