msp430f149定时器捕捉寄存器问题

楼主
msp430f149定时器捕捉寄存器问题
[P] void main()
{
  WDTCTL=WDTPW+WDTHOLD;         //关闭看门狗
 
   //-------开晶振XT2---------[/P][P]   BCSCTL1&=~XT2OFF;                //打开XT2振荡器
   do
   {
   IFG1 &= ~OFIFG;                     // 清除振荡器失效标志
   for (i=256;i>0;i--);                     // 延时,等待XT2起振
   }
  while ((IFG1 & OFIFG) != 0);            // 判断XT2是否起振[/P][P]  BCSCTL2 =SELM_2+SELS;             //选择MCLK=SMCLK为XT2[/P][P]  //-----------------------------
  P1DIR|=BIT0;
  P4SEL|=BIT0;                          //P4.0作为捕获模块功能的输入端输入方波
  P5DIR|=BIT6+BIT4;
  P5SEL|=BIT6+BIT4;
  Set_UART1();
  TBCCTL0&=~(CCIS1+CCIS0);          // 捕获源为P4.0,即CCI0A(也是CCI0B)
  TBCCTL0|=CM_2+SCS+CAP;           //下降沿捕获,同步捕获,工作在捕获模式
  TBCCTL0|=CCIE;                     //允许捕获比较模块提出中断请求
  TBCTL|=ID_2;
  TBCTL|=TBSSEL_2;                   //选择时钟SMCLK
                    //定时器清零,
  TBCCR0=TBCLR;
  TBCTL|=MC_2;     //定时器开始计数(连续计数模式0~0xFFFF)
  P1OUT|=BIT0;
  _EINT();
  while(1);
}[/P][P]#pragma vector=TIMERB0_VECTOR        
__interrupt void TimerB0(void)
{  
 
   if(TBCCTL0&CM1)                        //捕获到下降沿(检测是下降沿触发中断)
     {
      TBCTL|=TBCLR;
      TBCCTL0=(TBCCTL0&(~CM1))|CM0;    //改为上升沿捕获:CM1置零,CM0置一[/P][P]     }
   else if(TBCCTL0&CM0)                    //捕获到上升沿(检测上升沿触发中断)
     {
      width[i++]=TBCCR0;                  //记录下结束时间
     
      TBCCTL0=(TBCCTL0&(~CM0))|CM1;   //改为下降沿捕获:CM0置零,CM1置一
      if(i==12)
      { i=0;
      h++;
      }
      }
  if(h==300)
  { h=0;
  P1OUT=~P1OUT;
    send(width,12);
  }
}[/P][P]问题:我查了很多资料,可还是找不到问题在哪里,定时器B选择SMCLK进行分频时 TBCTL|=ID_3;可以工作 串口有数据,可TBCTL|=ID_2;为什么就不能接收了,感觉没进入中断啊。串口收发程序正常,请高手指点....我是拿ACLK接得输入[/P]
1楼
[P]请问你的程序控制流程是什么?你贴子里没有描述。“串口有数据”与这TB的捕获是什么关系?[/P]
2楼
[P]崩溃 为什么用 CCIE位   捕获/比较模块中断允许位和 _DINT(); 效果不一样啊 为什么前者数据发送一会就没有了     真的很郁闷到现在还是没找出哪的问题   希望版主不吝赐教..... 我是把串口发送数据改到[/P][P]while(1)
  {  if(h==300)
    { h=0;
    P1OUT=~P1OUT;
    send(width,10);
    }
  } 放到中断里少捕获了几个(这个放到中断里正常的)[/P][P] [/P][P]    [/P]
3楼
[P][LINE-HEIGHT=21px][ALIGN=left][BGCOLOR=rgb][SIZE=14px]   if(TBCCTL0&CM1)                        //捕获到下降沿(检测是下降沿触发中断)
     {
      TBCTL|=TBCLR;
      TBCCTL0=(TBCCTL0&(~CM1))|CM0;    //改为上升沿捕获:CM1置零,CM0置一[/SIZE][/BGCOLOR][/ALIGN][/LINE-HEIGHT][/P][P][LINE-HEIGHT=21px][ALIGN=left][BGCOLOR=rgb][SIZE=14px]     } [/SIZE][/BGCOLOR][/ALIGN][/LINE-HEIGHT][/P][P][LINE-HEIGHT=21px][ALIGN=left][BGCOLOR=rgb][SIZE=14px]
[/SIZE][/BGCOLOR][/ALIGN][/LINE-HEIGHT][/P][P][LINE-HEIGHT=21px][ALIGN=left][BGCOLOR=rgb][SIZE=14px]第二句, TBCTL |= TBCLR; [/SIZE][/BGCOLOR][/ALIGN][/LINE-HEIGHT][/P][P][LINE-HEIGHT=21px][ALIGN=left][BGCOLOR=rgb][SIZE=14px]会把 TB计数模式 清零 ,  变为 MC_0, 停止计数[/SIZE][/BGCOLOR][/ALIGN][/LINE-HEIGHT][/P]

电脑版 Page created in 0.1562 seconds width 3 queries.