还是串口通讯的问题,唉......(300分)

  • 主题发起人 主题发起人 U100
  • 开始时间 开始时间
U

U100

Unregistered / Unconfirmed
GUEST, unregistred user!
单片机和PC机的串口通讯,现在单片机输出字符串,PC上接到的却是乱码。
单机机的发送程序
org 0000h
  ajmp start
org 0100h
start:mov tmod,#20h ;设置定时器T1方式2
  mov pcon,#00h;使SMOD为0
  mov tll,#0fdh;波特率为9600b/s
  mov thl,#0fdh
  setb ea;开全局中断
  clr et1;关T1中断
  setb es;开串行中断
  setb trl;开T1定时
  mov scon,#50h;串行方式1,允许接收
  mov a,#53h
  mov sbuf,a
  jnb ti,$
  clr ti
end
PC上用的是spcomm,但是一直没有办法得到期望的字符,而是得到其他的字符。设置是波特率
9600,一位起始,八位数据,一位停止,无奇偶校验。我是实在没辙了,哪位能帮我,分可
以再加。
 
我和别人做过这种程序,不过用的是comport,没有问题的。
可能你要说的详细些
 
我的硬件是试验板--89C51,加MAX232芯片,自己焊了一个串口上去,用了仿真器。单片机
上的软件和上边相识,9600,一位起始,八位数据,一位停止,无奇偶校验等等设完后向
sbuf里写一个字符。Delphi上用spcomm和API我都试过了,双机,或者单机两串口之间互发
没有问题,但是单片机发出的PC只能收到一组乱码,得不到想要的字符。
jianl 能不能说说你的解决方法。
 
计算机设置成二进制接收方式
 
怎么个乱法?
发01 01 01 01
得到?
 
没做过这个,不过你可以自己写个线程接收数据,然后分析,看看问题出在什么地方。
我以前做红外线接收口(用串口加一些外围电路)的时候,就是这么干的。那时我连红外线的
编码格式都找不到。
 
zyb 能说具体点吗? 比如单片机输出abc,PC收到显示几个ASCII码
 
用zyb的方法应该可以解决,接收的时候有两种方法,一种是字符接收方式,一种是二进制接收方式
 
如何二进制接收方式呢
 
乱码可能的原因:
1.单片机发送的数据没有经过字符转换,或pc没有设成字符接受方式。
2.波特率不对.
3.多线程接受,或查询方式接受,如果插入Application.ProcessMessages时,也会出现乱码现象
spcom我没用过,可试一下mscomm,只要有耐心,总会找到问题的。
 
首先,把 MAX232 的 T1OUT(Pin14) 和 R1IN(Pin13) 短接;T2OUT(Pin7) 和 R2IN(Pin8) 短接。
在单片机仿真器上作自发自收的测试,如果通过,那么把线路重新连接好,测试从PC向MCU发送
数据(不管数据是否正确,但字节数必须对)。
SPCOMM 是比较公认的很成熟的串行口控件,不过,我个人认为它过于复杂,不很适合PC-MCU的
数据通讯,我比较倾向使用TCOMPORT,我使用的TCOMPORT对源码有些改动,让其效率更高了一
点,如果需要可在这里下载:http://www.smartvdox.com/upload/ezcomm.pas
另外提醒一点,你的单片机的晶体振荡频率是否 11.0592MHz?
 
sqlai
1.单片机发送的数据没有经过字符转换,或pc没有设成字符接受方式。能讲的在详细一点吗

谢谢大家支持
 
SupermanTm 你给的网址我打不开。
我用的是8052G仿真器,试验板上带的11.0592MHz晶振
仿真器的外部晶振也设为11.0592MHz了
 
你应当在PC上用公认可靠的通信接收软件进行一下测试,看看单片机
的设计部分有没有问题,这一点很重要。这些软件包括超级终端之类的。
怎么单片机软件设计还用汇编语言?用C-51不是更好吗?
 
---单片机发送的数据字符转换,
即如要发自符 '1',则单片机:
mov a,#31h
mov sbuf,a
即如要发自符 'A',则单片机:
mov a,#41h
mov sbuf,a

---pc设成字符接受方式,
如用MSCOMM 则设置属性:mscomm1.inputmode:=comInputModeText;
如用API则接收缓冲声明为CHAR 类型,例如:InputBuffer : Array [0..1024] of Char;





 
各位,还是不行啊[:(]
我设完波特率再
mov a,#31h
mov sbuf,a
发个1过去,收到的还是乱码,且有4个字节
接受程序用spomm,用API的还有用windows自带的超级终端都用过了,收到的是一样的乱码。
我都快怀疑是硬件问题了。
哪位做过类似的高人给段8051的发送程序啊。
 
发送程序有问题,你找个例子好好看看
 
还是波特率的问题!
 
后退
顶部