求利用定时器捕获模式和定时中断的测频程序

楼主
求利用定时器捕获模式和定时中断的测频程序
[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]
1楼
[EM03]天啊,有这样问问题吗...;你这样提问使大家如何出手[EM59]
2楼
[P]测频程序  如何 调试啊[/P]
3楼
大概预知测频范围,然后弄个方法输入相应的输入端。调试看看其结果....这些思路都得想得到吧。[EM52]

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