社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 精华区
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
搜索
查看: 1007|回复: 7

[求助] 想用msp430 g2553 TimerA测输入方波的周期,用了下面的代码不成功,请求帮助!

[复制链接]

21

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-4-7 16:02:25 | 显示全部楼层 |阅读模式
#define uchar            unsigned char
#define uint             unsigned int
uint a[10],n=0,overfloat=0;

int main(void)
{   uint heartrate,i;
   
    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
    P1DIR &=~BIT2;
    P1REN |= BIT2;
    P1SEL |= BIT2;                 //输入捕捉端口(P1.2)
    TACCTL1 = CAP+CM_1+CCIS_0+SCS+CCIE;              // 输入捕捉,上升沿触发(upCM_1,downCM_2,updownCM_3),同步捕捉,CCR0 中断使能
    TACTL = TASSEL_2 + MC_2 + TAIE + TACLR;        // 选择SMCLK为时钟,连续增计数模式 ,溢出中断使能
    _EINT();                                  //开全局中断

    IO_Init();
    LCD_Init();
    uchar LCDBuf1[]={"heart rate:"};
   
    while(1)
      {  
        LCD_Write_Command(0x01);
        if(n>0&&n%2==1)
           heartrate=(2000000*60)/(65535*overfloat+(a[n]-a[n-1]));
              for(i=0;i<80;i++)
               {   
                   LCD_Disp_string(0,0,LCDBuf1);
     LCD_Write_Command(0x80+0x0c);  
                    Disp(heartrate);
                   if(heartrate==0)
   LCD_Disp_string(0,2,message[3]);
            else if(heartrate<=60)
   LCD_Disp_string(0,2,message[0]);
                   else if(heartrate<=120)
   LCD_Disp_string(0,2,message[1]);
                   else
                        LCD_Disp_string(0,2,message[2]);
               }
}
}
#pragma vector=TIMER0_A1_VECTOR  //捕获中断
__interrupt void Timer0_A1(void)
{
  switch(TA0IV)
  {
   case 2:
    {
      if(n%2==0)
        overfloat=0;
      a[n]=TAR;//CCR1
      if(n==9)
        n=0;
      else
        n++;
      break;
    }
   case  4:              break;                          // CCR2 not used
   case 10: overfloat++; break;              // TimerA溢出中断;
  }
}




以上是刚刚编好的程序,是用来测心率的,但运行时出了问题,给P1.2输入一个稳定的方波,会测出多个不同的心率值且相差十几到三十几左右,方波频率越大相差越大,比如170次每分钟,会显示一百五十多,一百七十多,二百二十多,不知道为什么,程序哪里出来问题,程序中心率计算用的思路是,输入脉搏方波信号,把定时器A设置为上升沿中断,定时器A中计数器设置为连续增计数模式,计数时钟周期为1/1000000秒,当输入方波信号上升沿时,定时器捕获中断,计数器的初值a[N-1]被保存并起动计数,当计数器计数到65536溢出时,计数器自动清零重新开始计数,当输入第二个方波信号上升沿时,定时器再次捕获中断,并保存定时器的终值a[n],单片机能记下一个脉搏周期内计数器的初值a[n-1]和终值a[n], 以及计数器溢出次数over—flow。代入下面的公式可算出脉搏的周期
T= [65536 * overflow +(a[n]-a[n-1])]/1000000


回复

使用道具 举报

1973

TA的帖子

24

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2015-4-7 16:12:21 | 显示全部楼层
1、你不清中断标志位的么?
2、计算过程要确保没有数据溢出
3、为什么不在上一次输入捕获时清零计时器和溢出次数,下一次捕获中断时(溢出次数*计数周期+当前计数值)不更好计算

点评

解答很精辟,也很到位  发表于 2015-4-7 22:23
希望你能把第一点详细解释一下吗?谢谢!  详情 回复 发表于 2015-4-7 20:59
第三点想了想明白了  详情 回复 发表于 2015-4-7 20:56
关于你提到的第一和第三点因为我是初学定时器A,不太理解,方便的话可以详细解释一下吗,谢谢!  详情 回复 发表于 2015-4-7 20:54
谢谢,已经解决,你提的第二点正中问题  详情 回复 发表于 2015-4-7 20:50

回复

使用道具 举报

21

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-7 20:50:14 | 显示全部楼层
shower.xu 发表于 2015-4-7 16:12
1、你不清中断标志位的么?
2、计算过程要确保没有数据溢出
3、为什么不在上一次输入捕获时清零计时器和溢出次数,下一次捕获中断时(溢出次数*计数周期+当前计数值)不更好计算

谢谢,已经解决,你提的第二点正中问题

回复

使用道具 举报

21

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-7 20:54:53 | 显示全部楼层
shower.xu 发表于 2015-4-7 16:12
1、你不清中断标志位的么?
2、计算过程要确保没有数据溢出
3、为什么不在上一次输入捕获时清零计时器和溢出次数,下一次捕获中断时(溢出次数*计数周期+当前计数值)不更好计算

关于你提到的第一和第三点因为我是初学定时器A,不太理解,方便的话可以详细解释一下吗,谢谢!

回复

使用道具 举报

21

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-7 20:56:25 | 显示全部楼层
shower.xu 发表于 2015-4-7 16:12
1、你不清中断标志位的么?
2、计算过程要确保没有数据溢出
3、为什么不在上一次输入捕获时清零计时器和溢出次数,下一次捕获中断时(溢出次数*计数周期+当前计数值)不更好计算

第三点想了想明白了

回复

使用道具 举报

21

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-7 20:59:29 | 显示全部楼层
shower.xu 发表于 2015-4-7 16:12
1、你不清中断标志位的么?
2、计算过程要确保没有数据溢出
3、为什么不在上一次输入捕获时清零计时器和溢出次数,下一次捕获中断时(溢出次数*计数周期+当前计数值)不更好计算

希望你能把第一点详细解释一下吗?谢谢!

回复

使用道具 举报

1973

TA的帖子

24

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2015-4-7 21:23:56 | 显示全部楼层
不要在意第一条,那个是我错了,太久没接触430了

点评

好的,谢谢  详情 回复 发表于 2015-4-7 21:28

回复

使用道具 举报

21

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-4-7 21:28:25 | 显示全部楼层
shower.xu 发表于 2015-4-7 21:23
不要在意第一条,那个是我错了,太久没接触430了

好的,谢谢

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-9-24 13:04 , Processed in 0.332435 second(s), 22 queries , Redis On.

快速回复 返回顶部 返回列表