找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1274|回复: 11
收起左侧

单片机程序由于进中断过于频繁导致主函数无法正常运行如何解决?

[复制链接]
ID:1043931 发表于 2022-12-6 21:34 | 显示全部楼层 |阅读模式
51单片机波形发生器程序
有没有大佬帮忙看看这个问题怎么解决啊:用定时中断来产生波形,通过设置定时时间来设置波形频率,但是当频率到100hz后,程序由于进中断函数频率过高导致数码管显示异常,到1000hz后连按键扫描也失效了,这种由于进中断过于频繁导致主函数无法正常运行的问题怎么解决。
1.png
2.png
3.png
回复

使用道具 举报

ID:57657 发表于 2022-12-7 08:29 | 显示全部楼层
定时器0中断程序处理时间,超过初值时间导致溢出。
溢出后TF0硬件置1,包含 intrins.h 头文件后,中断底部加一句判断有无溢出: if(_testbit_(TF0)) { }  溢出后if条件会成立,更换1T单片机或使用更高频率晶振。
回复

使用道具 举报

ID:308903 发表于 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,

似乎要加滤波电路吧

回复

使用道具 举报

ID:94031 发表于 2022-12-7 09:45 | 显示全部楼层
有直接输出波形不要cpu
回复

使用道具 举报

ID:94031 发表于 2022-12-7 09:51 | 显示全部楼层
有直接输出波形不要cpu参与的单片机,为什么会有越来越多高级单片机,就是老单片机功能不够用。
回复

使用道具 举报

ID:384109 发表于 2022-12-7 10:05 | 显示全部楼层
程序结构问题,1khz频率不算高,按键或许会反应迟钝,但不会没有反应,而且需要确定1khz和定时器中断时间的对应关系
回复

使用道具 举报

ID:1034262 发表于 2022-12-7 11:13 | 显示全部楼层
你先测出来中断耗时多少,然后保证中断间隔大于这个时间。
回复

使用道具 举报

ID:77589 发表于 2022-12-7 11:59 | 显示全部楼层
中断服务程序尽量短小!
回复

使用道具 举报

ID:1043931 发表于 2022-12-7 13:28 | 显示全部楼层
npn 发表于 2022-12-7 08:29
定时器0中断程序处理时间,超过初值时间导致溢出。
溢出后TF0硬件置1,包含 intrins.h 头文件后,中断底部 ...

加了溢出检测后确实溢出了
1.png
2.png
回复

使用道具 举报

ID:1043931 发表于 2022-12-7 13:30 | 显示全部楼层
xuyaqi 发表于 2022-12-7 09:51
有直接输出波形不要cpu参与的单片机,为什么会有越来越多高级单片机,就是老单片机功能不够用。

主要是要求用的51单片机
回复

使用道具 举报

ID:201854 发表于 2022-12-7 14:09 | 显示全部楼层
这种通过定时器产生高频率波形输出对于很多51单片机是搞不定的,很多51的单片机定时器中断时间设置少于50us以下就开始没法胜任,你自己可以算一下最多能输出多高的方波,像你这种最好不要用定时器而是拉到有pwm功能输出的脚上。
回复

使用道具 举报

ID:123289 发表于 2022-12-7 14:27 | 显示全部楼层
说明的时序设计不合理。
事件的处理不要放在中断服务处理程序中,放中主程序中。
中断服务程序要尽量短,做个事件的标记即可!
在主程序中,根据标记处理事件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表