找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4439|回复: 0
收起左侧

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

[复制链接]
ID:108615 发表于 2016-3-14 18:52 | 显示全部楼层 |阅读模式
本程序是《MSP430系列单片机系统工程设计与实践》书里面的源码,(包含工程文件 (例2.8.19)))完整例程下载:http://www.51hei.com/bbs/dpj-46245-1.html

  1. #include <msp430x42x.h>
  2. #include "LCD_Display.h"
  3. #define Circle  207                     /*轮圈周长,单位cm*/
  4. unsigned int TA_OverflowCnt;                //TA溢出次数存放变量
  5. unsigned long int Period;                //周期测量结果存放变量
  6. unsigned int Speed;

  7. void main( void )
  8. {
  9.   WDTCTL = WDTPW + WDTHOLD;                      // 停止看门狗
  10.   FLL_CTL0 |= XCAP18PF;                   // 配置晶振负载电容
  11.   P1DIR &=~(BIT7);                        // P1.7设为输入(可省略)
  12.   P1IES |=  BIT7;                                // P1.7设为下降沿中断
  13.   P1IE  |=  BIT7;                         // 允许P1.7中断
  14.   TACTL = TASSEL_1 + MC_2 + TAIE + TACLR; // TA清零并开始计时,ACLK,开中断
  15.   BTCTL=0;
  16.   LCD_Init();
  17.   _EINT();                                     // 总中断允许
  18.   LPM3;
  19. }


  20. #pragma vector = PORT1_VECTOR            //P1口中断入口
  21. __interrupt void P1_ISR(void)        
  22. {
  23.   int i;
  24.   _BIC_SR(SCG0);            //清除SR寄存器的SCG0控制位,恢复时钟准确性
  25.   for(i=0;i<600;i++);       //抗抖动,略延迟后再做判断
  26.   if((P1IN & BIT7) == BIT7) //如果P1.7变高(断开),则判为毛刺
  27.    {
  28.      P1IFG=0; return;       //认为开关信号无效,不作处理直接退出
  29.    }
  30.   if(P1IFG & BIT7)             //判断P1中断标志第7位(P1.7)
  31.      {
  32.        Period=TA_OverflowCnt*65536+TAR; //得到相邻两次中断之间的间隔时间
  33.        TA_OverflowCnt=0;
  34.        TACTL |= TACLR;      // TA清零,重新计时
  35.        Speed=(long)32768*Circle*36/(10*Period);
  36.        LCD_DisplayDecimal(Speed,2);
  37.      }
  38.   P1IFG=0;                  //清除P1所有中断标志位
  39. }
  40. #pragma vector=TIMERA1_VECTOR
  41. __interrupt void TA_ISR(void)                      //计满至65536溢出
  42. {
  43.   switch( TAIV )
  44.   {
  45.     case  2:   break;
  46.     case  4:   break;                          
  47.     case 10:  TA_OverflowCnt++;                //TA每次溢出,溢出次数变量+1
  48.                 break;
  49.   }
  50. }
复制代码



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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