void delay(uint t) {while(--t);}与void delay(uint z){uint x,y for(x=z;x>0;x--)的区别

 我来答
sunnyapi
推荐于2016-02-13 · TA获得超过1032个赞
知道小有建树答主
回答量:376
采纳率:100%
帮助的人:394万
展开全部
void delay(uint t) {while(--t);}就是执行t次空操作,一个空操作是占一个指令周期,一个指令周期占若干个机器时钟周期(和具体硬件有关)。一般在单片机和dsp中,空操作为asm("Nop");所以void delay(uint t) {while(--t);}等价于
void delay(uint t) {while(--t) asm("Nop");}

void delay(uint z)
{uint x,y
for(x=z;x>0;x--);
}
我感觉好像没有写完,因为y还没有看出来是干啥用的~
追问
为什么我在写调光灯程序时  用void delay(uint t) {while(--t);}可以  用void delay(uint z){uint x,y for(x=z;x>0;x--) for(y=110;y>0;y--);}不可以
追答
这倒是难住我了  我试试回答啊:
首先,void delay(uint t) {while(--t);}中的字符都是半角符,符合程序书写规范;
void delay(uint z){uint x,y for(x=z;x>0;x--) for(y=110;y>0;y--);}中有中文全角符,编译上应该就不能通过,应该改为:
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
另外就是,如果在void delay(uint t) {while(--t);}中你用的是delay(1100),那么在后面的函数中,你应该用delay(10);这样延迟才会是一样的。
我没有单片机在手上,只能在vc上调,感觉后面那个应该也可以。如果还是不行,那就是试试这样子:
#define delay(t) while(--t)
这种方式是用宏来实现延迟,和void delay(uint t) {while(--t);}效果一样的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式