PC机与单片机串行通信中实现命令批处理

2006-05-07 15:49:41来源: 互联网

51单片机通信批处理命令的实现思想、方法、通信协议和C51程序平台。为PC机与单片机串行通信程序设计提供一种方法上的新思路。

在PC机与MCS-51单片机之间进行串行通信时,基本是一对一的,即用PC机向单片机每发1条命令,就等待单片机的1条返回信息。这样可能把大量时间浪费在PC机与单片机的通信过程中了。为此笔者经过实践,设计出可以批处理执行PC机发给单片机的命令,就像DOS操作系统中的批处理命令一样,可连续批处理信息,结果当然提高了系统速度。文中提供了部分平台式C51软件源代码,以供大家参考。

1 通信协议

(1)通信数据格式

PC机→MCS-51单片机数据格式如表1所列。

表1

Stx Len Comma Data[0]…Data[N-1] Edc Etx
开始 长度 命令 数据体 校验码 结束码
0x60 N+2(2Byte) (2Byte)   Stx^Len^CommandH^
CommandL^data[0]…Data[N-1]

0X03

MCS-51单片机→PC机数据格式如表2所列。

表2 

Stx Len Status Data[0]…Data[N-1] Edc Etx
开始 长度 命令 数据体 校验码 结束码
0x60 N+2(2Byte) 2(Byte)   Stx^Len^CommandH^
CommandL^data[0]..Data[N-1]
0X03

(2)初始通信参数

  PC机与单片机间(9600,n,8,1)即波特率为9600 baud,1起始位,8数据位,1停止位,无奇偶校验。

(3)数据收发方式

  所有数据按二进制单字节发送。

(4)发送数据顺序

  发送同步码(1Byte):Stx=0X60

  发送后续字节的长度(2Byte):Len=2+N

  发送Len个后续数据字节(N+2 Byte):CommandH,CommandL,Data[0]…Data[N-1]

  发送校验码(1Byte): Edc=Stx^CommandH^ CommandL^Data[0]^…Data[N-1]

  发送结束码(1Byte): Etx=0X03

2 单条命令COMMAND[n]

COMMAND[n]格式:

Command Data[0]~-Data[N-1]
XXXXH 数据体

一般把单条命令的长度控制在255以内。

PC机向单片机发送数据序列为:

STX,LENH,LENL,COMMANDH,COMMANDL,DATA…DATA,EDC,ETX

3 批处理的思想方法

(1)批处理命令BATCH_COMMAND (0X0000)

PC格式:

Command Data[0] Data[1]~-Data[i] Data[i+1]… ---…Data[N]
0x0000 NUM命令个数 Flag,COMMAND[0] Flag,COMMAND[i] Flag,COMMAND[n]

NUM——后续命令的个数;

Flag——需要返回的标志(00为要返回数据,其它为无需返回数据)。

COMMAND[i]=LEN,子命令体

功能:批处理执行功能。

返回状态及数据:根据Flag标志决定是否返回数据,按发送命令的顺序返回数据。

(2)控制批处理转移的命令

功能:没有数据和状态返回,控制下位机跳转。

① 控制BATCH_If(0X0001)用于判断,条件执行命令

功能:单片机遇到该命令,执行判断,如果结果为逻辑真,则执行紧跟BATCH_If的第1条命令;否则执行紧跟BATCH_If第2条命令。

PC格式:

Command Data1 Data2~-Datai Dataj…
0x0001 num EQUAL/NOT VALUE

num: 返回数据从右到左的第几个数据,为0时为状态数据的低位字节;

EQUAL/NOT——00为相等,1为不等;

VALUE——数值。

返回:无。

② 控制BATCH_Break(0x0002)跳出循环命令

功能:用于跳出BATCH_While循环。

PC格式:

Command
0x0002

返回:无。

③ 控制BATCH_While(0x0003)循环执行循环体内的命令

功能:循环执行循环体内的命令。

PC格式:

Command Data1
0x0003 Num(循环内命令个数)

返回:无。

④ 控制BATCH_Return(0x0004)退出打包程序块

功能:退出打包程序块。

PC格式:

Command
0X0004

返回:无。

(3)注意事项

◇ BATCH _While循环不能嵌套使用;

◇ BATCH _Break只能用于BATCH _While循环体内;

◇ 需要立即获取返回数据的命令,一般不要放到批处理中。

(4)控制打包程序转移的PC机命令举例说明

    该实例根据命令的结果判断是否转移,循环中只使用Reader_Version()。

PC机下传给单片机的代码:BATCH_ COMMAND

    Reader_Version():假设为0X1001

实际PC机下传的代码为(HEX格式):

60 28 00 00 06 01 00 03 00 00 05 01 00 04 00 01 00 00 03 01 00

02 00 02 01 00 05 00 01 05 00 61 01 00 02 00 04 00 00 02 10 01 校验码 03

4 程序流程

各程序流程如图1~图4所示。

5 部分源程序代码

由于篇幅所限,这里只提供部分源程序。

(1)主程序

主程序首先接收数据,对数据进行分析,区分批处理和单条命令;然后执行命令;最后将结果返回上传给PC机,程序清单见本刊网站补充版(网站地址:http://www.dpj.com.cn)。

(2)批处理程序

批处理程序将控制转移的命令都用标志来区分,通过解释命令序列来执行命令,最后将结果按照通信数据格式打包,上传给PC机,程序清单见本刊网站补充版。

结束语

本文在PC机与单片机串行通信的软件编程中做了探索,实现批处理信息数据通信的处理。相信这种新的思路和方法会有所发展并很快应用于实际嵌入式系统

关键字:单片机  串行通信

编辑: 引用地址:http://www.eeworld.com.cn/gykz/qrsxt/200605/4055.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
单片机
串行通信

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved