找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3542|回复: 1
打印 上一主题 下一主题
收起左侧

MSP430单片机定时器TA捕获程序

[复制链接]
跳转到指定楼层
楼主
ID:108615 发表于 2016-3-14 18:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序是《MSP430系列单片机系统工程设计与实践》书里面的源码,完整例程下载(包含工程文件(例2.8.27))):http://www.51hei.com/bbs/dpj-46245-1.html

关于本程序的详细解说大家可以下载电子书点击上图即可
  1. #include <msp430x42x.h>
  2. #include "LCD_Display.h"
  3. unsigned int TA_OverflowCnt;                // TA溢出次数存放变量
  4. unsigned long int Period;                // 脉宽测量结果存放变量
  5. unsigned int RiseCapVal;                // 上升沿时刻捕获值存放变量
  6. unsigned char Edge=0;                   // 当前触发沿
  7. #define RISE   0
  8. #define FALL   1
  9. void main( void )
  10. {
  11.   WDTCTL = WDTPW + WDTHOLD;               // 停止看门狗
  12.   FLL_CTL0 |= XCAP18PF;                         // 配置晶振负载电容
  13.   P1DIR &=~(BIT2);                               // P1.2(TA1)设为输入(可省略)
  14.   P1SEL |=  BIT2;                                    // P1.2设为第二功能(TA1)
  15.   TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // TA连续计数,开始计时,SMCLK,开中断
  16.   TACCTL1 = CAP + CM_1 +  CCIS_1 + SCS + CCIE;
  17.   //捕获模块1启动,选择TA1(P1.2)引脚作为捕获源,上升沿捕获,同步模式,开启捕获中断
  18.   BTCTL=0;
  19.   LCD_Init();
  20.   _EINT();                                     // 总中断允许
  21.   LPM0;                                          // 进入低功耗模式3休眠,全部程序在中断内执行
  22. }

  23. #pragma vector=TIMERA1_VECTOR
  24. __interrupt void TA_ISR(void)                     //Timer_A中断
  25. {
  26.   switch( TAIV )
  27.   {
  28.     case  2:   //  比较/捕获模块1中断
  29.                if(Edge==RISE)         //如果是上升沿的捕获中断
  30.                 {
  31.                   RiseCapVal=TACCR1;  //保存上升沿时刻捕获值
  32.                   TACCTL1 = CAP +CM_2 +CCIS_1 +SCS +CCIE;//改为下降沿触发
  33.                   Edge=FALL;          //触发沿状态标志
  34.                 }
  35.                 else                  //如果是下降沿的捕获中断
  36.                 {
  37.                   Period=TA_OverflowCnt*65536 + TACCR1 - RiseCapVal;//计算周期
  38.                   TA_OverflowCnt=0;              //溢出次数清零
  39.                   TACCTL1 = CAP +CM_2 +CCIS_1 +SCS +CCIE;//改为上升沿触发
  40.                   Edge=FALL;                      //触发沿状态标志
  41.                   LCD_DisplayLongNumber(Period);  //显示
  42.                 }            
  43.                break;
  44.     case  4:   break;                          
  45.     case 10:  TA_OverflowCnt++;                //TA每次溢出,溢出次数变量+1
  46.                 break;
  47.   }
  48. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:108615 发表于 2016-3-14 18:45 | 只看该作者
  1. #include <msp430x42x.h>
  2. #include "LCD_Display.h"
  3. unsigned int TA_OverflowCnt;                // TA溢出次数存放变量
  4. unsigned long int Period;                // 周期测量结果存放变量
  5. unsigned int PervCapVal;                // 前一次捕获值存放变量
  6. void main( void )
  7. {
  8.   WDTCTL = WDTPW + WDTHOLD;               // 停止看门狗
  9.   FLL_CTL0 |= XCAP18PF;                         // 配置晶振负载电容
  10.   P1DIR &=~(BIT2);                               // P1.2(TA1)设为输入(可省略)
  11.   P1SEL |=  BIT2;                                    // P1.2设为第二功能(TA1)
  12.   TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // TA连续计数,开始计时,SMCLK,开中断
  13.   TACCTL1 = CAP + CM_1 +  CCIS_1 + SCS + CCIE;
  14.   //捕获模块1启动,选择TA1(P1.2)引脚作为捕获源,上升沿捕获,同步模式,开启捕获中断
  15.   BTCTL=0;
  16.   LCD_Init();
  17.   _EINT();                                     // 总中断允许
  18.   LPM0;                                          // 进入低功耗模式3休眠,全部程序在中断内执行
  19. }

  20. #pragma vector=TIMERA1_VECTOR
  21. __interrupt void TA_ISR(void)                     //计满至65536溢出
  22. {
  23.   switch( TAIV )
  24.   {
  25.     case  2:   Period=TA_OverflowCnt*65536 + TACCR1 - PervCapVal;//计算周期
  26.                PervCapVal=TACCR1;             //保存捕获值,供下一次使用
  27.                TA_OverflowCnt=0;              //溢出次数清零
  28.                LCD_DisplayLongNumber(Period); //显示
  29.                break;
  30.     case  4:   break;                          
  31.     case 10:  TA_OverflowCnt++;                //TA每次溢出,溢出次数变量+1
  32.                 break;
  33.   }
  34. }
复制代码
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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