msp430如何用iar软件 仿真精确的延时时间,急需,,谢谢。。。

msp430如何用iar软件 仿真精确的延时时间,急需,,谢谢。。。,第1张

SIMULATOR仿真,

调用delay1ms(1);

查看调用该函数启始时的CPU register中的cyclecounter的差值,乘以MCLK时钟周期 ,就是精确的延时时间

要求没中断,若函数运行时有中断产生,要加上中断时间。

没用过这款单片机,但是大致代码如下

定义一个按键key 控制倍数

char beishu=1;

if(key被按下)//倍数选择 共1 2 3三档 最好加个按键防抖程序

{

if(beishu=4)

beishu=1;

beishu++;

}

然后延时程序这样写

for(j=1500000beishu;j>0;j--)

32768和500的最大公约数是4,所以将定时器设为计数4次中断一次,同时在中断里把一个计数用的全局变量加1当这个变量增加到125,将其清零同时执行你想以2ms周期执行的任务。中断服务如下

int cnt=0;

void interrupt_hadler(void){

cnt++;

if(cnt>125){

cnt=0;

do_your_task();

}

}

虽然程序很简短,但问题还真多!

1 最严重的问题,请不要在中断程序用使用外部延时函数,很危险也不效率,失去了定时器本身的作用。

2 在表示I/O端口某位的时候,最好用BIT0BIT7。

3 判断P21是否为1应该写成 if ((key & BIT1) != 0)。

4 CCR0不是计数器,是PWM或者捕获用的,只需要设置一次就行了。建议用TIME溢出中断,并每次更新TA0R和手动清除中断标志位。

void delay(void)

{

uchar i;

for(i=0;i<100;i++)

{

_nop_();_nop_();//6MHZ下一个NOP是20us,4ms就是200个NOP

}

}

如果FOSC=12MHZ单片机,那么一个机器周期为12/12M=1us

如果是汇编语言的话:

L1:MOV R7,#100

L2:MOV R6,#100

L3:MOV R5,#50

DJNZ R5,$;此句两个机器周期也就是2T

DJNZ R6,L3

DJNZ R7,L2

RET

2T50100100=1,000,000us(共一秒),这是粗略算法,有误差,但不是太大。

以上就是关于msp430如何用iar软件 仿真精确的延时时间,急需,,谢谢。。。全部的内容,包括:msp430如何用iar软件 仿真精确的延时时间,急需,,谢谢。。。、求完善一个延时时间可调的C语言控制程序、跪求MSP430单片机在32768晶振下的精准延时2ms的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9495383.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存