如何从串口接收到正确的数据?

juer 2001-08-21 04:55:10
我用 vb6.0的mscomm控件做了一个串口通讯程序,因为只用作接收数据,所以串口上只接了两根线:地线和接收数据线。在接受从单片机上传输来的数据时,使用16进制显示时,发现高4位数据不对。在本机构成回路时,发送的字符接收是正确的,但从单片机上接收的数据是大于128的二进制数。我分别使用了查询和中断方式,但结果都一样,后来又接受从另一个单片机上发送的数据时,发现本来5个数为一周期的数据,显示来只有4个数一周期,并且只有一个数ff是正确的。请问会是什么地方出现问题?



...全文
194 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunbf 2001-08-21
  • 打赏
  • 举报
回复
单片机发送的数据应是十六进制ASCII,接收到的才是你想要的字符,
例如:接收字符"A",单片机发送的应该是"41"才行
xuqy2001 2001-08-21
  • 打赏
  • 举报
回复
你的波特律可能有问题!比接受的速率快!整个系统的通讯协议的问题
fucool 2001-08-21
  • 打赏
  • 举报
回复
试试下面的
Do
nReceiveCount = MSComm1.InBufferCount
Sleep (20) 'API 函数,挂起当前进程一段时间
Loop Until MSComm1.InBufferCount = nReceiveCount
StrFromComm = MSComm1.Input
另外注意编码格式。
sunking 2001-08-21
  • 打赏
  • 举报
回复
这主要是因为在vb中的编码系统是Unicode而单片机中的是ANSI格式的,你用StrCove("9",vbFromUnicode)转换一下应该是可以的
cuiyxy 2001-08-21
  • 打赏
  • 举报
回复
检察单片机的通信速率是否正常,是否
和计算机的通信速率、格式相同?
我想可能你的单片机的通信速率大于计算机的速率
我用一个测com 口的程序,要吗?送你一份
给我EMAIL
ozw 2001-08-21
  • 打赏
  • 举报
回复
跟弹片机通信,好像要在发送数据的时候改校验方式
比如发了一个字节,就要把“9600,s,8,1”改成“9600,n,8,1”
xpmao 2001-08-21
  • 打赏
  • 举报
回复
设置:
MSComm1.InputMode = comInputModeBinary
这样才能接收>128的字符。
Good Luck!
songyangk 2001-08-21
  • 打赏
  • 举报
回复
你的单片机的程序试过吗?
C#串口介绍以及简单串口通信程序设计实现 源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧