[家电应用] 定时捕获测频率

[复制链接]
1254|10
 楼主| wanglaojii 发表于 2016-6-20 19:02 | 显示全部楼层 |阅读模式
#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);      
     }
   }
laozhongyi 发表于 2016-6-20 19:11 | 显示全部楼层
哪里的代码?
官网的例程吗?
Edisons 发表于 2016-6-20 19:18 | 显示全部楼层
中断中居然有100ms的延时,肯定会出问题的。。。
_gege 发表于 2016-6-20 19:22 | 显示全部楼层
楼上正解,在中断中不要做什么计算啊,延时啊。
Mozarts 发表于 2016-6-20 19:25 | 显示全部楼层
是的,在中断中只做,赋值,置标志位等简单的程序操作。
Listate 发表于 2016-6-20 19:27 | 显示全部楼层
建议把显示的部分放到主函数中。中断处理太多东西了。
 楼主| wanglaojii 发表于 2016-6-20 19:32 | 显示全部楼层
这段代码测周期 在0-10us内可以显示 在大就无法显示 什么原因 主要是想知道这个 ,好像有眉目了。
zhouhuanの 发表于 2016-6-20 19:34 | 显示全部楼层
楼主再中断中的延时太长了,尽量不要再中断里加延时。
handleMessage 发表于 2016-6-20 19:40 | 显示全部楼层
中断里尽量做简单的处理
sourceInsight 发表于 2016-6-20 19:42 | 显示全部楼层
这个主要靠定时器的精确定时来进行尸检的测量,进而计算出频率的。
邪恶猛男 发表于 2016-6-21 07:55 | 显示全部楼层
正需要频率测量
您需要登录后才可以回帖 登录 | 注册

本版积分规则

220

主题

1411

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部