单片机C语言编程中,编一个延时约1s的语句
资料上看到一个是双重循环的:for(i=1000;i>0;i--)for(j=1000;j>0;j--);上面说这是延时约1s的可我运行的时候它至少有4、5秒,这是咋回事...
资料上看到一个是双重循环的:
for(i=1000;i>0;i--)
for(j=1000;j>0;j--);上面说这是延时约1s的
可我运行的时候它至少有4、5秒,这是咋回事?
是软件问题么??
采用的晶振是12MHz的 展开
for(i=1000;i>0;i--)
for(j=1000;j>0;j--);上面说这是延时约1s的
可我运行的时候它至少有4、5秒,这是咋回事?
是软件问题么??
采用的晶振是12MHz的 展开
8个回答
展开全部
双重循环,共有循环 1000 × 1000 = 一百万遍。
每一遍,如果是1us,才能是延时约1s。
但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。
在编写延时函数之前,首先确认一下系统对晶振的分频系数,从而确定每个单周期指令执行所需的时间,一般的单片机都将指令执行周期设置为1us,这样就可以写一个比较接近1秒的延时函数了。
每一遍,如果是1us,才能是延时约1s。
但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。
在编写延时函数之前,首先确认一下系统对晶振的分频系数,从而确定每个单周期指令执行所需的时间,一般的单片机都将指令执行周期设置为1us,这样就可以写一个比较接近1秒的延时函数了。
展开全部
双重循环,共有循环 1000 × 1000 = 一百万遍。
每一遍,如果是1us,才能是延时约1s。
但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。
所以至少有4、5秒,是很正常的。
每一遍,如果是1us,才能是延时约1s。
但是,晶振是12MHz,一条汇编的指令就至少是1us,C语言的语句,就要更多。
所以至少有4、5秒,是很正常的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
5楼说的很对,12M晶振进入单片机要自动四分频,换算成机器周期是0.33us,一个for语句的时间大概是9s左右,一百万遍需要9s左右
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来总结一下。。
clock()函数返回程序从开始执行到函数执行时所经过的时间,一般经过
1ms / CLOCK_PER_SEC ,clock()函数的返回值会增加1 。。
CLOCK_PER_SEC 为time.h文件中定义的宏,每个编译器都不一样。。
TC中这样定义: #define CLOCKS_PER_SEC 18.2
VC/BCC中这样定义: #define CLOCKS_PER_SEC 1000.0
现在分析函数的执行过程。。
函数传过来的是秒数,但是函数需要clock函数来延时,所以需要把秒数转化成
sec*CLOCL_PER_SEC,才能和clock函数返回值作比较。。
说的很清楚了,LZ应该明白了。。
clock()函数返回程序从开始执行到函数执行时所经过的时间,一般经过
1ms / CLOCK_PER_SEC ,clock()函数的返回值会增加1 。。
CLOCK_PER_SEC 为time.h文件中定义的宏,每个编译器都不一样。。
TC中这样定义: #define CLOCKS_PER_SEC 18.2
VC/BCC中这样定义: #define CLOCKS_PER_SEC 1000.0
现在分析函数的执行过程。。
函数传过来的是秒数,但是函数需要clock函数来延时,所以需要把秒数转化成
sec*CLOCL_PER_SEC,才能和clock函数返回值作比较。。
说的很清楚了,LZ应该明白了。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询