CCTL0=CCIE;
CCR0=20000;
TACTL=TASSEL_2+TACLR+MC_1+ID_3;
_EINT();
设置msp430主频为8MHz,定时器使用MCLK,8分频,然后设置以上即可。
你的情况可以在
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
flag=1;
}
中设置控制位,在主程序中设置循环。比如主程序中加入
while(1)
{
if(flag)
{
flag=0;
}
}
这样就可以实现每隔2ms对数码管进行一次扫描了。希望可以帮到你。
给你一个例子,直接调用delay(uint ms) 这个就可以了,你要做2ms的延时,写个delay(2);就ok了。
#include
#define uchar unsigned char
#define uint unsigned int
void init_clk()//时钟初始化
{
uchar i;
BCSCTL1 &=~XT2OFF;//(置TX2=0)使TX2有效,默认是关闭的
do
{
IFG1 &= ~OFIFG;//清振荡器失效标志
for(i=0xff;i>0;i--);
}while((IFG1 & OFIFG)!=0);//若振荡器失效标志有效
BCSCTL2|=SELM_2+SELS+DIVS_3; //使MCLK=XT2=8M,SMCLK=8/8=1M
}
///////////定时器延时,分辨率1ms////////////
void delay(uint ms)
{
uint i;
for(i=ms;i>0;i--)
{
TACCTL0 &=~CCIFG; //清除中断标志
TACTL |= TACLR + MC_1;//定时器清零,增计数模式
while((TACCTL0&CCIFG)==0);//等待定时器完成1ms的定时时间
TACTL &=~MC_1;//停止定时器A
}
}
void main()
{
WDTCTL = WDTPW + WDTHOLD;
init_clk();//时钟初始化
TACTL |= TASSEL_2;//定时器时钟源为SMCLK=8/8=1MHz
TACCR0=1000;//1ms(分辨率) (1MHz(1us))
P2DIR =0xff;
while(1)
{
P2OUT = 0x00;
delay(1000);//1000ms的延时
P2OUT = 0xff;
delay(1000);
}
}