PCA的16位软定时器显示在示波器上面的波形一直没有变化。我的程序是定时让一个IO口电平翻转,示波器上面应该有方波,随着[CCAPnH,CCAPnL]的值的改变,方波的频率应该会变化。但是示波器上的方波固定显示7Hz左右。奇怪了!难道那个寄存器没设置?
我翻开Datasheet,仔细阅读,终于发现了问题所在。“如果每次PCA模块中断后,在中断服务程序中断给[CCAPnH,CCAPnL]增加一个相同的数值,那么下次中断来临的间隔时间T也是相同的,从而实现了定时功能。”“增加”二字被我忽略了。实质上PCA16位软定时器与定时器0和定时器1有区别,PCA16软定时器要给初装值增加一个初装值。后面的例程里面是这样处理的:将初装值赋给一个变量value,等value给[CCAPnH,CCAPnL]重装后,让value自增一个value值,即value+=0x039A。我之前的程序参考了例程,看到里面value的自增程序,但是没去理解,以为例程在干别的功能,我就直接把那几句删了。后果想当严重!
下面的程序是正确的,作为参考:
sbit LED=P1^0;
unsigned int value;
void main()
{
//PCA16定时器
CCON=0;
CL=0;
CH=0;
CMOD=0x00;
value=0x039A;//定时大约1ms
CCAP0L=value;
CCAP0H=value>>8;
value+=0x039A;
CCAPM0=0x49;//设置PCA为16位软定时器
CR=1;
EA=1;
while(1) {}
}
void PCA_isr() interrupt 7 using 1
{
CCF0=0;//清0中断标志
CCAP0L=value;
CCAP0H=value>>8;//定时大约1ms
value+=0x039A;
LED=~LED;
}
用户377235 2015-8-14 21:31
用户377235 2012-10-16 17:08
你好,我的程序可以产生脉冲但是不是方波,而是占空比很小的脉冲怎么回事啊??
用户1278632 2010-11-15 18:56
用户177038 2010-11-13 23:31
用户1278632 2010-11-13 23:21
xucun915_925777961 2010-11-12 12:44