打印
[51单片机]

51单片机通讯中,已知波特率,求数据传输时间

[复制链接]
5571|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
W_Controller|  楼主 | 2013-10-30 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,在51单片机通讯过程中,设置波特率为57600,那么,一码元(8bit,即一字节)数据的传输时间是其波特率的倒数,即1/57600 ≈ 18us。
而我的程序设计为串口接收中断模式,即接收到数据就进入中断。然后启动定时器,若定时时间内有数据传入,则重置定时器初始值。否则,定时器时间到,停止数据的接收。定时器用来判断数据是否传输完毕。按理说,定时器设置的时间只要设置为 大于两字节的传输时间(36us)即可。但实际实验中发现,定时时间必须设置为160us以上才能够正常接收数据,这说明,57600波特率的码元传输时间为160us !?
不知以上分析过程是否出错,还是另有其他原因,还望网友们帮忙!

相关帖子

沙发
黄小俊| | 2013-10-30 19:23 | 只看该作者
这是中断嵌套?

使用特权

评论回复
板凳
gx_huang| | 2013-10-30 19:39 | 只看该作者
57600是1bit的时间。
一个字节,需要1+8+1=10bit时间。
好好看看UART的时序。

使用特权

评论回复
地板
W_Controller|  楼主 | 2013-10-30 20:21 | 只看该作者
gx_huang 发表于 2013-10-30 19:39
57600是1bit的时间。
一个字节,需要1+8+1=10bit时间。
好好看看UART的时序。

“一个字节,需要1+8+1=10bit时间。”没错,但“57600是1bit的时间”,波特率指的应该应该是一个码元的时间吧。

使用特权

评论回复
5
W_Controller|  楼主 | 2013-10-30 20:55 | 只看该作者
**n1131 发表于 2013-10-30 19:23
这是中断嵌套?

并没有用到中断嵌套,有数据传输时,定时时间为两倍数据传输的时间,且进入串口中断的时候回重新初始化定时器;当数据传输完毕时,定时时间到,进入定时中断,置数据传输标志位,表示数据传输完毕。
并没有出现中断嵌套的情况,设置定时器目的就是用来判断数据是否传输完毕的。不知道大侠有没有更好的方法来判断数据传输是否完毕?

使用特权

评论回复
6
chunyang| | 2013-10-30 21:09 | 只看该作者
串口的一个字节由10到11位组成,串口接收标志置位或产生中断需要一个完整的字节被接收以后才会发生,同时要考虑到余量,用延时法判断时,延时时间通常取1.5倍字节传输时间,同时你的程序结构也必须合理,否则因你的程序执行效率问题会导致判断出错。另外,如果发送方的数据不是连续的,那么还要考虑其间断时间。

使用特权

评论回复
7
黄小俊| | 2013-10-30 22:21 | 只看该作者
W_Controller 发表于 2013-10-30 20:55
并没有用到中断嵌套,有数据传输时,定时时间为两倍数据传输的时间,且进入串口中断的时候回重新初始化定 ...

错了吧,1bit是一位,,1Byte才是1字节,,所以你要16*8=128.这样差不多了吧。

使用特权

评论回复
8
uoconn| | 2013-10-31 08:02 | 只看该作者
所发生的方式的方式的方式的

使用特权

评论回复
9
W_Controller|  楼主 | 2013-10-31 08:46 | 只看该作者
chunyang 发表于 2013-10-30 21:09
串口的一个字节由10到11位组成,串口接收标志置位或产生中断需要一个完整的字节被接收以后才会发生,同时要 ...

谢谢春阳老师指点。但还是不明白数据实际传输时间与计算得出时间相差甚远,还请老师指点迷津。

使用特权

评论回复
10
W_Controller|  楼主 | 2013-10-31 08:51 | 只看该作者
波特率指的是每秒钟通过信道传输的码元数,不是比特率。而单片机是在其接收到数据填充完SBUF的时候才进入中断的,所以进入串口中断的频率恰好是一码元的传输时间。不知我的理解是否有错?

使用特权

评论回复
11
南宫云明| | 2013-10-31 09:31 | 只看该作者
波特率指的是位,一个字节由起始位和停止位再加8位数据,总共10位,算时间就应该是:

1/(57600/10) = 173.6微妙

你说160us应该是没算上停止位(这样的话就是156.25us就够了),如果你发送两个的话,320us肯定是不够的,至少要(156.25+173.6=330us)

你试试看

使用特权

评论回复
12
zwp0822| | 2013-10-31 10:08 | 只看该作者
W_Controller 发表于 2013-10-31 08:51
波特率指的是每秒钟通过信道传输的码元数,不是比特率。而单片机是在其接收到数据填充完SBUF的时候才进入中 ...

错!
何为码元?何为比特?
在一个比特代表一个信号的情况下:1码元=1比特,所以传输一个字节所用的时间是
(1+8+1)/57600=173.6us

使用特权

评论回复
13
ayl439| | 2013-10-31 10:28 | 只看该作者
传输0x55或者0xAA  拿示波器捉住信号  看看  你就懂了

使用特权

评论回复
14
chunyang| | 2013-10-31 18:49 | 只看该作者
W_Controller 发表于 2013-10-31 08:46
谢谢春阳老师指点。但还是不明白数据实际传输时间与计算得出时间相差甚远,还请老师指点迷津。 ...

我在前帖中已经讲了怎么计算,你不明白是因为你的计算方法不对。

使用特权

评论回复
15
W_Controller|  楼主 | 2013-11-1 08:35 | 只看该作者
终于弄明白了,感谢大家的帮助。结贴了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

169

帖子

0

粉丝