① 单片机串口通讯协议程序如何写 最好举个例子 万分感谢
单片机串口通讯协议,这要看单片机是与什么通信,是电脑吗,还是其他什么设备,如果是买来的什么设备,那一定要按那设备的通信协议来写程序啦,不然话,是不能通信的。如果是电脑就好办了,因电脑端可以写一个软件来完成收/发,那具体的单片机与电脑的通信协议就可以自己来定义啦,其中包括确定波特率,数据位数,即是8位,还是9位,9位的话,要加校验位,比较麻烦,8位比较方便,还有就是结束位是1位。这些是基本的参数,主要是定义通信代码啦,用什么代码表示什么功能,上位机与下位机如何联系,即怎么应答,一条报文有几个字节,用不用校验和,等等,这些事宜都是可以自己定义的。
② 51单片机如何进行串口通信,并制定通信协议.
连线就是 交叉连接 A的TX到B的RX A的RX到B的TX,还有一根地线 串口线就这三根就够用了 然后就是初始化A和B的串口,设置波特率,工作模式,开中断等等 A和B的通信,你先调试一台机器,比如A,和电脑连接,用串口调试助手(网上找)查看A的收发数据是否正常,然后A和B联调 串口通信距离不远一般不会出错,波特率较低,除了奇偶校验,你可以指定一个简单的通信协议,来验证是否数据正常 这类程序网上很多,你不清楚就搜索51串口程序,出来一大堆,找个有注释的看看,调试一下试一试 祝你顺利 在网上找了一下,这两个你参考一下,注释很详细 串口发送
③ 51单片机C语言怎么写Modbus通信程序
Modbus通信程序就是串口,只是比串口复杂点而已
④ 51单片机通信协议的问题
说实话,楼主的话也让我琢磨了半天。
首先,没怎么听说过“MSB”,不过看有关通信协议的解释以及程序。
“通信协议: 第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和”
可见所谓MSB就是字节的最高位。“最后一个字节为前几个字节后7位的异或校验和”也就是说他把每个字节的最高位当作首字节的标志用了,因而每个字节所能表示的数只有0-127(7个bit),至于最高位的那一个bit,只和是否为首字节有关,只有首字节的最高位为“1”其他的字节最高位都为“0”。
再来看程序,其实程序中重点要看的只有一个子函数
//串口接收中断函数
void serial () interrupt 4 using 3 //串口中断号为4,后面的using为寄存器组切换
{
if (RI) //判断是否是接收中断
{
unsigned char ch; //在这里定义了一个 字符变量 “ch”
RI = 0 ; //清标志位
ch=SBUF; //这里把接收到的数据从串口缓存读到了变量ch里
if (ch> 127 ) //注意这里,ch>127的话其最高位必须是1才可以。也就是说,只有首字节才并且必然大于127。换句话说在这里判断了首字节
{ //是首字节的话。。。
count3= 0 ; //给count3赋初值,这个count3就是用来计数接收到的字符的个数的。
inbuf1[count3]=ch; //把接收到的数据放到字符串inbuf1[]中,这inbuf1[]他定义的是全局变量,因而可以传回去。(他好像忘了去掉最高位的首字节标志了)
checksum= ch- 128 ; //这就是计算所谓的校验和了吧,先把首位放进去,之所以减了个128就是要把最高位的标志减掉,只计算后七位的校验和。
}
else //不是首字节的话。。。
{
count3++; //接收计数自增
inbuf1[count3]=ch; //随着每次count3的自增,依次把接收到的数据放到字符串inbuf1[]中
checksum ^= ch; //依次按位异或,也就是说每收到一个字节都拿来异或一下。
if ( (count3==(INBUF_LEN- 1 )) && (!checksum) ) //逻辑表达式有点长啊,最外层是与,每个元素都为真才可以,前面count3==(INBUF_LEN- 1 )也就是说接收到了最后一个字符(他定义的INBUF_LEN =4,count3从0加到3,一共接收了四个字符),后面!checksum当依次按位异或的结果归0时才为真。
{
read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,
//就置位取数标志
}
}
}
}
这下明白点了吧。至于“95 10 20 25”原程序已经写了是16进制,而且一楼解释的也很明白了,再此不再多说,
至于发送12345 或 67890 的计算,因为要加上协议因此有点麻烦。
先看他的例子吧95 10 20 25 这是四个字节的16进制数,全都转成二进制的数字看的清楚。
95——10010101
10——00010000
20——00100000
25——00100101
看到了吧,只有第一个0x95的最高位是1。其他的几个字节最高位都是0。
至于校验和,你查查每一纵列的1是不是都是偶数个(当然除了第一列)?偶数个1异或就是0。
当然你要发12345还要改下程序,
因为他开始定义了数据长度,加上校验和一共是四个字节。
#define INBUF_LEN 4 //数据长度
你要发“12345”5个字节的数据,加上校验和一共六个字节。要把这一句话改成:
#define INBUF_LEN 6 //数据长度
这样就把数据包的长度定义为6个字节
就像1楼所说,你到底是要发送12345五个值还是这五个字符的ASCII码?
假如是五个值这样计算
数值 二进制 发送代码 发送的16进制数
1——0000 0001——1000 0001——81
2——0000 0010——0000 0010——02
3——0000 0011——0000 0011——03
4——0000 0100——0000 0100——04
5——0000 0101——0000 0101——05
校验和——————0000 0001——01
看到了吧,把首字节最高位改成1,校验和就是保证数据包中每一位的1出现偶数次(纵向看除第一位有偶数个1)。
在串口调试助手发送窗口写上“81 02 03 04 05 01”选中16进制发送(或HEX发送)点发送就可以了。
同理,假如发送ASCII码的话也一样的计算,不过还要先查ASCII码表找到对应的ASCII码。(一般C程序的课本后面后,或者上网找图)
数值 ASCII码 发送代码 发送的16进制数
1——31——0011 0001——1011 0001——b1
2——32——0011 0010——0011 0010——32
3——33——0011 0011——0011 0011——33
4——34——0011 0100——0011 0100——34
5——35——0011 0101——0011 0101——35
校验和——————————0011 0001——31
在串口调试助手发送窗口写上“b1 32 33 34 35 31”选中16进制发送(或HEX发送)点发送就可以了。
忽然觉得我很罗嗦诶...
⑤ 用51单片机怎么做通信
这个题正好是我那年做的,呵呵,具体程序不知道扔哪儿了,你可以自己确定通信协议,我当时是借鉴的红外遥控器的通信协议,根据高电平的长度不同确定是0还是1 ,然后上层的话自己定下前导码和校验码,收到的时候计算下正确性在显示
找到论文了:
3.通信协议分析
系统采用单片机软件编码,仿红外式采用脉宽调制,利用高低电平脉冲宽度不同来区分0和1。编码采用数据吗+前导码的方式,前导码为9MS高电平+9MS低电平+4.5MS高电平。因为OOK默认不发送数据时是低电平,所以第一个9MS的高电平判断可以滤除大多数的杂波干扰。发送1时延迟1.685ms高电平,0时延迟0.565MS高电平,如下图:
图2-3、数据1/0编码
数据码一次发送5位分别是D4(校验码,本次编程为0xaa),D3(地址码),D2(温度信息),D1(光照信息),D0(备用)。编码时监测终端地址为(0x00),两个节点地址可以用P1口带的拨码开关自己设置,范围为(0x01-0xff),D1为0X01代表有光照,为0x02代表无光,为0x03代表中继转发并有光,为0x04代表中继转发并无光。
⑥ 51单片机与51单片机如何用CAN总线连接通讯急啊!!
CAN_H跟CAN_H接呗,CAN_L对CAN_L,地可接可不接。但是要保证两边都接了120欧姆的终端电阻。
⑦ 51单片机C语言的串口通讯协议
举个例子
二、 串行口通讯方式:
2.1 工作方式:主从方式。上位机为主,顺序闪光灯主机为从;控制命令和查询命令由上位机发出,顺序闪光灯主机做相应信息返回。
2.2 工作模式:8位数据,无校验;对于51系列单片机为模式1
2.3 波特率:1200,2400,4800,9600(可选,缺省为4800)。
2.4 信息格式:
序号 名称 字节数 内容 说明
1 帧信息头 1 0xAA 用于表示信息的开始
2 帧信息类型 1 控制0x01 用于区别控制命令、查询命令及返回信息;“控制”和“查询”由上位机发出,“返回”为顺序闪光灯主机返回信息时发出。
查询0x02
返回0x03
3 有效信息长度 1 n 表示有效信息的字节数
4 有效信息 n n个字节 有效信息。详见具体信息定义
5 校验码 1 LRC 对帧信息类型、有效信息长度、有效信息进行单字节相加,取低8位补码(即对低8位取反后再加一)作为校验码。
说明:上位机和顺序闪光灯主机使用相同的信息格式,不同之处在于信息类型、信息长度的不同。
⑧ 51单片机485通讯协议怎么写 有代码最好
所谓通讯协议 只是一种约定,如果都是 自己做的系统,只要自己定制一个就可以了,
如果与 其它 系统 通讯 ,则需要 知道 其通讯协议内容,
如 一个简单的 通讯协议 控制指令
发送 01H 代表 打开开关
发送 02H 代表 关闭开关
则 发送端 发了 01H 接收端 收到 01H 就控制 打开开关
发送端 发了 02H 接收端 收到 02H 就控制 关闭开关
这感觉很简单,在实际应用中 要 考虑 正确性 需要验证,
如红外遥控器 指令码与反码 接收端判断 指令码与反码比较是否正确。
⑨ 51单片机怎样实现SPI通讯
用传统的51单片机实现SPI通讯,需要用I/O脚来模拟SPI协议,这比较麻烦。
选用STC8系列单片机,就具有了SPI接口了
,只需要对寄存器操作就行了。方便了很多了。如下图,这是STC8系列中的4个子系列,还有其它的子系列,就不再列举了。
⑩ 用51单片机实现与上位机无线通信
1、核心器件,首当是单片机,采用51系列。
1、简单的温控一般都是 18B20 ,便宜,调试简单。
2、无线串口传输,可以采用 RF915 ,传输距离30米,上位机和下位机装一对。
3、温度曲线,就是时间轴和温度的直观表现,根据你采样频率,绘出曲线图。
4、自己定义通讯协议,完成可靠的数据收发。