1107|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

MSP430捕获器简单实用 [复制链接]

MSP430定时器A捕捉脉实例[调试通过,很好用]

运行代码 复制代码
 
/*****************************************************************  
//功能:利用定时器A的捕捉能测量脉冲信号的脉宽  
//  
//  
//                MSP430F449  
//             -----------------  
//         /|\|              XIN|-  
//          | |                 | 32kHz  
//          --|RST          XOUT|-  
//            |                 |  
//            |        P1.5/ACLK|---+  
//            |                 |   |  
//            |         P2.0/TA2|<--+  
//            |                 |  
//            |                 |  
//说明:ACLK要进行8分频(4K),并将其作为外部的要捕获的脉冲;  
//MCLK=SMCLK=8M;  
*****************************************************************/  
#include  <msp430x44x.h>  
int pwm_start,pwm_end,pwm_wide=0;  
 
void main(void)  
{  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT  
  P1DIR = 0x20;                   //  P1.5 输出  
  P1SEL = 0x20;              // P1.5输出ACLK  
   
  P2SEL|=BIT0;                              //P2.0 CCI2A  
   
  SCFI0 |= FN_4;  
  SCFQCTL = 121;                   // (121+1) ×32768 *2= 7.99Mhz  
  FLL_CTL0=DCOPLUS+OSCCAP1;       //MCLK=SMCLK=8M  
   
  FLL_CTL1 |= FLL_DIV_8;                         //ACLK要进行8分频,ACLK=4K  
   
   
  TACCTL2 =CAP+CM_3+CCIS_0+SCS+CCIE;  //捕获模式,上升和下降都捕获,选择CCI2A,同步,捕获中断开          
                                      //Capture input select: 0 - CCI2A  
  TACTL = TASSEL_2 + MC_2 ;    //SMCLK=8M,L连续计数模式  
  _EINT();                 //开总中断  
  LPM0;  
  _NOP();  
  pwm_wide=pwm_end-pwm_start;  
 
  while(1);  
}  
 
// Timer_A3 Interrupt Vector (TAIV) handler  
#pragma vector=TIMERA1_VECTOR  
__interrupt void Timer_A(void)  
{  
   
  switch(TAIV)  
 {case 2:break;  
  case 4:  
     if(TACCTL2 & CCI)  
        pwm_start=CCR2;    
     else  
        pwm_end=CCR2;  
     //pwm_wide=pwm_end-pwm_start;  
     break;  
  case 10:  
     break;  
  }  
  LPM0_EXIT;  
}  

检验方法: 
在调试环境下,在watch 窗口观察pwm_end和pwm_start,然后相减! 
我计算了一下。在所给的例子中理论值pwm_end-pwm_start=976 
通过观察的结果是978,还是有点误差,可能是由于晶振的值原因,计算上的舍入有点偏差。

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表