差点忘了说一件重要的事情:如果下一次还想正常中断,那么一定要在中断服务程序里把中断标志位CCFn清零,不然可能会发生莫名其妙的错误。
思路考虑好了,就该看看具体的代码实现了。
实现的方法有三种。我最早的时候用的程序是:
//假设需要每a周期中断一次,a是一个unsigned int变量
void PCAinterrupt(void) interrupt 7 using 2 //interrupt 7就是PCA中断
{
if(CCF0) //如果是PCA第0路引发中断
{
CCAP0L += a; //CCAP0L加上a的低8位
CCAP0H += PSW >> 7; //如果有进位,CCAP0H加1
CCAP0H += a >> 8; //CCAP0H加上a的高8位
}
CCON &= 0xF8; //清0标志位,以助于下次中断
return;
}
思路考虑好了,就该看看具体的代码实现了。
实现的方法有三种。我最早的时候用的程序是:
//假设需要每a周期中断一次,a是一个unsigned int变量
void PCAinterrupt(void) interrupt 7 using 2 //interrupt 7就是PCA中断
{
if(CCF0) //如果是PCA第0路引发中断
{
CCAP0L += a; //CCAP0L加上a的低8位
CCAP0H += PSW >> 7; //如果有进位,CCAP0H加1
CCAP0H += a >> 8; //CCAP0H加上a的高8位
}
CCON &= 0xF8; //清0标志位,以助于下次中断
return;
}