单片机PCA模块软件16位定时器的步进值问题, STC的PCA模块16位定时器,当[CH,CL]计数到跟[CCAPH,CCAPL]里的数值”匹配”时,若设置了中断允许,将发生比较匹配中断.在中断处理函数里,要求给
CCAPH,CCAPL赋一个不断增加的固定的值,才能实现定时,这跟普通的T0,T1定时器不同.我的疑问是,当[CCAPH,CCAPL]增大到65536时,就变0了,怎么还能有固定的”步进”呢?[CH,CL]要等于越来越大的[CCAPH,CCAPL],计数所需时间会越来越长,怎么会定时?请对此有研究的老师指教一二,谢谢!
,最近查了些资料,将新认识补上,请指正!单片机T0,T1等计数/定时器,必须[TH,TL]计数到65536时才发生
溢出中断,因此如果希望计数1000次就发生中断,必须在[TH,TL]里预置一个固定值64536。有PCA组件的单片机用其16位计数器功能时,若允许比较匹配中断,则[CH,CL]计数到等于[CCAPnH,CCAPnL]里预设的值时,即能发生中断,但并未溢出!中断后[CH,CL]一刻不停继续计数。因计数值超过[CCAPnH,CCAPnL]后,在0–
65536范围内不可能再次发生比较匹配,因此每一轮0–65536循环计数只能有一次比较匹配中断,显然这并不符合各种计数/定时要求。只有在发生中断时在中断服务程序里给[CCAPnH,CCAPnL]增加一个步进值,才可能发生下一次比较匹配中断。例如,我们希望计数1000次就中断一次,则第一次匹配中断发生时令[CCAPnH,CCAPnL]=1000+1000,则[CH,CL]从1001,1002…计数到2000时就能再次发生比较匹配中断。
若比较匹配中断发生时,令[CH,CL]=0,从头开始计数,则[CCAPnH,CCAPnL]l里就可以放一个固定步进值了,有的程序就是这样做的。不过由于PCA组件有几个模块,它们共用[CH,CL]计数器。当模块0用于16位计数时,也许模块1正用其PWM功能,所以在中断处理函数中令[CH,CL]=0的做法只适合仅使用一个模块作16位计数/定时的情况。