关于STC8A8K64D4单片机中15bit增强型PWM的 归零中断 问题
关于试验箱例程中 避免第一次开启PWM计数时 会触发一次归零中断的避免方法这里//PWMCEN写0再写1时, 会立即产生一个归零中断, 通过以下方法屏蔽掉这个中断
EA = 0;
PWMCFG = 0x05; //启动 PWM 模块, 使能计数器归零中断
_nop_();
_nop_();
PWMCFG &= ~0x08; //清标志位
EA = 1;是否可以理解为 关闭总中断后 开启PWM计数时 虽然归零标志位仍然会置位但是 由于关闭了总中断,清除了归零标志之后 再打开总中断也不会触发 PWM中断。。
那么基于以上理解,那是不是可以不用关闭总中断。 只是 不开启归零中断,在清除了归零标志位后再开启归零中断,,是否可以达到相同的效果。
PWMCFG |= PWMCEN; // 启动PWM 但不开启归零中断
_nop_();
_nop_();
PWMCFG &= ~PWMCBIF; // 清标志位
PWMCFG |= PWMCBIE; //开启归零中断
基本上,正常的开启中断都是: 清除中断标志,NOP(3); 开中断。
比如外中断INT0~INT4用于下降沿中断,在禁止终端期间,只要出现过下降沿,则中断标志就为1,一旦允许中断,马上进去,所以要先清除中断标志,NOP(3); 开中断。
同理,定时器也一样,一旦溢出,中断标志就会置1,开中断前,先清除标志,NOP(3); 再开中断。 梁工 发表于 2024-4-3 22:57
基本上,正常的开启中断都是: 清除中断标志,NOP(3); 开中断。
比如外中断INT0~INT4用于下降沿中断,在禁 ...
嗯嗯 虽然没有正面回答我的问题,,
但是梁工描述的和我理解的基本吻合,, 你好,用您上面的代码,并不能屏蔽第一个归零中断,我把延时加长了,还是不行 zanjun 发表于 2026-2-2 15:41
你好,用您上面的代码,并不能屏蔽第一个归零中断,我把延时加长了,还是不行 ...
抱歉,已经是很久之前测试的代码了。。。
由于我实际的应用中,多一个中断少一个中断并没有太大差距。所以这里也有浅尝辄止的问了问。
如果您能把出现问题的最简工程发上来,或许我能看出来是不是有其他的问题。 _奶咖君_ 发表于 2026-2-3 14:47
抱歉,已经是很久之前测试的代码了。。。
由于我实际的应用中,多一个中断少一个中断并没有太大差距。所 ...
我的一个程序,需要单次启动PWM,延时一定时间,改T1/T2,
再单次启动PWM,延时,如此重复,
实验的结果不能正常运行,输出的波形和设计的不一样,
单次启动,就是设好T1/T2,启动,在归零中断中,停止PWM
之前,连续运行PWM,在归零中断里改T1/T2,就没有问题,
至于第一次就不关心了
zanjun 发表于 2026-2-14 08:49
我的一个程序,需要单次启动PWM,延时一定时间,改T1/T2,
再单次启动PWM,延时,如此重复,
实验的结果不 ...
你重新发个贴,MCU型号,
要实现的功能,你的完整简单测试程序,
现象,我请研发帮您分析
页:
[1]