版块
论坛
喜欢
话题
应用
搜索
登录
注册
hzbitzyj的个人空间
访问量
0
新鲜事
帖子
资料
http://bbs3.driverdevelop.com/index.php?m=space&uid=88845
各位大虾帮忙看看这个延时函数是怎么回事?(C语言)
我是学习C语言的新手!请各位大虾帮忙看看这个延时函数是怎么回事?void Delay(Uint Delay_Len){ Uint i; while(Delay_Len--) { i=1000; WDTCTL=WDTPW+WDTCNTCL; while(i--); ...
全文
回复
(
10
)
2004-09-27 09:47
来自版块 -
c/c++入门(VC,KeilC使用)
◆
◆
表情
告诉我的粉丝
提 交
zmwk
:
430芯片的时钟是复合时钟,可以有三种时钟模式: RC振荡器 低频晶振 高频晶振 而且支持固件切换时钟模式。 所以,同样的代码在不同的时钟模式下延时不同! 如果你的程序对延时要求较高,可千万不能使用上述代码! 倒不是编译器的问题,而是RC振荡器随着温度的变化会有...
(2004-10-01 14:17)
回复
jsblcg
:
我对C51和MSP430F149不熟,我只弄过x86上的东西,但道理是一样的。原理很简单,上面已经说过了,一般不需钻牛角尖(那段代码质量并不高,采用那种循环延时是权宜之计,精确延时应使用汇编接口或嵌入式汇编),如确实需要完全弄懂需要: 1 编译时输出汇编文件,一般编译器都有这个...
(2004-09-29 17:26)
回复
chenfeng111
:
他的意思好像是第2个while循环一次为一条指令,占4个时钟周期, 每个时钟周期为0.25us,(cpu主频40MHZ).所以while(Delay_Len--)一次就延时1ms. 但对Delay_len参数以1/1000的比率来得到秒啊!怎么会是1/100呢?
(2004-09-29 12:23)
回复
xz-zhuo
:
好像是在用C51在编程.
(2004-09-29 11:16)
回复
hzbitzyj
:
不知你这段代码运行于什么环境或芯片,C语言级别的代码一般不可能精确延时,因为同一条语句编译后的指令与编译器及其设置有关。例如上述语句中那个加法在一些编译器中可能会便完全优化掉。这种延时语句一般在DOS之类独占实模式环境下做大致延时。说白了,就是让芯片做些无用功浪费一点时间,具体浪...
(2004-09-29 10:37)
回复
jsblcg
:
不知你这段代码运行于什么环境或芯片,C语言级别的代码一般不可能精确延时,因为同一条语句编译后的指令与编译器及其设置有关。例如上述语句中那个加法在一些编译器中可能会便完全优化掉。这种延时语句一般在DOS之类独占实模式环境下做大致延时。说白了,就是让芯片做些无用功浪费一点时间,具体浪...
(2004-09-28 21:53)
回复
lbcat
:
应该是 i=1000; WDTCTL=WDTPW+WDTCNTCL; while(i--); 这几条语句共用了4个指令周期,所以while(Delay_Len--)一次就延时1ms,不过怎么来45秒就…………是不是你看错了??是4.5秒吧??一般也不会用到这么长的延时...
(2004-09-28 08:50)
回复
weikf
:
我是学习C语言的新手!请各位大虾帮忙看看这个延时函数是怎么回事? void Delay(Uint Delay_Len) { Uint i; while(Delay_Len--) { i=1000; WDTCTL=WDTPW+WDTCNTCL; ...
(2004-09-27 14:31)
回复
hzbitzyj
:
没什么特别,只是用循环来延时,里面加了看门狗防止死机………… :D 谢谢楼上的回复!但是我不知道它哪个延时时间是怎么回事? 为什么4500就是45秒呀?这个延时间是怎么换算的呀?>
(2004-09-27 13:38)
回复
lbcat
:
没什么特别,只是用循环来延时,里面加了看门狗防止死机………… :D
(2004-09-27 13:19)
回复
hzbitzyj
加关注
写私信
0
关注
0
粉丝
14
帖子
返回顶部