本文主要是介绍MSP430F149的TIMERA定时中断理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码如下:
//本平台 msp430f149
#include <io430.h>
#include <in430.h>volatile unsigned char count = 0,flag = 0;
void select_xt2(void){unsigned char i;/*------选择系统主时钟为8MHz-------*/BCSCTL1 &= ~XT2OFF; do{ IFG1 &= ~OFIFG; //清除晶振失败标志for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振}while ((IFG1 & OFIFG)); BCSCTL2 |= SELM_2 + SELS ; //MCLK和SMCLK选择高频晶振 }void main(){WDTCTL = WDTPW + WDTHOLD; // 关狗select_xt2(); //8MHz晶振 P2DIR = 0xFF;P2OUT = 0x00;CCTL0 = 0X0010; // CCR0 中断使能,或写为 CCTL0 = CCIE;CCR0 = 10000;TACTL = 0X02E0; // SMCLK = 1MHz, 连续计数模式_EINT(); // 开启全局中断while(1){if(count == 50){count = 0;P2OUT = ~P2OUT ;}}}// Timer A0 中断服务函数
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{count ++;CCR0 += 10000; // 下次中断时间装入CCR0中
}
我是比较 喜欢直接配置寄存器而不是使用库函数进行与或,所以在设置TACTL时
根据需要:1.使用8分频将8MHz变为1MHz
2.使用SMCLK子系统时钟,在设置xtal2中SMCLK和MCLK一样是外部晶振8MHZ
3.使用连续计数模式,此模式要手动重装
其余位均为0
所以TACTL控制字为:
0000,0010,1110,0000
02E0
CCTL0寄存器配置:、
因为我们是使用比较模式,开启中断,所以只有CCIEx位为1,其余全为0
控制字为:0X0010。此时也可以直接写出CCTL0 = CCIE0;不过我还是喜欢配置寄存器来写
CCR0中装入计数初值10000,当计数到10000,count加一,重装CCR0。当count等于50时,count=0
这篇关于MSP430F149的TIMERA定时中断理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!