标题:
MSP430单片机 定时器TA计时 程序
[打印本页]
作者:
51hei单片
时间:
2016-3-14 18:52
标题:
MSP430单片机 定时器TA计时 程序
本程序是《MSP430系列单片机系统工程设计与实践》书里面的源码,(包含工程文件 (例2.8.19)))完整例程下载:
http://www.51hei.com/bbs/dpj-46245-1.html
#include <msp430x42x.h>
#include "LCD_Display.h"
#define Circle 207 /*轮圈周长,单位cm*/
unsigned int TA_OverflowCnt; //TA溢出次数存放变量
unsigned long int Period; //周期测量结果存放变量
unsigned int Speed;
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
FLL_CTL0 |= XCAP18PF; // 配置晶振负载电容
P1DIR &=~(BIT7); // P1.7设为输入(可省略)
P1IES |= BIT7; // P1.7设为下降沿中断
P1IE |= BIT7; // 允许P1.7中断
TACTL = TASSEL_1 + MC_2 + TAIE + TACLR; // TA清零并开始计时,ACLK,开中断
BTCTL=0;
LCD_Init();
_EINT(); // 总中断允许
LPM3;
}
#pragma vector = PORT1_VECTOR //P1口中断入口
__interrupt void P1_ISR(void)
{
int i;
_BIC_SR(SCG0); //清除SR寄存器的SCG0控制位,恢复时钟准确性
for(i=0;i<600;i++); //抗抖动,略延迟后再做判断
if((P1IN & BIT7) == BIT7) //如果P1.7变高(断开),则判为毛刺
{
P1IFG=0; return; //认为开关信号无效,不作处理直接退出
}
if(P1IFG & BIT7) //判断P1中断标志第7位(P1.7)
{
Period=TA_OverflowCnt*65536+TAR; //得到相邻两次中断之间的间隔时间
TA_OverflowCnt=0;
TACTL |= TACLR; // TA清零,重新计时
Speed=(long)32768*Circle*36/(10*Period);
LCD_DisplayDecimal(Speed,2);
}
P1IFG=0; //清除P1所有中断标志位
}
#pragma vector=TIMERA1_VECTOR
__interrupt void TA_ISR(void) //计满至65536溢出
{
switch( TAIV )
{
case 2: break;
case 4: break;
case 10: TA_OverflowCnt++; //TA每次溢出,溢出次数变量+1
break;
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1