void delay_ms(unsigned int time) { unsigned int i,j; for(i=0;i<time;i++); for(j=0;j<12;j++); }
时间: 2023-12-11 07:02:11 浏览: 263
这是一个简单的延时函数,用于在单片机中实现延时。其中,time参数表示需要延时的毫秒数。具体实现是通过两个for循环来实现的,第一个for循环用于控制需要延时的时间,而第二个for循环则是一个空循环,用于增加延时时间的精度。这个函数的延时时间并不是非常精确,因为它受到很多因素的影响,比如CPU时钟频率、编译器优化等等。所以如果需要高精度的延时,建议使用定时器或者其他硬件延时方式。
相关问题
void delay_us(unsigned int us){ unsigned int i,j; for(i=0;i<us;i++) for(j=0;j<12;j++);}void delay_ms(unsigned int ms){ unsigned int i,j; for(i=0;i<ms;i++) for(j=0;j<12000;j++);}解释代码,晶振12M
这段代码是用来实现延时的,其中 delay_us 函数用来延时指定的微秒数,delay_ms 函数用来延时指定的毫秒数。
在晶振为 12MHz 的情况下,每个机器周期为 1/12MHz = 83.33ns。
delay_us 函数中的 for 循环中,i 的范围是 0 到 us-1,表示需要延时的微秒数。j 的范围是 0 到 11,每次执行内部的操作都需要 12 个机器周期,因此 for 循环中执行的次数为 us*12。由于每个机器周期需要 83.33ns,因此 delay_us 函数的总延时时间为 us*12*83.33ns = us*1us。
delay_ms 函数中的 for 循环中,i 的范围是 0 到 ms-1,表示需要延时的毫秒数。j 的范围是 0 到 11999,每次执行内部的操作都需要 12000 个机器周期,因此 for 循环中执行的次数为 ms*12000。由于每个机器周期需要 83.33ns,因此 delay_ms 函数的总延时时间为 ms*12000*83.33ns = ms*1ms。
void delay_ms(unsigned int ms) { int i,j; for ( i = 0; i < ms; i++) { for ( j = 0; j < 100; j++) { // 双重循环,等待耗时 } } }这段延时具体能延时多久
这段延时的具体时间取决于参数`ms`的值。每个`ms`中,内部有一个双重循环,内部循环的次数为100次,因此,每个`ms`内部的循环次数为100次,所以可以计算出总共的延时时间为 `ms * 100 / 1000` 秒,其中1000是毫秒转换为秒的系数。例如,如果`ms`的值为1000,则总延时时间为100秒。但是,这种延时方式不太准确,因为它受到许多因素的影响,例如处理器的速度和负载。
阅读全文