标题:
MSP430单片机定时器TA计数 程序
[打印本页]
作者:
51hei单片
时间:
2016-3-14 18:57
标题:
MSP430单片机定时器TA计数 程序
本程序是《MSP430系列单片机系统工程设计与实践》书里面的源码,(包含工程文件 (例2.8.22)))完整例程下载:
http://www.51hei.com/bbs/dpj-46245-1.html
#include <msp430x42x.h>
/********************************************************************
* 名 称:Divider_SetDivFactor
* 功 能:设置分频系数
* 入口参数:Factor: 分频系数 (2~65535)
* 出口参数:无
********************************************************************/
void Divider_SetDivFactor(unsigned int Factor) //设置分频系数
{
TACCR0=Factor-1; // 分频系数=计数器溢出周期
TACCR2=Factor/2; // 占空比=50%
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
FLL_CTL0 |= XCAP18PF; // 配置晶振负载电容
P1DIR &=~BIT5; // P1.5(TACLK)作为输入引脚
P1SEL |= BIT5; // 允许其第二功能,作为TACLK输入
P2DIR |= BIT0; // P2.0作为输出
P2SEL |= BIT0; // 允许P2.0第二功能,作为TA2输出
TACTL = TASSEL_0 + MC_1 ; // TA外部计数,增计数模式
TACCTL2 = OUTMOD_7; // TA2作为输出,模式7 (PWM模式)
Divider_SetDivFactor(100); // 100分频
while(1)
{
//CPU可以继续执行其他任务
}
}
复制代码
作者:
51hei单片
时间:
2016-3-14 18:57
#include <msp430x42x.h>
#include "LCD_Display.h"
unsigned long int PhotonCnt; // 光子计数结果存放变量
unsigned int TA_OverflowCnt; // TA溢出次数存放变量
unsigned int CntTime;
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
FLL_CTL0 |= XCAP18PF; // 配置晶振负载电容
P1DIR &=~BIT5; // P1.5(TACLK)作为输入引脚
P1SEL |= BIT5; // 允许其第二功能,作为TACLK输入
BTCTL = BTDIV+BT_fCLK2_DIV128; // BasicTimer 设为1秒1次中断
IE2 |= BTIE; // 允许BasicTimer中断
_EINT(); // 允许总中断
LCD_Init(); // LCD初始化
while(1)
{
TACTL = TASSEL_0 + MC_2 + TAIE + TACLR; // TA清零并开始计数
TA_OverflowCnt=0; // 溢出次数清零
CntTime=0; // 计时清零
while(1)
{
PhotonCnt = TA_OverflowCnt*65536 + TAR; //计算累计光子个数
if(PhotonCnt>100000) break; //直到100000个为止
}
LCD_DisplayNumber(CntTime); //显示计满所需时间
}
}
#pragma vector = BASICTIMER_VECTOR
__interrupt void BT_ISR(void) // 1秒一次中断(由BasicTimer所产生)
{
CntTime++;
}
#pragma vector=TIMERA1_VECTOR //为测量大于65536Hz频率,计数溢出中断
__interrupt void TA_ISR(void)
{
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