MSP430G2553(二)Timer定时器说明…

    xiaoxiao2021-03-25  210

    MSP430设计了TIMER定时器,当定时器到达设置值(依据模式而定)时候就会跳转进入中断,作为常用功能,MSP430提供了三种计数模式,G2553中具有Timer0和Timer1两个16位定时器。 该文章中用一个定时执行的io口操作来演示如何设置计时器 1.配置timer 配置timer所用的寄存器有TACCR0 ,TACTL, TACCTL0 TACCR0:定时器的比较验证寄存器,16位,数值最大0xFFFF,0-65535 TACTL:定时器的控制寄存器,控制涵盖定时计数模式,分频,时钟源等 TACCTL0:定时器的比较验证控制寄存器,用于控制中断开关 寄存器的宏定义都在msp430g2553.h文件中,可以通过查询这一文件进行配置 TACCR0寄存器设定的是定时时间,计算方式为 设时钟周期T,设目标定时时间为t,Set=t/T,这里的N就为TACCR0的时间,例如我们要定时约20ms,设置DCOCLK为1Mhz,8分频,使用时钟源SMCLK,则SMCLK为1/8mhz=125khz,那么依据公式可以写 20000us/((1000000us/125000)=2500,即TACCR0=2500. TACTL是MSP430G型号MCU定时器的控制寄存器,负责控制时钟来源,分频,计数模式等 这里使用到的有: TASSEL_x        配置定时器的时钟来源 x=0                              TACLK x=1                              ACLK x=2                              SMCLK x=3                              外部时钟 ID_x                设置时钟分频 x=0                              不分频 x=1                              二分频 x=2                              四分频 x=3                              八分频 MC_x            定时模式 x=0                              停止 x=1                              向上计数模式,计数到CCR值产生中断 x=2                                最大计数模式,计数器将计数到0xffff                           x=3                              连续计数模式,计数器在计数到CCR0设置值后会再降为0才产生中断 例如我要设置SMCLK作为时钟源,二分频向上计数 TACTL=TASSEL_2 + ID_1 + MC_1 TACCTL0是控制比较寄存器的寄存器一般语句为    TACCTL0 |= CCIE 具体函数: void TimerInit() { BCSCTL1 = CALBC1_1MHZ;                    //基础时钟配置,1Mhz   DCOCTL = CALDCO_1MHZ;                //软件控制时钟配置,1Mhz   BCSCTL2 |=SELM_1+DIVM_1;            //   TACCR0 = 2500;                                                            //20ms   TACTL |= TASSEL_2 + ID_3 + MC_1;//设置SMCLK作为定时器时钟源,八分频,定时器模式为向上计数模式   TACCTL0 |= CCIE;//设置中断使能       } ===================================================================== 2.中断编写 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A(void) {   static int timeCount=0;   timeCount+=1;   if(timeCount==50)  //约1s后使LED取反   {     P1OUT^=(1<<0); //P1.0 LED取反     timeCount=0;   } } ===================================================================== 源代码: #include "msp430g2553.h" //名称:LedInit() //功能:设置Led P1.0的初始化 void LedInit() {   P1DIR |= BIT0;   P1OUT &= ~BIT0; } //名称:TimerInit() //功能:设置定时器 void TimerInit() { BCSCTL1 = CALBC1_1MHZ;          //基础时钟配置,1Mhz   DCOCTL = CALDCO_1MHZ;            //   BCSCTL2 |=SELM_1+DIVM_1;      //   TACCR0 = 2500; //20ms   TACTL |= TASSEL_2 + ID_3 + MC_1;//设置SMCLK作为定时器时钟源,八分频,定时器模式为向上计数模式   TACCTL0 |= CCIE;//设置中断使能       } //名称:Timer_A(void) //功能:定时器中断处理函数 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A(void) {   static int timeCount=0;   timeCount+=1;   if(timeCount==50)  //约1s后使LED取反   {     P1OUT^=(1<<0); //P1.0 LED取反     timeCount=0;   } } int main( void ) {   WDTCTL = WDTPW + WDTHOLD;    //关闭看门狗   LedInit();                                  //初始化LED   TimerInit();                              //初始化计时器     _BIS_SR(GIE);                          //开启总中断   while(1); }
    转载请注明原文地址: https://ju.6miu.com/read-432.html

    最新回复(0)