打印
[51单片机]

请教下关于单片机多个中断同时进行的问题

[复制链接]
4677|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
衰不堪言|  楼主 | 2015-6-29 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序里有两个定时器中断,一个外部中断和一个串口中断,Timer2中断是处理些标志位,外部中断检测电网过零点,然后启动Timer0,Timer0中断后使能可控硅输出,用以移相,另外单片机还接了一个外部芯片,大概100MS通讯一次。
那么问题是这样的,我的上位机,也就是触摸屏会不间断的(间隔几百MS)发送数据给单片机,单片机收到后会回传数据给上位机,那么这么多中断里,外部中断优先级最高,此时会否影响通讯

相关帖子

沙发
受不了了| | 2015-6-29 15:50 | 只看该作者
和触摸屏通讯消耗资源极其少的,几乎可以忽略不计,一般不会影响

使用特权

评论回复
板凳
衰不堪言|  楼主 | 2015-6-29 19:46 | 只看该作者
受不了了 发表于 2015-6-29 15:50
和触摸屏通讯消耗资源极其少的,几乎可以忽略不计,一般不会影响

怎么会很少,9600的波特率,modbus协议,一次接收就需要8ms左右

使用特权

评论回复
地板
受不了了| | 2015-6-29 20:14 | 只看该作者
衰不堪言 发表于 2015-6-29 19:46
怎么会很少,9600的波特率,modbus协议,一次接收就需要8ms左右

?哪要那么多时间,串口中断每收到一字节存一下,哪怕就普通51,也不过10几微秒,含堆栈处理估计也不超过20微秒,间歇时间到一帧信息接收完成,CRC校验,功能处理,然后发送第一字节,也就一毫秒不到的事。发送更是简单,每中断一次发送一字节,每次占用10来微秒,总的字节发完就不管了。一帧信息你没及时处理屏幕又不会立马给你发新的数据来

使用特权

评论回复
5
受不了了| | 2015-6-29 20:20 | 只看该作者
9600波特率,字节的间隔约1毫秒,通讯就占用10几微秒,百分之一的时间,你不会是在原地等吧

使用特权

评论回复
6
衰不堪言|  楼主 | 2015-6-29 20:41 | 只看该作者
受不了了 发表于 2015-6-29 20:14
?哪要那么多时间,串口中断每收到一字节存一下,哪怕就普通51,也不过10几微秒,含堆栈处理估计也不超过 ...

不好意思,y表达错误,我所说的是发送,9600波特率,一秒钟9600位,按照一个字符8位,也就是一秒钟传输9600/8=1200个字符,也就是一个字符830us,若是我在发送过程中被中断怎么办

使用特权

评论回复
7
受不了了| | 2015-6-29 20:51 | 只看该作者
不是有那个协议吗,间隔时间超过多少对方就认为你一帧消息发送完成了,好像几个半字符,反正有几个毫秒,中断几个毫秒都还得不到响应那有点太糟糕了

使用特权

评论回复
8
衰不堪言|  楼主 | 2015-6-29 21:22 | 只看该作者
受不了了 发表于 2015-6-29 20:51
不是有那个协议吗,间隔时间超过多少对方就认为你一帧消息发送完成了,好像几个半字符,反正有几个毫秒,中 ...

突然想明白了,谢谢

使用特权

评论回复
9
mcu5i51| | 2015-6-30 09:47 | 只看该作者
好像又是原地等待的同学,教科书害死人呀

使用特权

评论回复
10
ningling_21| | 2015-6-30 10:05 | 只看该作者
衰不堪言 发表于 2015-6-29 21:22
突然想明白了,谢谢

接收数据是串口自动完成的,不需要等待也不会被中断(除非断线)

使用特权

评论回复
11
受不了了| | 2015-6-30 10:46 | 只看该作者
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过

使用特权

评论回复
12
mcu5i51| | 2015-6-30 11:15 | 只看该作者
受不了了 发表于 2015-6-30 10:46
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过 ...

书上的
disp_led0();
delay();
disp_led1();
delay...
不只是简单化的教学显示方法,也是在同时锁住了很多同学的思维,认为MCU正在处理显示,不能做别的;
这里LZ也是在思想上以为,MCU在处理串口通讯,完成前不能做别的;不过LZ 好像想通了

使用特权

评论回复
13
衰不堪言|  楼主 | 2015-6-30 21:43 | 只看该作者
mcu5i51 发表于 2015-6-30 11:15
书上的
disp_led0();
delay();

多谢指导,我其实是本来想表达发送字符时串口中断被高优先级中断,导致上位机检测到发送错误怎么办,后来想明白了,高优先级中断的代码不能太长,代码自己控制好了就行,哈哈,多谢各位

使用特权

评论回复
14
衰不堪言|  楼主 | 2015-6-30 21:45 | 只看该作者
受不了了 发表于 2015-6-30 10:46
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过 ...

嗯嗯,的确是这样的,是三个半吧,嘿嘿,大概3ms多,我这回是明白了

使用特权

评论回复
15
衰不堪言|  楼主 | 2015-6-30 21:45 | 只看该作者
受不了了 发表于 2015-6-30 10:46
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过 ...

多谢

使用特权

评论回复
16
Thor9| | 2015-7-3 20:57 | 只看该作者
接收数据是串口自动完成的,不需要等待也不会被中断

使用特权

评论回复
17
coody| | 2015-7-3 21:06 | 只看该作者
那得看你程序怎么写。

使用特权

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

本版积分规则

19

主题

142

帖子

1

粉丝