51单片机的串口接收一帧数据有几位?

作者&投稿:崔类 (若有异议请与网页底部的电邮联系)
我需要一个程序,51单片机串口接受到一帧数据并把这一帧数据赋值到一个数组中。~

你这串口接收子程序,只要接收到第一个字节的数据就一直在中断子程序中,然后等待接收其它数据了,
while(!RI); 这就是在等待接收其它数据了,接收完了以后又在中断子程序连续发送了。这么写程序是有很大弊病的,一旦进入中断程序,到最后发送结束,都一直在中断子程序中,那这个期间单片机是不能再做其它工作的,也就是不能再执行主程序了。
while(!RI);这就是查询方式等待接收数据,那又何必写成中断程序呢,不如直接写成查询程序了,同样下面的, while(!TI);这也明明是在查询方式发送,就不必要写在中断程序中了。
既然采用中断的方式,就是当接收到一个数据后才响应一次中断,保存这个数据,然后就立即从中断返回,这样,继续执行主程序,这样,接收数据和发送数据才不影响主程序。
同理,在中断程序发送一个字节的数据就立即从中断返回执行主程序,也不影响主程序的执行。
另外,更重要的一点就是while(!RI);,等待接收数据,如果不能收到数据就永远等待下去,假如通信线有故障,或者发送方有问题,不能发送数据了,那么将永远等待下去,这就相当于死机了,多可怕,写程序就怕这个事情发生的。

感觉你的概念不太清晰。上面所说的“1+8bit+1+1”应该是串行通讯一个字节的格式,属于串行通讯中的最小数据格式单位的一种:1个起始位+8个数据位+1个校验位+1个停止位(也有1+8+0+1等等),也就是说如果需要收发N个字节,就有N x (1+8bit+1+1)个这样的组合出现在TXD或RXD线路上,而不是1+nbit+1+1或者1+nx8bit+1+1。这些位中:
1、起始位和停止位:用于同步
2、校验位:用来保证通讯信息的正确性
3、8个数据位:设备需要的真正数据。
起始位和停止位都是收发双方UART适配器自身的硬件完成的,校验位需要程序处理及判断以便知道信息是否正确。一般而言,在初始化设置完成后,软件编程者只需要关注8个数据位及校验位就可以了。

下面说一下帧。
串行通信中,帧信息一般是根据需要自己约定而确定的。其内容一般是由多个8位单字节数据组成,比如你所说的传感器,需要采集电压值,电流值等信息,假设这些信息需要10个字节,那么你的一帧信息最少需要10个字节,也就是收发两方都需要计数,计数到10时才能说明通讯完成。这是最简单的,但大多数应用中规范的做法一帧信息都会包含帧头标识符、帧长度、信息内容及校验信息。给你个链接,这是我以前的回答,其中简单的叙述了帧协议,理解后你可以规定自己的帧格式。
http://zhidao.baidu.com/question/273360213.html

对于多个传感器,应给每一个分配一个唯一的地址,只有地址相符的传感器才对主端的信息做应答。地址信息可以包含到通讯协议中,比如:
帧头 + 帧长度 + 中断地址 + 信息内容 + 校验和
如果使用的是51单片机,也可以用串行通讯方式3方式完成,你可以查阅一下资料,我记不住了。

发送的位数跟工作方式有关。51单片机的发送和接受,只有10位和11位两种。

先说单片机串口的工作方式:
单片机串口的工作方式共4种,方式0--方式3.
方式0:用移位脉冲。RXD做输入/输出,TXD进行移位。收发的数据为八位。
方式1:传送一帧信息为10位,即1位起始位(0),8位数据位(低位在先)和1位停止位(1)。数据位由TXD发送,由RXD接收
方式1:一帧信息也是10位;即 1位起始位,8位数据位(先低位),1位停止位。在起始位到达移位寄存器的最左位时,它使控制电路进行最后一次移位。
方式2和方式3:发送(通过TXD)和接收(通过RXD)一帧信息都是 11位: 1位起始位(0), 8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。
可见:不论单片机串口接收还是发送一帧数据是多少位,实际有效位数据位都是8位,其余位是为了奇偶校验、做起始位或终止位用的。
以前所述有误,特修正。

标准的8位!因为它是八位单片机,操作位数一般都是8位。一楼那位说的是计算机串口输出规则!

51系列发送和接收都是8-11位,8位只是数据位,另3位是起始位 停止位 奇偶校验位.一般11位更好

串口通信应该是8到11位。要看你自己程序怎样编写。你需要的数据如何定义。1楼说的是对的


简述c51单片机串行口数据发送和数据接收过程
MOV TL1,#X MOV PCON,#00H ;SMOD=0,就是波特率不增倍CLR TI ;清除发送中断标志SETB TR1 ;打开定时器1 2、发送程序 查询方式: TRAM: MOV A,@R0 ;取数据 MOV SBUF,A ;发送一个字符 WAIT:JBC TI,NEXT ;等待发送结束 SJMP WAIT NEXT: INC R0 ;准备下一次发送 SJMP TRAM3、接收程序 WA...

51单片机串口连接到电脑上计算机无法显示com端口如何解决(51单片机接收...
5. 51单片机串口打开失败 IE = 0x90;把里面的上面那句去掉,就行了。把ES=1,再来一个IE = 0x90;实际上ES=0了 6. 51单片机串口接收数据的处理程序 3.比如读取内存地址0x22中的数据 C语言中对于内存的访问是基于指针的,这个毋庸置疑,具体操如下 unsigned int *p= (unsigned int*)0x...

单片机串口接收命令‘1’打开继电器,‘0’断开继电器,大侠指导谢谢_百度...
在初始化里面最好把SCON写上 你上位机发送的是数据格式是什么 字符型是还是16进制形式发送 如果是上位机是以16进制发送,则接收时不该是RECEIVR_buffer =='0' 而是RECEIVR_buffer ==0

单片机串口接收命令的程序怎样写
先初始化串口,再接收数据就可以了。比如:include<reg51.h> define uchar unsigned char uchar rec;bit flag=0;void uart() interrupt 4 { if(RI){ RI=0;rec=SBUF;flag=1;} } main(){ TMOD=0x20;TH1=0xfd;TL1=0xfd;SCON=0x50;TR1=1;ES=1;EA=1;while(1){ if(flag){ case .....

谁能介绍一下单片机串口通信的知识?如何应用?
●RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧\/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。PCON中只有一位SMOD与串行口工作有关 :四、波特率的计算 在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作...

51单片机通过串口实现数据的发送与接收程序
串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。一般来说,过程如下:1,配置串口参数、波特率等,开启串口中断;void Init_UART(){ } 2,中断函数里写中断响应函数,根据接收的指令或者数据,...

单片机串口接收数据就会中断一次吗
嗯,是的,串口接一次数据,如果中断开的话就中断一次!1、接受数据的中断一次只能接1个bit,直到循环接完,再把接到的数据8个bit组装为1个完整的byte,就这样,不可能全部接完再跳出中断。2、如果你怕影响执行主函数main()中的语言,请在主函数中设置标志判断变量使得全部接受完成再进行执行。3、...

51单片机的串口接收一帧数据有几位?
方式2和方式3:发送(通过TXD)和接收(通过RXD)一帧信息都是 11位: 1位起始位(0), 8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。可见:不论单片机串口接收还是发送一帧数据是多少位,实际有效位数据位都是8位,其余位是为了奇偶校验、做起始位或终止位用的。以前所述有误,特修正。 本...

51单片机串口是什么工作方式?
51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本...

请问51单片机怎么通过串口接收字符串?能解释一下代码吗?谢谢了_百度知 ...
要活学活用知识才是,教材或者单片机资料上有说到串口通信的接收数据寄存器;当这个寄存器满时(即收到了一个完整的字节时),会发出中断信号,那么你就在中断例程中取走数据就是了,取走数据后,接收端就会自动接收或者等待接收新的数据。如此中断一次取走一个字节,直至发送端停止发送数据。取走的数据怎么...

兴隆县13194956511: 51单片机的串口接收一帧数据有几位? -
吕洁洛美: 发送的位数跟工作方式有关.51单片机的发送和接受,只有10位和11位两种. 先说单片机串口的工作方式: 单片机串口的工作方式共4种,方式0--方式3. 方式0:用移位脉冲.RXD做输入/输出,TXD进行移位.收发的数据为八位. 方式1:传...

兴隆县13194956511: 51单片机串行通信中1帧是多少个字节啊,要算一个字节数据的传送时间是不是要把起始位和停止位也算上 -
吕洁洛美: 串行通信是按bps就是bit每秒为单位的 一个字节是有算起始和停止位的

兴隆县13194956511: 单片机串行通信里面的数据帧是怎么理解?一帧数据的位数可以改变吗?比如1+8bit+1+1,这样的就是一帧—— -
吕洁洛美: 感觉你的概念不太清晰.上面所说的“1+8bit+1+1”应该是串行通讯一个字节的格式,属于串行通讯中的最小数据格式单位的一种:1个起始位+8个数据位+1个校验位+1个停止位(也有1+8+0+1等等),也就是说如果需要收发N个字节,就有N x ...

兴隆县13194956511: 51单片机的串行口有几种工作方式?它们的帧格式是如何规定的? -
吕洁洛美: 串行口分四种工作方式,由SM0、SM1二位决定,其定义如下:SM0、SM1 工作方式 功能描述 波特率 0 0 方式0 8位移位寄存器 Fosc/12 0 1 方式1 10...

兴隆县13194956511: 51单片机的串口通信,每一次是不是只能发送一个字节,比如说12,是分两次发送的吗,第一次发1,第二 -
吕洁洛美: 如果你想发的是 字符 '1' 跟字符 '2'(字符串“12”),那么每次只能发一个字符.必须成'1'跟'2'分开. 如果你想发的是数字'12',那么可以直接发'12'(0x0C). 串口一次只能接收8个位(当然可以设置成 9个位),也就是 一次通讯 1Byte 数据.

兴隆县13194956511: 51单片机怎么接收电脑发送的16位数据 -
吕洁洛美: 51单片机是8位的,一次只能接一个字节,你这16位的,要分两次的. 电脑串口也是按两次来发送,也就是把这个16位的拆成两个字节,所以每个字节发送都是遵循串口协议的,你在单片机里面开串口接收中断即可. 你可能会疑问,要是第一...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网