1469|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

MSP430单片机定时器TA捕获程序 [复制链接]

#include
#include "LCD_Display.h"
unsigned int TA_OverflowCnt;                // TA溢出次数存放变量
unsigned long int Period;                // 脉宽测量结果存放变量
unsigned int RiseCapVal;                // 上升沿时刻捕获值存放变量
unsigned char Edge=0;                   // 当前触发沿
#define RISE   0
#define FALL   1
void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;               // 停止看门狗
  FLL_CTL0 |= XCAP18PF;                         // 配置晶振负载电容
  P1DIR &=~(BIT2);                               // P1.2(TA1)设为输入(可省略)
  P1SEL |=  BIT2;                                    // P1.2设为第二功能(TA1)
  TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // TA连续计数,开始计时,SMCLK,开中断
  TACCTL1 = CAP + CM_1 +  CCIS_1 + SCS + CCIE;
  //捕获模块1启动,选择TA1(P1.2)引脚作为捕获源,上升沿捕获,同步模式,开启捕获中断
  BTCTL=0;
  LCD_Init();
  _EINT();                                     // 总中断允许
  LPM0;                                          // 进入低功耗模式3休眠,全部程序在中断内执行
}

#pragma vector=TIMERA1_VECTOR
__interrupt void TA_ISR(void)                     //Timer_A中断
{
  switch( TAIV )
  {
    case  2:   //  比较/捕获模块1中断
               if(Edge==RISE)         //如果是上升沿的捕获中断
                {
                  RiseCapVal=TACCR1;  //保存上升沿时刻捕获值
                  TACCTL1 = CAP +CM_2 +CCIS_1 +SCS +CCIE;//改为下降沿触发
                  Edge=FALL;          //触发沿状态标志
                }
                else                  //如果是下降沿的捕获中断
                {
                  Period=TA_OverflowCnt*65536 + TACCR1 - RiseCapVal;//计算周期
                  TA_OverflowCnt=0;              //溢出次数清零
                  TACCTL1 = CAP +CM_2 +CCIS_1 +SCS +CCIE;//改为上升沿触发
                  Edge=FALL;                      //触发沿状态标志
                  LCD_DisplayLongNumber(Period);  //显示
                }            
               break;
    case  4:   break;                          
    case 10:  TA_OverflowCnt++;                //TA每次溢出,溢出次数变量+1
                break;
  }
}


 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表