我想利用msp430定时器,每隔2ms产生一个中断就行,不知道如何设置初值
本人想做的程序中含有一个数码动态显示的程序,但是普通的软件延时占用资源,使单片机停在那只是做循环显示了,所以我想用定时器做一个2ms的延时,每次中断扫描一个数码管,显示一...
本人想做的程序中含有一个数码动态显示的程序,但是普通的软件延时占用资源,使单片机停在那只是做循环显示了,所以我想用定时器做一个2ms的延时,每次中断扫描一个数码管,显示一次数据
本来我学的是51系列的单片机,不会计算msp430定时器的初值,
希望大家尽量帮忙解决一下,尽量告诉我关于定时器的东西,谢啦
本人邮箱:xgxg33@163.com
qq : 850113177 展开
本来我学的是51系列的单片机,不会计算msp430定时器的初值,
希望大家尽量帮忙解决一下,尽量告诉我关于定时器的东西,谢啦
本人邮箱:xgxg33@163.com
qq : 850113177 展开
2个回答
展开全部
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对数码管进行一次扫描了。希望可以帮到你。
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对数码管进行一次扫描了。希望可以帮到你。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
厦门君韦信息技术
2024-11-18 广告
2024-11-18 广告
厦门君韦信息技术有限公司成立于2015年,是一家致力于提供专业服务的电子元件分销商,具有业界先进的质量和可靠性、强大的搜索供应实力、专业的服务能力。厦门君韦主要深耕于图像识别技术研究与开发,同时助推于通信、工控、电力、汽车等行业客户的供应链...
点击进入详情页
本回答由厦门君韦信息技术提供
展开全部
给你一个例子,直接调用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);
}
}
#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产生中断为例
追答
我狠忙的!!!!以后再说吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询