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楼说的是对的


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

相关评论:
  • 1724712554351单片机的串口接收一帧数据有几位?
    文真蝶方式1:一帧信息也是10位;即 1位起始位,8位数据位(先低位),1位停止位。在起始位到达移位寄存器的最左位时,它使控制电路进行最后一次移位。方式2和方式3:发送(通过TXD)和接收(通过RXD)一帧信息都是 11位: 1位起始位(0), 8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。可见:不论...

  • 17247125543怎样用51单片机接收数组?(就是一长串的字母和数字)
    文真蝶定义通讯协议,与字节接收最大间隔时间。因为发送的每帧数据的字节数不相同,所以在下位机上定义一个超时定时器,当收到一个字节后马上开启超时定时器检测是否超时,没有超时的情况下接收的一个字节就要清一下超时定时器的值,这样一帧数据发完后,下位机收不到数据就会超时退出,这一帧数据接收完毕。

  • 1724712554351单片机串口通信问题求解
    文真蝶51单片机串口通信接收数据和发送出去,这不是一个整个过程,即接收和发送没有什么关系的,是完全可以只发送,或只接收的,不需要接收就发出去的。而且不论是接收或发送,每次都是一个字节的,没有什么8个字节的事。但是每发送一个字节,或接收一个字节,数据本身是8个位,注意是8个位,并不是8个字节。

  • 1724712554351单片机的串口通信,每一次是不是只能发送一个字节,比如说12,是分两次...
    文真蝶串口一次只能接收8个位(当然可以设置成 9个位),也就是 一次通讯 1Byte 数据。

  • 17247125543看了51单片机的串口通信,有一些疑问??
    文真蝶通常数据都是一帧一帧地发送的,接收方收到数据后并存于事先开辟的缓冲空间。当收到标志性的数据后即时转移这些数据,并腾出事先开辟的缓冲空间接收后面的数据。程序在处理数据的同时,串口依然在接收,将接收的数据再次存于已经腾出的缓冲空间。所以在串口中断服务中,不能有太多的程序去处理,因为处理...

  • 17247125543单片机串行通信里面的数据帧是怎么理解?一帧数据的位数可以改变吗?比 ...
    文真蝶3、8个数据位:设备需要的真正数据。起始位和停止位都是收发双方UART适配器自身的硬件完成的,校验位需要程序处理及判断以便知道信息是否正确。一般而言,在初始化设置完成后,软件编程者只需要关注8个数据位及校验位就可以了。下面说一下帧。串行通信中,帧信息一般是根据需要自己约定而确定的。其内容一般...

  • 1724712554351单片机的串行通信有哪几种格式
    文真蝶当执行一条“MOV SBUF,A”指令时,启动发送操作,A中的数据从TXD端实现异步发送。发送完一帧数据后自动置TI=1,请求中断。要继续发送时,TI必须由指令清零。(3)接收操作 当置REN=1时,串行口采样RXD,当采样到1至0的跳变时,确认串行数据帧的起始位,开始接收一帧数据,直到停止位到来时,把...

  • 1724712554351单片机串口接收数据包函数 给我个标准的吧
    文真蝶一般类似于这种情况,建议你建立个数组存放。include <reg51.h> define DataLen 10 \/\/定义为10个数据为一帧,产生一次标志位。unsigned char Data[DataLen];unsigned char Datai; \/\/用于记录当前接收了多少 bit Flag; \/\/产生接收完成标志位。void InitUART(void){ TMOD = 0x20;SCON = ...

  • 1724712554351单片机串口怎么清除缓存
    文真蝶你接受数据时候,试着用P0=SBUF;P1=SBUF;然后观察P0,P1口状态,发现是一样的,那是因为SBUF里面的内容没有更新,还是原来的。

  • 1724712554351单片机,T1用作串行口波特率发生器时,设置为工作方式1时,应该给TH1...
    文真蝶51MCU-方式1:10位通用异步通信 一帧信息为10位:1位为起始位(0),8位数据位,1位停止位(1)采用定时器T1(1个16位计数器)作为串行口接收和发送的波特率发生器,数据传输波特率可调,由T1的溢出决定,可用程序设定。波特率设定:波特率=(2^smod)*(定时器T1溢出率)\/32 溢出率=溢出周期的倒数 ...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网