老古开发网首页
导航:老古开发网首页文章索引文章分类单片机→[[转载]PC机与单片机串行通信中实现命令批处理]
| -文章搜索 - 最新文章 - |

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

发布时间:2006年7月21日 点击次数:1353
来源:   作者:
 
作 者: 航天信息股份有限公司 严天华

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

关键词: 批处理 MCS-51单片机 通信协议

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

1 通信协议

(1)通信数据格式
PC机→MCS-51单片机数据格式如表1所列。
MCS-51单片机→PC机数据格式如表2所列。
(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]格式:

 

一般把单条命令的长度控制在255以内。
PC机向单片机发送数据序列为:
STX,LENH,LENL,COMMANDH,COMMANDL,DATA…DATA,EDC,ETX

3 批处理的思想方法

(1)批处理命令BATCH_COMMAND (0X0000)
PC格式:

 

NUM——后续命令的个数;
Flag——需要返回的标志(00为要返回数据,其它为无需返回数据)。
COMMAND[i]=LEN,子命令体
功能:批处理执行功能。
返回状态及数据:根据Flag标志决定是否返回数据,按发送命令的顺序返回数据。

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

功能:没有数据和状态返回,控制下位机跳转。
① 控制BATCH_If(0X0001)用于判断,条件执行命令
功能:单片机遇到该命令,执行判断,如果结果为逻辑真,则执行紧跟BATCH_If的第1条命令;否则执行紧跟BATCH_If第2条命令。
PC格式:
 

num: 返回数据从右到左的第几个数据,为0时为状态数据的低位字节;
EQUAL/NOT——00为相等,1为不等;
VALUE——数值。
返回:无。
② 控制BATCH_Break(0x0002)跳出循环命令
功能:用于跳出BATCH_While循环。
PC格式:
 

返回:无。
③ 控制BATCH_While(0x0003)循环执行循环体内的命令
功能:循环执行循环体内的命令。
PC格式:
 

返回:无。
④ 控制BATCH_Return(0x0004)退出打包程序块
功能:退出打包程序块。
PC格式:
 

返回:无。

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


欢迎进入老古论坛进行讨论
[单片机] 相关文章:
学习AVR(十三) ATtiny2313的I/O空间
简介:
ATtiny2313的I/O和外设都被放在I/O空间。可以使用LD/LDS/LDD和ST/STS/STD指令访问所有的I/O地址,和在32个通用工作寄存器和I/O空间之间传递数据。在0x00-0x1F之间的地址可以用SBI和CBI指令直接寻址。在这些寄存器中,单个位的值可以用SBIS和SBIC指令检测。参见指令集获取更多相关信息。当使用I/O专用指令IN和OUT时,必须使用I/O地址0x00-0x3F。当使用LD和ST指令把I/O寄存器作为数据空间寻址时,0x20必须被加到这些地址上。(罗亩按:这使我想起来C++中的in和out指令) 为了与未来的器件兼......

C语言宏定义技巧(常用宏定义) --摘录
软件模拟I2C读写X1226程序
通过串口RS232发送和接收短信
C51 的重入问题 WARNING L15: MULTIPLE CALL TO SEGMENT(转)
单片机系统中高速数据采集的实现
基于89C52单片机的微电压信号源设计
单片机在多种波形发生器中的应用
keilc51用户上电初始化程序解读(转)
A51 3.5.4 程序地址
 
下一个:[单片机][转载]嵌入式实时系统中的优先级反转问题
简介:
作 者:  中国矿业大学 刘辉 孟凡荣 席景科 摘 要:  嵌入式实时系统中由于多任务共享资源,通常会出现一些奇怪的现象。本文就什么是优先级反转及其产生原因进行分析,并提出2个行之有效的解决方案。 关键词:  嵌入式实时系统 多任务 信号量 优先级反转 1 问题的提出   目前,市场上占有率比较高的商业RTOS有VxWorks/PSOS、QNX、 LynxOS、VRTX,、Windows CE等。这些为数众多的RTOS绝大多数都是多任务实时微内核的结构,采用的是基于优先级的可抢占式调度策略。系统为每一个任务分配一个优先权,调度程序保证当前运行的进程是优先权最高的进......
 

上一个:[测试测量]未来CD-SEM校正标准的发展

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒