找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MSP430单片机 定时器TA计数 程序

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

关于本程序的详细解说大家可以下载电子书点击上图即可
  1. #include <msp430x42x.h>
  2. #include "LCD_Display.h"
  3. unsigned long int Freq;
  4. unsigned int TA_OverflowCnt;              //TA溢出次数存放变量
  5. void main( void )
  6. {
  7.    WDTCTL = WDTPW + WDTHOLD;          // 停止看门狗
  8.    FLL_CTL0 |= XCAP18PF;              // 配置晶振负载电容
  9.    P1DIR &=~BIT5;                     // P1.5(TACLK)作为输入引脚
  10.    P1SEL |= BIT5;                     // 允许第二功能,作为TACLK输入
  11.    BTCTL = BTDIV+BT_fCLK2_DIV128;     // BasicTimer 设为1秒1次中断
  12.    IE2 |= BTIE;                       // 允许BasicTimer中断
  13.    LCD_Init();
  14.    _EINT();                           // 允许总中断
  15.    while(1)
  16.    {
  17.      LPM3; //休眠,等待被BasicTimer唤醒
  18.      //-------------------------以下代码每秒运行一次------------------   
  19.      Freq=TA_OverflowCnt*65536 + TAR;  // 读取上次TA计数值及溢出次数,计算频率。
  20.      TA_OverflowCnt=0;                             // 溢出次数清零
  21.      TACTL = TASSEL_0 + MC_2 + TAIE + TACLR; // TA清零并重新开始计数
  22.      LCD_DisplayLongNumber(Freq);
  23.    }
  24. }

  25. #pragma vector = BASICTIMER_VECTOR
  26. __interrupt void BT_ISR(void)             // 1秒一次中断(由BasicTimer所产生)
  27. {
  28.    __low_power_mode_off_on_exit();        // 唤醒CPU
  29. }

  30. #pragma vector=TIMERA1_VECTOR             //为测量大于65536Hz频率,计数溢出中断
  31. __interrupt void TA_ISR(void)
  32. {
  33.   switch( TAIV )
  34.   {
  35.     case  2:   break;
  36.     case  4:   break;                          
  37.     case 10:  TA_OverflowCnt++;           //TA每次溢出,溢出次数变量+1
  38.                 break;
  39.   }
  40. }  
复制代码



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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