标题: 单片机程序由于进中断过于频繁导致主函数无法正常运行如何解决? [打印本页]

作者: fhff    时间: 2022-12-6 21:34
标题: 单片机程序由于进中断过于频繁导致主函数无法正常运行如何解决?
51单片机波形发生器程序
有没有大佬帮忙看看这个问题怎么解决啊:用定时中断来产生波形,通过设置定时时间来设置波形频率,但是当频率到100hz后,程序由于进中断函数频率过高导致数码管显示异常,到1000hz后连按键扫描也失效了,这种由于进中断过于频繁导致主函数无法正常运行的问题怎么解决。

1.png (87.43 KB, 下载次数: 72)

1.png

2.png (150.24 KB, 下载次数: 59)

2.png

3.png (92.78 KB, 下载次数: 72)

3.png

作者: npn    时间: 2022-12-7 08:29
定时器0中断程序处理时间,超过初值时间导致溢出。
溢出后TF0硬件置1,包含 intrins.h 头文件后,中断底部加一句判断有无溢出: if(_testbit_(TF0)) { }  溢出后if条件会成立,更换1T单片机或使用更高频率晶振。
作者: 1261867136qq    时间: 2022-12-7 09:23
100hz =100次/秒 ,T = 10ms  
51假如用12M晶振,12000000次/S,T =1/12, Tcy = 12* 1/12 = 1us

一个周期64个采样点,就是要花10ms, 那每个采样时间段156.25us,

似乎要加滤波电路吧


作者: xuyaqi    时间: 2022-12-7 09:45
有直接输出波形不要cpu
作者: xuyaqi    时间: 2022-12-7 09:51
有直接输出波形不要cpu参与的单片机,为什么会有越来越多高级单片机,就是老单片机功能不够用。
作者: 人中狼    时间: 2022-12-7 10:05
程序结构问题,1khz频率不算高,按键或许会反应迟钝,但不会没有反应,而且需要确定1khz和定时器中断时间的对应关系
作者: coody_sz    时间: 2022-12-7 11:13
你先测出来中断耗时多少,然后保证中断间隔大于这个时间。
作者: Longan.Wang    时间: 2022-12-7 11:59
中断服务程序尽量短小!
作者: fhff    时间: 2022-12-7 13:28
npn 发表于 2022-12-7 08:29
定时器0中断程序处理时间,超过初值时间导致溢出。
溢出后TF0硬件置1,包含 intrins.h 头文件后,中断底部 ...

加了溢出检测后确实溢出了

1.png (143.46 KB, 下载次数: 75)

1.png

2.png (19.5 KB, 下载次数: 74)

2.png

作者: fhff    时间: 2022-12-7 13:30
xuyaqi 发表于 2022-12-7 09:51
有直接输出波形不要cpu参与的单片机,为什么会有越来越多高级单片机,就是老单片机功能不够用。

主要是要求用的51单片机
作者: liangzz    时间: 2022-12-7 14:09
这种通过定时器产生高频率波形输出对于很多51单片机是搞不定的,很多51的单片机定时器中断时间设置少于50us以下就开始没法胜任,你自己可以算一下最多能输出多高的方波,像你这种最好不要用定时器而是拉到有pwm功能输出的脚上。
作者: yzwzfyz    时间: 2022-12-7 14:27
说明的时序设计不合理。
事件的处理不要放在中断服务处理程序中,放中主程序中。
中断服务程序要尽量短,做个事件的标记即可!
在主程序中,根据标记处理事件。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1