在线情况
楼主
  • 头像
  • 级别
    • 积分3
    • 经验33
    • 文章3
    • 注册2011-07-26
    求利用定时器捕获模式和定时中断的测频程序
    [P]大哥大姐们,帮我看看这儿哪出问题了啊,仿真不能运行,出错误!!!!急求!!![/P][P] [/P][P] [/P][P]/*实现功能:测量外部信号的频率*/
    #include <msp430x14x.h>
    #include  "cry12864.c"
    #define uchar unsigned char
    #define uint unsigned int
    uint Cap_Tar,pulse,cap_last,cap_fist,time;[/P][P]struct result                   //定义结构类型
    {
     unsigned long product;
     unsigned int sumext;
    }MPYresult;                     //硬件乘法器结果 声明结构变量
    unsigned int *p ;               //指针声明 [/P][P]void xianshi(unsigned int i)
    {
      if(i<1000)
      {
        uint ptr[6],t1,t2,t3;
        i=i*100;
        ptr[0] = (i / 10000);                  
        t1 = i - (ptr[0] * 10000);
        ptr[1] = t1 / 1000;
        t2 = t1 - (ptr[1] * 1000);
        ptr[2] = t2 / 100;
        t3 = t2 - (ptr[2]*100);
        ptr[4] = t3 / 10;
        ptr[5] = t3 - (ptr[4]*10);
        ptr[3] = 0x2e;    
        ptr[0] = ptr[0]+48;
        ptr[1] = ptr[1]+48;
        ptr[2] = ptr[2]+48;
        ptr[4] = ptr[4]+48;
        ptr[5] = ptr[5]+48;
        //在液晶上显示变换后的结果
        Write_Cmd(0x9c);
        for(i = 0;i < 6;i++)
       
          Write_Data(ptr[I]);
      }
      else
        if(i>1000 & i<10000)
        {
          uint ptr[6],t1,t2,t3;
          i=i*10;
          ptr[0] = (i / 10000);                  
          t1 = i - (ptr[0] * 10000);
          ptr[1] = t1 / 1000;
          t2 = t1 - (ptr[1] * 1000);
          ptr[2] = t2 / 100;
          t3 = t2 - (ptr[2]*100);
          ptr[3] = t3 / 10;
          ptr[5] = t3 - (ptr[3]*10);
          ptr[4] = 0x2e;    
          ptr[0] = ptr[0]+48;
          ptr[1] = ptr[1]+48;
          ptr[2] = ptr[2]+48;
          ptr[3] = ptr[4]+48;
          ptr[5] = ptr[5]+48;
          //在液晶上显示变换后的结果
          Write_Cmd(0x9c);
          for(i = 0;i < 6;i++)
       
           Write_Data(ptr[I]);
        }
      else
        if(i>10000)
        {
          uint ptr[5],t1,t2,t3;
          ptr[0] = (i / 10000);                  
          t1 = i - (ptr[0] * 10000);
          ptr[1] = t1 / 1000;
          t2 = t1 - (ptr[1] * 1000);
          ptr[2] = t2 / 100;
          t3 = t2 - (ptr[2]*100);
          ptr[3] = t3 / 10;
          ptr[4] = t3 - (ptr[4]*10);    
          ptr[0] = ptr[0]+48;
          ptr[1] = ptr[1]+48;
          ptr[2] = ptr[2]+48;
          ptr[3] = ptr[3]+48;
          ptr[4] = ptr[4]+48;
         //在液晶上显示变换后的结果
          Write_Cmd(0x9c);
          for(i = 0;i < 5;i++)
       
            Write_Data(ptr[I]);
        }
    }
     
    void main( void )
    {
      WDTCTL = WDTPW + WDTHOLD;
      P1DIR = 0x02;
      P1SEL = BIT1;
      TACTL = TASSEL_1+MC_2+TAIE+TACLR;
      TACCTL0 = CM_1+CCIS_0+SCS+CAP+CCIE;
      Cap_Tar=0;
      cap_last=0;
      cap_fist=0;
      pulse=0;
      time=0;
     
      MPY=1/((1/32768)*time);
      OP2=pulse;
      p = (unsigned int*)&(MPYresult.product);
      *p = RESHI;
      MPYresult.product = SUMEXT;
      Ini_Lcd();
      xianshi(MPYresult.product);
      _EINT();
      //LPM3;
    }[/P][P] [/P][P]
    #pragma vector=TIMERA0_VECTOR
    __interrupt void TimerA0(void)
    {
      if(Cap_Tar==0)
      {
        cap_fist = TACCR0;
        Cap_Tar++;
      }
      else
      {
        cap_last = TACCR0;
        Cap_Tar++;
      }
    } [/P][P]#pragma vector=TIMERA1_VECTOR
    __interrupt void TimerA1(void)
    {
      switch(TAIV)
      {
     
        case 2: break;
       
        case 4: break;
     
        case 10:
          if(Cap_Tar==0)
           pulse=0;
          else
          {
           pulse=Cap_Tar-1;
           time = cap_last-cap_fist;
           Cap_Tar=0;
           TACTL &=~BIT0;
          // BIC_SR_IRQ(LPM3_bits);
          }
          break;
      }
    }[/P][/I][/I][/I]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    [EM03]天啊,有这样问问题吗...;你这样提问使大家如何出手[EM59]
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分3
      • 经验33
      • 文章3
      • 注册2011-07-26
      [P]测频程序  如何 调试啊[/P]
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
      • 门派
      • 职务总版主
      • 声望+9
      • 财富5
      • 积分3065
      • 经验390701
      • 文章6744
      • 注册2006-03-07
      大概预知测频范围,然后弄个方法输入相应的输入端。调试看看其结果....这些思路都得想得到吧。[EM52]
      [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
      Powered by LeadBBS 9.2 .
      Page created in 0.1719 seconds with 5 queries.