作者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