51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > MSP430单片机 > 详细内容
利用MSP430定时器A测量脉冲宽度范例
发布时间:2009/7/27  阅读次数:1060  字体大小: 【】 【】【
1-程序描述
          利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。
          本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.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;
    }
}


//例程结束

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号