在线情况
楼主
  • 头像
  • 级别
    • 积分3
    • 经验419
    • 文章6
    • 注册2011-07-21
    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]
    期待......ing
    在线情况
    2
    • 头像
    • 级别
      • 积分3
      • 经验419
      • 文章6
      • 注册2011-07-21
      [P]崩溃 为什么用 CCIE位   捕获/比较模块中断允许位和 _DINT(); 效果不一样啊 为什么前者数据发送一会就没有了     真的很郁闷到现在还是没找出哪的问题   希望版主不吝赐教..... 我是把串口发送数据改到[/P][P]while(1)
        {  if(h==300)
          { h=0;
          P1OUT=~P1OUT;
          send(width,10);
          }
        } 放到中断里少捕获了几个(这个放到中断里正常的)[/P][P] [/P][P]    [/P]
      期待......ing
      Powered by LeadBBS 9.2 .
      Page created in 0.2344 seconds with 11 queries.