函数具体怎么实现1ms延时

void delayms (unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
晶振11.0592MHz
这个函数若要实现1ms延时,将x改为1即可
这个函数有错吗,如何实现1ms延时,具体算法是什么

12M的晶振的机器周期是1/12M12,就是1us
其次不同的单片机执行语句的机器周期也不一定一样(比如:Atmel 51系列及大多数51的一个机器周期是12个时钟周期,华邦的只需要4个时钟周期)。不过大体来说,一条for循环大概8个机器周期,在12M晶振下,通常用以下代码实现1ms的延时:
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
大概算一下,120
8*1us=1ms

https://blog.csdn.net/feike24/article/details/52357772
参考这个,有帮助请采纳!

这种方式不可靠带流水线和不带流水线,运行时间差异很大,而且中断也会影响延时的,而且让CPU长时间空闲也比较浪费。这种比较长的延时,建议用定时器中断做。

不建议用软件定时器 可以用中断计时