STC89C52RC单片机同时使用定时器和蜂鸣器时,定时器出现卡顿。
使用的软件为Keil5。
我自己排查,发现是蜂鸣器函数的问题,我把第一张图上面的C88注释,Sec在1时的值就不会卡顿
以下为相关函数
定时器
蜂鸣器
所以请问一下,主函数或者是蜂鸣器函数该怎么改?
因为蜂鸣器发声函数是会阻塞主进程的,影响了LCD的及时刷新。
可以考虑把蜂鸣器的控制放到中断里,Buzzer_Time这个函数不直接控制蜂鸣器,而是改变一个全局标志位,即蜂鸣器发声倒计时计数器。
在定时器中断里,如果发现这个标志不为0,就控制蜂鸣器发声,同时对倒计时进行修改。当然,要挑选合适的中断周期,以发出所需频率的声音。
补充说明一下,用定时器中断产生声音频率,对系统影响比较大,因为既要考虑声音频率,又要考虑其它任务对定时器周期的需求,如果可能,换成有源蜂鸣器会让系统简单很多。当然,资源充足的情况下,可以考虑用一个定时器来产生声音频率,另一个来做计时。