各位大虾:
我的程序是要实现测量PWM的占空比,正常情况下信号为高电平,下降沿开始计时,上升沿结束计时。
但是目前发现这样的问题,就是
下降沿能够捕获到,但是上升沿无论如何捕获不到。(前几天,完全同样的程序就是正常的,但是这几天,同样的程序同样的硬件,就不行了。。。)
想请各位帮帮忙~!小弟先在这里谢谢各位了!
初始化部分部分是这样写的
void Clock_Init()
{
uchar i;
BCSCTL1&=~XT2OFF; //START XT2(8MHZ)
BCSCTL2|=SELM_2+SELS;
do{ //等待时钟转换
IFG1&=~OFIFG;
for(i=0;i<100;i++)
_NOP();
}
while((IFG1&OFIFG)!=0);
IFG1&=~OFIFG;
}
void Port_Init()
{
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
// P4DIR = 0XFF;P4OUT = 0XFF; //这里这句不注释掉的话,P4.0就无法捕获,这又是为什么呢?
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
}
void Timer_B0_Init( void )
{
P4SEL|=BIT0;
TBCCTL0 &= ~(CCIS1+CCIS0); //捕获输入CCIxB
TBCCTL0 |= CM_2+SCS+CAP+CCIE; //下降沿触发+同步+捕获模式+中断开启
TBCTL |= TBSSEL_1+MC_2+TBCLR; //选择ACLK(32768Hz)+连续计数+清除TBR
}
中断程序是这样的
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B0_CAP(void)
{
if(TBCCTL0&CM_2) //捕获到下降沿
{
TBCTL|=TBCLR; //TBR清零
TBCCTL0=(TBCCTL0&(~CM_2))|CM_1; //改为上升沿捕获
}
else if(TBCCTL0&CM_1) //捕获到上升沿 //这里怎么也进不来~
{
T_Diff+=TBCCR0; //记录低电平时间
TBCCTL0=(TBCCTL0&(~CM_1))|CM_2; //改为下降沿捕获
}
}