|
<><FONT color=#3809f7 size=6 face=楷体_GB2312> 通讯协议</FONT></P><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312> 说到通讯协议,这么“大”的一个词,这会不会很难啊?。其实不用怕,通俗的讲,通讯协议就是通讯双发的一种约定,可以简单,也可以复杂。复杂的有TCP/IP协议,简单的有串口通讯协议。我们现在要把图像从单片机发送给上位机,也需要通信协议。</FONT></P><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312> 如果没有通讯协议,对于收信方,谁知道你发的是什么?就是一堆二进制码元(对于数字通信系统),他到底是干什么的?什么意思?根本无法知道。所以通信的双方要对发送的信息有所预定。</FONT></P><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312> 对于我们的赛车和上位机软件之间的通信,赛车通过串口发送图像数据,假设是一个100*10(字节)的图像,上位机软件接收到这1K</FONT><FONT color=#2b6fd5 size=5 face=楷体_GB2312>的数据后把它绘制成相应的图像。可是从我的前几篇叫程中所说的来看,上位机软件接收的就是一些字符串,每次4096个字节,他怎么知道图像从哪里开始,从哪里结束呢?如果我们在单片机上就不停的发送图像,对于上位机来说,很显然根本无法知道从那里开始是我们所需要的一副图像。为此我们就需要做一定的约定,让上位机知道图像从什么地方开始。</FONT></P><FONT color=#2b6fd5 size=5 face=楷体_GB2312><P><FONT color=#2b6fd5 size=5 face=楷体_GB2312> 为此,我们可以在发送图像的时候发送一个标志字符串,比如“image”。当单片机发送图像时,先发送“image”,然后紧接着发送1K的图像,这样不断重复。那么上位机软件每次接收到到4096字节数据时从里面搜索字符串“image”,如果搜索到了,就把这后面的1k数据当作图像绘制在电脑上。这就是我们的通信协议,很简单吧!你会想这也叫通讯协议?它的确可以称之为通讯协议了,只不过很简陋,没有TCP/IP那样好听的名字。</FONT></P><P> 现在具体说一下我们的通讯协议,那就是:这是一个单向协议,只负责单片机向上位机发送数据;单片机在每次发送数据前,发送一个标志字符串,同时保证在要发送的数据中不会存在与标志字符串相同的数据,提前约定数据的长度(在我们前面的假设中,固定是1k,实际使用时可以更改);上位机接收时,通过搜索标志字符串,把标志字符串之后约定长度的数据取出来。</P><P> 好了,下面开始正式行动吧!</P><P> 在单片机里编写</P><P><FONT color=#2bd5b3 size=3>main()</FONT></P><P><FONT color=#2bd5b3 size=3>{</FONT></P><P><FONT color=#2bd5b3 size=3> while(1)</FONT></P><P><FONT color=#2bd5b3 size=3> {</FONT></P><P><FONT color=#2bd5b3 size=3> printp(“image”);</FONT></P><P><FONT color=#2bd5b3 size=3>。。。发送1k的图像数据;</FONT></P><P><FONT color=#2bd5b3 size=3> }</FONT></P><P><FONT color=#2bd5b3 size=3>}</FONT></P><P>在labview里</P><P>上一篇中是这样的</P></FONT><P><IMG style="WIDTH: 707px; HEIGHT: 478px" src="http://download.intelligentcar.cn/bbsupfile//upfile/截图00.jpg" width=585 height=460></P><P><FONT color=#0909f7 size=5>(这是上篇文章的labview程序</FONT><IMG src="http://www.intelligentcar.cn/images/affix.gif"><A target=_blank href="http://download.intelligentcar.cn/bbsupfile//upfile/串口接收示例2.rar" target=_blank>串口接收示例2.rar</A>)</P> |
|