打印

利用定时A捕获测频率

[复制链接]
971|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang1jie|  楼主 | 2015-11-10 20:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A (void)
{
  static unsigned int str[2]={0};
  static unsigned int temp= 0;
// static unsigned int overflow= 0;
  unsigned int counter;
这段代码测周期 在0-10US可以显示 在大就无法显示了

  unsigned int dN[5];
  
// switch (TAIV)         //向量查询
  {
//  case 2:            //捕获中断
     str[temp]=TACCR1;
     temp++;
     if(temp == 2)
     {
       temp=0;
       counter =str[1]-str[0];
       dN[4]=counter/10000;
       dN[3]=counter%10000/1000;
       dN[2]=(counter%1000)/100;
       dN[1]=(counter%100)/10;
       dN[0]=counter%10;   
       Disp1Char(9,0,dN[4]+0x30);
       Disp1Char(10,0,dN[3]+0x30);
       Disp1Char(11,0,dN[2]+0x30);
       Disp1Char(12,0,dN[1]+0x30);
       Disp1Char(13,0,dN[0]+0x30);//0x2e是小数点对应的ASCII码值      
delay_ms(1000);      
     }
   }

相关帖子

沙发
wang1jie|  楼主 | 2015-11-10 20:54 | 只看该作者
这段代码测周期 在0-10us内可以显示 在大就无法显示 什么原因 求大神解释

使用特权

评论回复
板凳
wang1jie|  楼主 | 2015-11-10 20:54 | 只看该作者
void capture_initial(void)
{
  //计时器A脉冲捕获
    P1DIR &=~BIT2;      //P1.1hP1.2输入
    P1SEL |=BIT2;
    TACTL |=TACLR+TASSEL_2+ID_3+MC_2;          //计数时钟选择SMLK=8MHz,1/8分频后为1MHz
    TACCTL1 |=CM_1+SCS+CAP+CCIE;
    _EINT();
}

使用特权

评论回复
地板
dirtwillfly| | 2015-11-12 20:00 | 只看该作者
哪里的代码?
官网的例程吗?

使用特权

评论回复
5
xyz549040622| | 2015-11-13 13:58 | 只看该作者
中断中居然有100ms的延时,肯定会出问题的,把这个延时去掉看看。

使用特权

评论回复
6
lvyunzeng| | 2015-11-13 15:28 | 只看该作者
楼上正解,在中断中不要做什么计算啊,延时啊。等相关操作。在中断中只做,赋值,置标志位等简单的程序操作。主程序检测到标志位后在进行运算,显示等等。然后标志位清零。等待下一次标志位置位操作。

使用特权

评论回复
7
sunmeat| | 2015-11-13 16:51 | 只看该作者
建议把显示的部分放到主函数中。中断处理太多东西了。

使用特权

评论回复
8
迪卡| | 2015-11-14 19:12 | 只看该作者
楼主再中断中的延时太长了,尽量不要再中断里加延时

使用特权

评论回复
9
lefeng| | 2015-11-14 20:43 | 只看该作者
中断处理的东西太多了,忙不过来的

使用特权

评论回复
10
firstblood| | 2015-11-15 11:08 | 只看该作者
这个主要靠定时器的精确定时来进行尸检的测量,进而计算出频率的

使用特权

评论回复
11
309030106| | 2015-11-15 22:36 | 只看该作者
中断里尽量做简单的处理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

51

帖子

0

粉丝