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

2019-03-24 10:21发布

利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。     本例程用到了定时器ACCI1A端口(例如MSP430F14XP1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。2-例程#include <msp430x14x.h>unsigned int start,end;unsigned char overflow;void main (void){ WDTCTL = WDTPW+WDTHOLD;                   //关闭看门狗定时器 P1DIR = BIT0+BIT4;                        //设置P1.0方向为输出 P1SEL = BIT2;                             //设置P1.2端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1;           //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式 CCTL1 = MC0+SCS+CAP+CCIE;                 //输入上升沿捕获,CCI0A为捕获信号源 _EINT();                                  //中断允许 while(1);                                 //LOOP}#pragma vector=TIMERA1_VECTOR              //定时器A中断处理__interrupt void timer_a(void){ switch(TAIV)                              //向量查询 { case 2:                               //捕获中断       if(CCTL1&CM0)                     //上升沿        {           CCTL1=(CCTL1&(~CM0))|CM1;       //更变设置为下降沿触发           start=TAR;                      //记录初始时间           overflow=0;                     //溢出计数变量复位        }      else if (CCTL1&CM1)                //下降沿       {             CCTL1=(CCTL1&(~CM1))|CM0;       //更变设置为上升沿触发           end=TAR;                        //start,end,overflow计算脉冲宽度       }          break;   case 10:                              //定时器溢出中断      overflow++;      break;                             //溢出计数加1   default:break; }}//例程结束 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
hzlxlzh
1楼-- · 2019-03-26 15:38
数码小叶 发表于 2015-4-7 16:28
我也看不出问题出哪了,你调试时,看下那几个量的值是多少,手工一步步算一下

已经解决,计算心率值时定时器溢出数值一直在增加,所以显示出的心率值也随之一直在跳变

一周热门 更多>

相关问题

    相关文章