我是学习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使用)
表情
zmwk430芯片的时钟是复合时钟,可以有三种时钟模式: 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)

返回顶部