16F877A UART 模組測試

Universal Asynchronous Receiver Transmitter (UART)

這次放假幾天都在做PIC16F877A的UART模組測試,

也因為之前沒用過,感覺很陌生!跌跌撞撞還是撞出點東西來了,

這次實驗結果主要只用到TxD的功能RxD其實與TxD的使用方法一樣

概念上只是反過來而已.

這次主要是用UART模組透過RS232方式與PC 終端機通信,

只是很單純的使用16F877A將Data從TxD腳傳出給PC端

	list	p=16f877a,r=DEC

	include"p16f877.inc"

temp	equ	0x20
cnt		equ	0x21
DEY1	equ	0x22
DEY2	equ	0x23
DEY3	equ	0x24

	org	0x0
	goto	main

main:
	call	UART_Init
	clrf	temp
	movlw	.35
	movwf	cnt
	call	DELAY		;延遲程式執行
	call	send_data	;防止訊號錯誤
	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
	return

text_DT1:	addwf	PCL
	DT	"Hello!This is UART function test..."
;;;;;;;;;;;;;;;;;;;;
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	;致能串列通訊模組
	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

因為這次印表機沒墨水,搞得我沒辦法洗板子,所以只好用麵包板哩

Image00002

TxD腳位信號

Image00001

終端機輸出結果(顯示字串 Hello!This is UART Function test...)

Image00003

這是終端機的操作畫面

發表迴響

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