作者sdfwer ( 尋)
看板Electronics
標題[問題] 透過8051接收rs232訊號 送LCM顯示
時間Sat May 9 00:16:14 2009
我的目標是使用8051不斷讀取 RXD 收到的字串
將字串送到LCM顯示
目前有個裝置會連續以rs232送出ASCII字串
我希望8051可以接收裝置傳出的字串,然後送到LCM
以下是主要的CODE
START:
MOV TMOD,#20H ;TIMER1,MODE1
ANL PCON,#3FH ;SMOD=0
MOV TH1,#0F4H ;BAUDRATE=2400
SETB TR1 ;啟動 Timer1
MOV SCON,
#11010000B
;
READ:
JNB RI,$ ;判斷RI是否為0,0的話等待,1的話下一步
CLR RI ;清除RI
MOV A,SBUF ;將SBUF暫存器內的8bits(某字元)送去A
CALL OUTPUT
JMP READ ;等待下一個字元送入
;
OUTPUT:
SETB P1.6 ;EN=1 LCM設定
CLR P1.5 ;RW=0 LCM設定
SETB P1.4 ;RS=1 LCM設定
MOV p2,A ;輸出至LCM顯示 8bits (LCM連接於P2.)
CLR P1.6 ; LCM設定
RET
裝置的輸出訊號有用電腦的terminal軟體檢視,確定能輸出字串 (BAUDRATE=2400)
但是送到LCM顯示時,卻會顯示"亂碼"
以下有兩種猜測,但是卻有實驗否定,因此不曉得原因為何
猜測1.
裝置傳送的字串太快,8051的SBUF暫存器來不及傳送到A暫存器就被覆蓋
(
或是A暫存器來不及傳送到顯示器就被覆蓋)
->以terminal軟體連打字串,以8051 RXD接收後傳送到LCM顯示 ok
猜測2.
LCM顯示器來不及顯示字串
->以8051不斷送字串到LCM顯示 OK
是否該將SBUF讀到的字串,"即時"的依序的存到一段位址內。
等到裝置傳送完字串,8051再將這段位置的字串一一輸出顯示?
請問以上的猜測是否正確?
請問版上前輩有何經驗建議或是解決方式?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.192.73
1F:推 beagle:你的 8051 是接何種 crystal ? cycle 是 6T 還是 1T ? 05/09 00:57
2F:→ beagle:這會影響 baud rate 所以先檢查看看 05/09 00:58
3F:→ narcissusli:加長裝置傳送的interval,不然如果字串太長,51會溢位 05/09 04:33
4F:→ narcissusli:先拉長時間,一個字一個字慢慢送. 05/09 04:34
5F:推 utility:所以問題是只要接所謂的裝置傳送資料.就會在LCM顯示亂碼? 05/09 10:56
6F:→ utility:振盪器頻率是多少?檢查一下用這頻率產生的鮑率誤差有多大? 05/09 10:58
7F:→ utility:另一個可能.用示波器勾裝置和8051之間的波形是否不夠好. 05/09 10:59
8F:→ utility:反正玩MCU這種東西..有問題時.就是量波形.最直接.. 05/09 11:01
9F:推 ksmrt0123:可能是兩邊baudrate有誤差... 裝置的比2400快一點, 05/09 12:57
10F:→ ksmrt0123:51的慢一點... 05/09 12:58