串口通讯(200分)

  • 主题发起人 主题发起人 yan111
  • 开始时间 开始时间
Y

yan111

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎样实现串口的接受和发送数据?谢谢
 
使用mscomm.ocx或spcomm控件
 
问题问的是不是太大了点,叙述详细点,或许大家能给你更详细的例子,这方面问题
大富翁以前有很多,看看再问吧,问问题可得花银子的奥!
 
我用mscomm控件可接受的数据乱码,怎回事?
 
我用mscomm控件接受单片机的数据,并向单片机发数据,程序在两台计算机上运行时一切
正常,可在与单片机通讯时就不可以了。接受的数据为:?喷
单片机要求的 波特率为4800,可控件的settings中列出的波特率没有4800,那我可不可以
设置:mscomm1.settings:='4800,E,8,1'
 
要进行数据转换才行,规律可要自己找。
 
数据转换是何意思?接受来的字符不都是文本形式吗?我设置的接受形式为文形式,在两台计算机
上运行一切正常?能不能具体列举一下数据转换的方法,给我一点启示。
 
兄弟呀,单片机不认识你的文本呀,所以你要用十六进制数据进行通讯
两台计算机都可以认文本,而单片机认不到
 
谢谢各位小哥了!
我是以16进制的形式发出的程序如下:
rocedure tform2.mscomm1comm(sender:tobject);
begin
mscomm1.InputMode:=cominputmodetext;
case mscomm1.commevent of
2:
begin
showmessage('right');
memo1.text:=memo1.text+#13#10+mscomm1.input;
end;



end;

end;
procedure TForm2.Button3Click(Sender: TObject);
begin

mscomm1.Output:='7ecc01cde7';(我把10进制的转化为16进制又转化为文本发出的)
end;
这样是不是不对,我用的 inttohex 转化为16进制得到 的是字符串形式,这不就是以16进制发送吗?
 
搜索mscomm或者spcomm
 
什么呀,得看单片机跟你的通信协议才行。
其实16进制跟10进制在存储和收发时没有什么区别呵,如
mscomm1.output := #7e#cc#1..........;
另外,推荐用async控件
 
请问通讯协议具体有何作用?如当通讯协议为xon/xoff ?
 
我上面说的通信协议跟你所说的不是一个东西。
我所说的是通信双方约定的一套应答模式,就是应用层协议。
你所说的是串行通信的帧格式,属于物理层和链路层。
如硬件流控规定的是除收发线rx/tx外,另外有一条握手信号线,
当该电平置位时,收发线上数据有效,而选择软件流控时,就要以
数据线上的指定流控字符xon/xoff确定数据包的起止。
 
通讯协议就是我以16进制发送‘7ecc01cde7’数据,单片机便发来我想要的数据,我发过去了
可收来的数据为乱码,
 
帮帮忙?可以来帮我一下吗?我在这等着你们,
 
如果指令正确,那就是要把收到的数据按协议处理,
如返回的是2进码,需要ord(a)
 
iie:ord(a)何意?太感谢你了,
 
iie:别走,帮帮我,数据按协议处理,怎样处理,能否写一下。
 
首先你应检查一下双方的波特率是否一至,
其次你应该知道对方的编码规则
 
后退
顶部