串口通信协议范文
一、单片机串口通讯协议程序如何写 最好举个例子 万分感谢
单片机串口通讯协议,这要看单片机是与什么通信,是电脑吗,还是其他什么设备,如果是买来的什么设备,那一定要按那设备的通信协议来写程序啦,不然话,是不能通信的。
如果是电脑就好办了,因电脑端可以写一个软件来完成收/发,那具体的单片机与电脑的通信协议就可以自己来定义啦,其中包括确定波特率,数据位数,即是8位,还是9位,9位的话,要加校验位,比较麻烦,8位比较方便,还有就是结束位是1位。这些是基本的参数,主要是定义通信代码啦,用什么代码表示什么功能,上位机与下位机如何联系,即怎么应答,一条报文有几个字节,用不用校验和,等等,这些事宜都是可以自己定义的。
二、怎么写串口通信协议
串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。什么是串口串口是计算机上一种非常通用的设备通信协议(不要与通用串行总线Universal SerialBus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信接口;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。串口通信最重要的参数是比特率、数据位、停止位和奇偶校验。
对于两个进行通信的端口,这些参数必须匹配:a,比特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,就是指比特率,例如如果协议需要4800波特率,那么时钟是4800Hz。
这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的比特率为14400,28800和36600。
比特率可以远远大于这些值,但是波特率和距离成反比。高比特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。
扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。d,奇偶校验位:在串口通信中一种简单的检错方式。
有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。
对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。
这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。串口通讯协议是指通信双方的一种约定。
约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。
三、怎么写串口通信协议
串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
什么是串口
串口是计算机上一种非常通用的设备通信协议(不要与通用串行总线Universal SerialBus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信接口;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:
(1)地线,
(2)发送,
(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是比特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:
a,比特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,就是指比特率,例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的比特率为14400,28800和36600。比特率可以远远大于这些值,但是波特率和距离成反比。高比特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。串口通讯协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。
四、rs232串口通信协议怎么写
协议一般要包含:起始符、、数据、校验码、结束符,5个部分的定义。
其中 起始符、结束符,不能与其他数据重码。
如只要传输字母与数字,可以看下ASCII码表,使用非数字和字母的符号做起始结束符即可,如{};
数据长度码即表示此串数据包的数据长度,如果传输的数据串长度固定可省去;
校验码相当于对此串数据正确性的校验,和奇偶校验效果类似,一般是和校验,即将数据全部累加得到一个和值当校验码,接收方收到数据也做一样的运算与收到的检验码比较,相等就说明正确接收。
如要发{1234567890 }
换成16进制即:7B 10 31 32 33 34 35 36 37 38 39 30 25 7D;31~30是数据,
7B,7D分别为起始和结束符,10为数据长度的BCD码,25是校验码,是31~30的和模100后的BCD码,转成BCD码是为了避免与 起始和结束符重码。
五、求单片机串口通信协议,做设计要求:上位机通过串口实现点亮和灭
#include#define uchar unsigned char#define uint unsigned intuchar idata trdata[]={'R','I','C','H','M','C','U','R','Z','-','5','1','V','2','.','0',0x0d,0x0a,0x00};sbit K1=P3^2; //对应开发板K1按键//串口初始化void UART_Init(void){SCON = 0x50; //串口工作方式为1 , 串行允许接收//SM0=0;//SM1=1;//REN=1;TMOD = 0x20; //定时器1 工作在方式2//PCON = 0x80; //SMOD = 1; 波特率加倍TH1 = 0xfd; //波特率 9600bps fosc="11".0592MHzTL1 = 0xfd; ES = 1; //开串口中断 TR1 = 1; //允许定时器1工作 EA = 1; //开总中断}void delay1ms(uint i){uchar j; while(i--) { for(j=0;j 追问: 老师给提出的比较繁琐,例如协议是/ooo;表示3盏灯全点亮,/就表示单片机准备接收控制LED的指令,然后匹配看是不是正确的指令,还有意外的情况就是要使接收的时候上位机操作者不发了怎么办,要求延时等几秒,还有就是;表示指令结束,再比如/xxx;就代表3盏灯全灭,同时还要求校验,比如几个符号的ASCII码等于多少来判定指令是否正确。
。
是不是有些复杂 追答: 的确比较繁琐。这个只是一个和简单的 协议 这种在工业上用的很多,而且很复杂。
上面的程序是一个简化版的,不过你可以把他当作一个模型。下面,你可以在中断里面把串口发送的数据接受存下来,然后在用判断,最后在执行相应的操作就OK。
多试试就出来了,写协议还是很简单的。不过,你如果把上面的程序发给老是,估计老师也算认可。
但是绝对会有违老师额初衷,你这叫剑走偏锋。哈哈 追问: 嗯,我再研究下,主要是第一次写单片机的程序,以前也写过不少C,但都是基于操作系统的,在单片机上这种C,不太习惯,感觉有些别扭。
请问能不能以刚才你发的模版,帮我修改一个最简单的,能运行的,仅仅让计算机控制单片机上一盏LED灯的亮灭,不需要再次回显到计算机上,点亮为在串口工具上发送3个字母ooo,灭为fff,灯为开发板上的P1^0,谢谢了。上面的程序(K1是按键吧?还有中断程序里的P1是?) 追答: K1是按键,中断程序是,计算机下发数据时候,进行中断。
这个程序就是最简单的啊,你直接在串口助手上,点击十六进制发送:01 代表-> 0000 0001 点亮p1.002 代表 -> 0000 0010 点亮P1.104 代表-> 0000 0100 点亮p1.203 -> 0000 0011 点亮p1.0 和p1.1这很简单的啊 评论0 0 0。