我想利用msp430定时器,每隔2ms产生一个中断就行,不知道如何设置初值

本人想做的程序中含有一个数码动态显示的程序,但是普通的软件延时占用资源,使单片机停在那只是做循环显示了,所以我想用定时器做一个2ms的延时,每次中断扫描一个数码管,显示一次数据
本来我学的是51系列的单片机,不会计算msp430定时器的初值,
希望大家尽量帮忙解决一下,尽量告诉我关于定时器的东西,谢啦
本人邮箱:xgxg33@163.com
qq : 850113177

第1个回答  2012-04-23
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对数码管进行一次扫描了。希望可以帮到你。本回答被提问者和网友采纳
第2个回答  2012-04-20
给你一个例子,直接调用delay(uint ms) 这个就可以了,你要做2ms的延时,写个delay(2);就ok了。
#include <msp430x14x.h>
#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);
}

}追问

1.请问能直接和您联系一下吗?比如QQ
2.我想用430f149定时器做一个2ms的定时,目的是time_A 定时2ms,从而达到没2ms中断一次,在中断子程序中,改变相应的值,使数码管显示能够避免用软延时产生的循环的问题
3.关于430f149定时器选取时钟,tar,和CCRX尤其是CCR0值的计算,我不是很理解,希望您能给我讲一下,就以每个2ms产生中断为例

追答

我狠忙的!!!!以后再说吧

相似回答