我想利用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产生中断为例

追答

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

我想利用msp430定时器,每隔2ms产生一个中断就行,不知道如何设置初值
设置msp430主频为8MHz,定时器使用MCLK,8分频,然后设置以上即可。你的情况可以在 pragma vector = TIMERA0_VECTOR __interrupt void Timer_A(void){ flag=1;} 中设置控制位,在主程序中设置循环。比如主程序中加入 while(1){ if(flag){ flag=0;} } 这样就可以实现每隔2ms对数码管进行一次扫...

msp430如何让定时器计数器重新开始计数。使它重复不断的产生中断_百度...
1、你的GIE没开,也许压根没产生过中断。2、也许你开GIE了。TI_CC_LED1在异或下能亮,说明你的LED1的控制位应该是0吧?既下拉点亮LED1,但你要知道0^0永远都是0,你的LED1永远也都是亮着的。3、你打算LED2闪烁,可你用或语句它只能保持一个状态(恰恰这个状态是1吧?LED2就这么灭着不亮)...

MSP430程序设计 定时器中断问题,下面的程序想在定时1S时候通过串口发送...
可能是串口设置不对

MSP430的CCRx中断在连续计数模式下怎么产生中断的
首先,如果你只是用连续计数模式,哪么CCTLx(比较捕获寄存器)根本可以不设置,其次,CCR0的初值没有设置,中断只会在定时器溢出时才能发生。然后,第二个中断,你是想用CCR1,CCR2吧,,也是因为你没设置初值,TAIV的值只会是10,也就是溢出中断产生才会进中断。case中的2,4是计数值到CCR1,2而...

求 利用msp430,编写一个计时时钟,精确到毫秒,计数到1小时,谢谢!_百度知...
\/*初始化定时器a*\/ CCR0 = 32767; \/\/设置定时器A的中断时间为1S TACTL = TASSEL_1 + MC_1; \/\/计数时钟ACLK, 增计数模式8分频+ID_3 CCTL0 |= CCIE;while(1){LMP3;} 函数名称:PORT1_ISR 功 能:P1端口的中断服务函数 参 数:无 返回值 :无 \/ pragma vector=PORT1...

如何用MSP430的ACLK(32768Hz)产生一个200Hz的频率和一个1000Hz的频率...
频率f=ACLK \/ ((CCR0 + 1)* 分频因子),根据这个公式,可以算出CCR0的值。建议,没事多看看datasheet,所有答案都在上面。

msp430中定时器a工作室如何改变ccro的值
不用改变CCR0的值 只要赋初值就行 CCR0的值 就是计时器循环周期 连续计数模式 在中端程序中自己软件改变CCR0的值 如CCR0+=50000;循环周期为50000 工作在捕获模式下 当捕获到你想捕获的信号 如上升沿时 系统会把TAR的值赋给CCR0 从而产生中断~~~就是这样~希望能帮到你 ...

关于MSP430单片机 定时器A, timerA 的问题.
1、如果是“增计数模式”,那么TAR可以增计数到CCR0的值,然后复位为0,再开始新一轮的计数,在此期间一旦有CCR1\/2\/3\/4\/5\/6之一与之相同,则产生中断并进入中断处理程序,所以不论CCR1\/2\/3\/4\/5\/6的值设为多少,周期始终都由CCR0决定,只不过先后顺序有差别。2、如果是“连续计数模式”,同...

怎么用msp430F149定时器A或定时器B的比较捕获模式测试一个方波的频率...
1.一开始让430的内部定时器跑起来,你要做的就是设置定时器的时钟,是否分频,是否中断,计数模式这些。要是用到捕获模式测频率就要选择成捕获模式,还有上升沿或者下降沿捕获这些。2.之后的过程是这样的,当单片机的特殊引脚检测到你设定的触发信号之后就会立刻把当前时刻的TAR(定时器的16位计数器)中...

用MSP430G2553如何编写一个输出为 1.
使用MSP430G2553芯片编写一个输出为1的过程,需要遵循一些步骤。首先,我们需要考虑定时器的配置,选择辅助晶振作为32KHz激励源,然后进行适当的分频。这个过程可以在用户指引的定时器A章节中找到详细说明。若芯片有对应引脚可以直接输出,那么可以无需软件干预,持续输出为1。这为简化编程提供了便利。但若仅...

相似回答