我把初始化捕获和中断函数贴出来。。 大侠帮我看看有没问题啊。。。。?在P1,1接一个3V方波,就是不能进入捕获中断(定时器溢出中断能进入)
void InitCaputor()
{
//IO初始化
P1DIR &= ~BIT1;
P1SEL |=BIT1; //P1.1设置为捕获输入CCI0A
TACCTL1 = CM_1 + SCS +CCIS_0 + CAP + CCIE;
//时钟源ACLK + 增计数模式 + TAIFG中断使能
CCR0 = 1000;
TACTL = TASSEL_1 + MC_1 + TAIE;
}
中断函数:
#pragma vector = TIMERA1_VECTOR
__interrupt void overflow_ISR(void)
{
switch(TAIV)
{
case 2 : {
if(cap_rise==0) //P1.1接一个3V的方波信号,这这只一个端点,程序无法到达
{
cap_first=TACCR1; //第一次捕获记录CCR0中的数
cap_rise++; //脉冲数+1
}
else
{
cap_last=TACCR1; //记录最后一次CCR0中的数
cap_rise++;
}
break;
}
case 4 : break;
case 10:{ //定时器连续计数模式 溢出中断
if(cap_first==cap_last) //未发生捕获
{
pulse = 0;
}
else
{
pulse = cap_rise-1; //捕获到的脉冲数
cap_rise = 0; //脉冲计数器 清零
time = cap_last - cap_first; //时间间隔
getok = 1; //设置标志位 完成频率采集
cap_last = 0;
cap_first = 0;
_BIC_SR_IRQ(CPUOFF); //退出低功耗模式 进行频率运算
}
break;
}
}
}
此帖出自
小平头技术问答
一周热门 更多>