void Delay (unsignedchar k)
unsignedint i,J:
for(i=0:i<255*k:1++)
for(=0:jK255;j++)
void Delay (unsigned int xms)
{
unsigned char i,j;
while(xms)
{i=2;
j=239;
do
{while(--j)
while(--i)
xms--;
}
}
void Delay (unsignedchar k)
unsignedint i,J:
for(i=0:i<255*k:1++)
for(=0:jK255;j++)
void Delay (unsigned int xms)
{
unsigned char i,j;
while(xms)
{i=2;
j=239;
do
{while(--j)
while(--i)
xms--;
}
}
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
这两个延时函数的实现方式有很大的不同,主要体现在以下几个方面:
参数类型与目的不同:第一个函数以unsigned char k作为参数,看起来像是用来调整循环次数以达到不同的延时效果。第二个函数以unsigned int xms作为参数,这个参数更直观地表示了延时的大致时间(单位为毫秒)。
循环结构不同:第一个函数使用了双层循环结构,外层循环由参数k控制次数,内层循环是固定的。第二个函数则是while循环嵌套do-while循环,内层循环用于消耗时间,外层循环用于处理剩余时间或做其他逻辑判断。这种嵌套循环的形式在某些场合可能会更加灵活和方便调整。此外,内层循环中使用i=2和j=239似乎是硬编码的固定值,这不是最佳实践,因为它降低了函数的可重用性和灵活性。更好的做法是让这些值根据需要进行动态调整。
延时方式的效率不同:第二个函数的延时方式更加复杂,包含了嵌套的循环结构。这样的结构虽然可能在某些场合可以提供更精细的时间控制,但也可能导致效率较低。在嵌入式系统中,精确控制延时通常需要权衡效率和准确性。如果不需要非常精确的时间控制,使用简单的延时函数可能更为高效。此外,第二个函数中的嵌套循环结构可能会消耗更多的CPU资源,这在资源有限的单片机系统中是需要特别注意的。
总的来说,这两个函数的延时效果取决于具体的硬件环境、编译器优化以及实际运行情况等因素。而且,它们都是基于循环次数的延时方式,并不准确,对于精确的时间控制需求可能无法满足。在单片机系统中实现精确的延时通常需要使用定时器或其他专门的硬件资源。