
void delay(uint t) {while(--t);}与void delay(uint z){uint x,y for(x=z;x>0;x--)的区别
1个回答
展开全部
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) 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);}效果一样的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询