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

[复制链接]
5255|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来微秒,总的字节发完就不管了。一帧信息你没及时处理屏幕又不会立马给你发新的数据来
受不了了 发表于 2015-6-29 20:20 | 显示全部楼层
9600波特率,字节的间隔约1毫秒,通讯就占用10几微秒,百分之一的时间,你不会是在原地等吧
 楼主| 衰不堪言 发表于 2015-6-29 20:41 来自手机 | 显示全部楼层
受不了了 发表于 2015-6-29 20:14
?哪要那么多时间,串口中断每收到一字节存一下,哪怕就普通51,也不过10几微秒,含堆栈处理估计也不超过 ...

不好意思,y表达错误,我所说的是发送,9600波特率,一秒钟9600位,按照一个字符8位,也就是一秒钟传输9600/8=1200个字符,也就是一个字符830us,若是我在发送过程中被中断怎么办
受不了了 发表于 2015-6-29 20:51 | 显示全部楼层
不是有那个协议吗,间隔时间超过多少对方就认为你一帧消息发送完成了,好像几个半字符,反正有几个毫秒,中断几个毫秒都还得不到响应那有点太糟糕了
 楼主| 衰不堪言 发表于 2015-6-29 21:22 来自手机 | 显示全部楼层
受不了了 发表于 2015-6-29 20:51
不是有那个协议吗,间隔时间超过多少对方就认为你一帧消息发送完成了,好像几个半字符,反正有几个毫秒,中 ...

突然想明白了,谢谢
mcu5i51 发表于 2015-6-30 09:47 | 显示全部楼层
好像又是原地等待的同学,教科书害死人呀
ningling_21 发表于 2015-6-30 10:05 | 显示全部楼层
衰不堪言 发表于 2015-6-29 21:22
突然想明白了,谢谢

接收数据是串口自动完成的,不需要等待也不会被中断(除非断线)
受不了了 发表于 2015-6-30 10:46 | 显示全部楼层
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过
mcu5i51 发表于 2015-6-30 11:15 | 显示全部楼层
受不了了 发表于 2015-6-30 10:46
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过 ...

书上的
disp_led0();
delay();
disp_led1();
delay...
不只是简单化的教学显示方法,也是在同时锁住了很多同学的思维,认为MCU正在处理显示,不能做别的;
这里LZ也是在思想上以为,MCU在处理串口通讯,完成前不能做别的;不过LZ 好像想通了
 楼主| 衰不堪言 发表于 2015-6-30 21:43 来自手机 | 显示全部楼层
mcu5i51 发表于 2015-6-30 11:15
书上的
disp_led0();
delay();

多谢指导,我其实是本来想表达发送字符时串口中断被高优先级中断,导致上位机检测到发送错误怎么办,后来想明白了,高优先级中断的代码不能太长,代码自己控制好了就行,哈哈,多谢各位
 楼主| 衰不堪言 发表于 2015-6-30 21:45 来自手机 | 显示全部楼层
受不了了 发表于 2015-6-30 10:46
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过 ...

嗯嗯,的确是这样的,是三个半吧,嘿嘿,大概3ms多,我这回是明白了
 楼主| 衰不堪言 发表于 2015-6-30 21:45 来自手机 | 显示全部楼层
受不了了 发表于 2015-6-30 10:46
楼主应该不是在原地等,估计还是被那个啥几个半字符间隔给弄迷糊了,几年前写好了就再没去研究过 ...

多谢
Thor9 发表于 2015-7-3 20:57 | 显示全部楼层
接收数据是串口自动完成的,不需要等待也不会被中断
coody 发表于 2015-7-3 21:06 | 显示全部楼层
那得看你程序怎么写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

142

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0