xiaobendan001 发表于 2024-5-10 10:30 只要是中断,都是不建议有延时的,反正linux内核的中断是这样的思想 |
xjtong 发表于 2024-5-10 17:33 我用KEIL 4编译你程序不过,修改下int0 通过,程序一切正常,没有乱入问题 |
就是用单片机操作续电器,续电器控制风扇。 有一个2。4G雷达,有运动就开风扇,开的时间用延时控制。 中断的作用是改变延时的时候,从而改变风扇运行的时候。 #include <STC8G.h> 这样基本就没问题的。就是中断重入的问题。开始LED闪烁明显不对。现在一切正常了。 |
xjtong 发表于 2024-5-10 14:28 再发生中断会挂起pending,退出中断处理程序后会再次进入中断处理程序。 |
不关是不是重复中断,这样延时的闪烁都应该正常才对啊,先软件模拟一下看看那些变量都是多少 |
npn 发表于 2024-5-10 15:39 恩,直接用杜邦线点GND,按键都省了。 |
tyrl800 发表于 2024-5-10 15:30 编译一直没问题,就是中断是乱的。应该是中断重入的问题。 |
问题解决了。void int0() interrupt 0 这样就好了。 |
外部中断接的是什么? 如果是按键需要消抖处理。 |
都说了编译通不过呀 |
xjtong 发表于 2024-5-10 14:28 "中断里的程序还没处理完又发生中断" 单片机会继续运行中断函数 直到运行完毕跳出中断函数 单片机会立刻再次运行中断函数 |
Longan.Wang 发表于 2024-5-10 09:57 一次是10ms,20次是200ms |
lkc8210 发表于 2024-5-10 13:06 你说对了。 我觉得是抖动的问题,所以在中断是把EA关了呀。 在中断里延时也是怕抖动的问题。 重点是有一个逻辑我没弄明白。比如中断里的程序还没处理为又发生中断,这时单片机怎么处理,是直接无视,还是排对处理呀??? |
![]() |
没电路图盲猜按键接中断 你没加按键消抖,并在中断里延时了 于是中断在延时期间收到抖动信号,误判了 反复进入中断 |
lightday 发表于 2024-5-10 09:35 楼主的中断只是用来接收开关信号的,又不是定时器中断,加点延时咋了? |
cy009 发表于 2024-5-10 09:28 有啥不科学的? |
编程技巧先不说,延时短了,眼睛根本看不到闪 |
编译没通过吧 |
中断程序加延时是大忌,完全偏离中断的意义。 可以在中断里改变闪烁次数变量,然后在主程序里实现闪烁。 |
EA放在中断函数里不科学吧! |
中断触发方式呢? |