打印
[51单片机]

请教51单片机使用串口中断发送和非中断发送有什么区别啊?

[复制链接]
5240|23
手机看帖
扫描二维码
随时随地手机跟帖
沙发
ningling_21| | 2015-12-7 16:04 | 只看该作者
其实区别不大,由于发送需要时间,两种方式都需要等待

使用特权

评论回复
板凳
fasm|  楼主 | 2015-12-7 18:14 | 只看该作者
ningling_21 发表于 2015-12-7 16:04
其实区别不大,由于发送需要时间,两种方式都需要等待

多谢版主。另外,非中断发送可以自己指定等待时间,那中断发送的默认等待时间由CPU自己定么,比如发送字符串时,每两个字符(unsigned char)之间的时间有多少?再次感谢!

使用特权

评论回复
地板
ningling_21| | 2015-12-7 18:26 | 只看该作者
fasm 发表于 2015-12-7 18:14
多谢版主。另外,非中断发送可以自己指定等待时间,那中断发送的默认等待时间由CPU自己定么,比如发送字 ...

每个字节发送占用的时间是根据波特率计算出来的, 如果无延迟,每2个字节之间的时间就是一个字符的发送时间

使用特权

评论回复
5
coody| | 2015-12-8 14:25 | 只看该作者
有时候区别会很大,比如多串口同时操作时。
中断,两个字节间隔时间你可以做别的事,而查询,则时间会耗在查询上。

使用特权

评论回复
6
fasm|  楼主 | 2015-12-8 15:42 | 只看该作者
了解了,多谢两位!

使用特权

评论回复
7
coody| | 2016-9-2 23:08 | 只看该作者
中断发送效率高多了。
比如要发送100个字节,9600bps,则大约1.04ms发送一个字节。
如果查询方式发送,则发送100字节要104ms,这104ms只用来查询了,做不了其它时。
中断发送时,中断里处理发送一个字节一般不超过10us,快速的MCU甚至是1~2us,并且对于主程序基本不影响,效率高。

比如使用STC15W4K系列的8位MCU,4个串口全双工115200bps,轻松处理,更别说ARM了。但是如果查询,你再快的MCU,查询时都呆在那了。

使用特权

评论回复
8
416356084| | 2016-9-3 10:55 | 只看该作者
看你的响应要求吧

使用特权

评论回复
9
djz1992| | 2017-4-26 14:19 | 只看该作者
coody 发表于 2016-9-2 23:08
中断发送效率高多了。
比如要发送100个字节,9600bps,则大约1.04ms发送一个字节。
如果查询方式发送,则发 ...

为什么以查询方式发送要比中断内发送费这么多时间?

使用特权

评论回复
10
datouyuan| | 2017-4-26 14:47 | 只看该作者
9600bps,一个字节从“开始发”到“发送完成”需要1.04ms。
查询方式是这段时间一直查询“发送完成”标志,有该标示后,再发后面的字节。
中断方式是这段时间不用查询“发送完成”标志,可以做别的事情,“发送完成”中断产生后,再发后面的字节。

“处理发送一个字节一般不超过10us,快速的MCU甚至是1~2us”
不管是查询方式还是中断方式都有这个时间。这个时间做的就是“开始发”这个过程。

使用特权

评论回复
11
datouyuan| | 2017-4-26 14:55 | 只看该作者
本帖最后由 datouyuan 于 2017-4-26 14:59 编辑
djz1992 发表于 2017-4-26 14:19
为什么以查询方式发送要比中断内发送费这么多时间?

两者费的时间是相同的。

只是查询方式是这段时间不做别的事。
中断方式这段时间可以做别的事,更快的mcu能做更多别的事。

使用特权

评论回复
12
djz1992| | 2017-4-27 13:27 | 只看该作者
datouyuan 发表于 2017-4-26 14:55
两者费的时间是相同的。

只是查询方式是这段时间不做别的事。

也就是说其实开始发送后,不需要CPU一直参与,那么是哪个部分负责发送?

使用特权

评论回复
13
datouyuan| | 2017-4-27 13:49 | 只看该作者
djz1992 发表于 2017-4-27 13:27
也就是说其实开始发送后,不需要CPU一直参与,那么是哪个部分负责发送? ...

这么基础的概念都不理解?

mcu不单是有cpu,有RAM、ROM,还有IO端口、定时器、ADC、串口等很多外设。串口外设就是负责串口发送和接收的。

使用特权

评论回复
14
datouyuan| | 2017-4-27 13:56 | 只看该作者
这些外设可以完成相应的工作,可以被cpu控制和查询。没有这些外设,仅靠cpu是不能完成那些工作的。

使用特权

评论回复
15
datouyuan| | 2017-4-27 15:47 | 只看该作者
串口中断发送和非中断发送相比:
优点:能做其它事情。
缺点:能做其它事情。要做其它事情,需要保留一些资源来处理没做完的串口发送这事,使程序复杂,占用资源多。

使用特权

评论回复
16
datouyuan| | 2017-4-27 15:49 | 只看该作者
串口中断发送和非中断发送相比:
优点:能做其它事情。
缺点:能做其它事情。要做其它事情,需要保留一些资源来处理没做完的串口发送这事,使程序复杂,占用资源多。

使用特权

评论回复
17
djz1992| | 2017-5-2 09:40 | 只看该作者
datouyuan 发表于 2017-4-27 15:49
串口中断发送和非中断发送相比:
优点:能做其它事情。
缺点:能做其它事情。要做其它事情,需要保留一些资 ...

我是菜鸟啊,我再问一个问题啊。我现在用485,485有一个发送接收的控制脚。要在发送函数中,发送前拉高,发送完之后拉低进入接收模式。如果发送也用中断来写,我不知道在哪里拉低控制脚进入接收模式呢。如果用非中断,那肯定在发送函数最后写就行了。

使用特权

评论回复
18
jackhwang| | 2017-5-2 09:53 | 只看该作者
djz1992 发表于 2017-5-2 09:40
我是菜鸟啊,我再问一个问题啊。我现在用485,485有一个发送接收的控制脚。要在发送函数中,发送前拉高, ...

采用中断发送,加入判断此次数据是否发送完。就可以解决你这个疑问了。

使用特权

评论回复
19
djz1992| | 2017-5-2 10:27 | 只看该作者
jackhwang 发表于 2017-5-2 09:53
采用中断发送,加入判断此次数据是否发送完。就可以解决你这个疑问了。 ...

对啊,这我也知道,具体是怎么判断此次数据是否发送完毕,通过什么来判断

使用特权

评论回复
20
datouyuan| | 2017-5-2 11:04 | 只看该作者
本帖最后由 datouyuan 于 2017-5-2 11:20 编辑
djz1992 发表于 2017-5-2 10:27
对啊,这我也知道,具体是怎么判断此次数据是否发送完毕,通过什么来判断 ...

串口中断发送可能每个人做法不一样,相对又复杂,仅靠文字不好描述。
串口中断发送不管用不用485,也要判断此次数据是否发送完毕(判断发送缓存区是否为空)。
建议你直接分析别人的代码。

使用特权

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

本版积分规则

4

主题

27

帖子

1

粉丝