龙源期刊网
http://www.qikan.com.cn
基于51单片机的串行通信协议的实现
作者:曾增烽
刘
浩
李
雪
来源:《硅谷》
2009
年第
13
期
[
摘要
]
首先分析数据通信协议数据包的一般格式
,
然后采用有限状态机的算法实现单片机与
上位机之间的串行通信协议
,
包含上下位机的数据发送接受和协议的解析实现
,
并给出具体的实
现方法。
[
关键词
]51
单片机串口通信协议上位机下位机
中图分类号
:TN91
文献标识码
:A
文章编号
:1671-7597(2009)0710022-01
一、引言
数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用
到的
RS232
、
RS485
、红外、光纤、无线等等通信方式。在这个层面上
,
底层软件提供两个基本
的操作函数
:
发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作
方法之上。通信中的数据往往以数据包的形式进行传送的
,
我们把这样的一个数据包称作为一
帧数据。类似于网络通信中的
TCP/IP
协议一般
,
比较可靠的通信协议往往包含有以下几个组成
部分
:
帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾
[1][2]
。现在大部分的仪
器设备都要求能过通过上位机软件来操作
,
这样方便调试
,
利于操作。其中就涉及到通信的过程
,
本文给出了串行通信协议的具体实现
,
总结出了通信程序的通用写法
,
包括上位机端和下位机端
等。
二、上位机和下位机中的数据发送
物理通信层中提供了两个基本的操作函数
,
发送一个字节数据则为数据发送的基础。数据
包的发送即把数据包中的左右字节按照顺序一个一个的发送
[3]
。在单片机系统中
,
比较常用的
方法是直接调用串口发送单个字节数据的函数。另外一种方法是采用中断发送的方式
,
所有需
要发送的数据被送入一个缓冲区
,
利用发送中断将缓冲区中的数据发送出去
[4]
。对于
51
系列单
片机
,
比较倾向于采用直接发送的方式
,
采用中断发送的方式比较占用
RAM
资源
,
而且对比直接
发送来说也没有太多的优点。以下是
51
系列单片机中发送单个字节的函数
[5]
。
void SendByte(unsigned char ch){
SBUF = ch;