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
时间: 2023-06-21 17:03:49 浏览: 95
这段代码是用来实现延时的,其中 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_as(unsigned int as) { unsigned int i; for (i = 0; i < as; i++) __delay_cycles(1000); }
这是一段延时函数的代码,用于延时指定的时间。函数参数为as,表示需要延时的时间,单位是微秒。函数内部使用了循环计数的方式来实现延时,每次循环都会执行__delay_cycles(1000)函数,该函数会让CPU空转一定的时间,从而实现延时的效果。整个函数的作用是让CPU暂停执行一段时间,以便其他外设有足够的时间来完成操作。
void delay_ms(unsigned int time) { unsigned int i,j; for(i=0;i<time;i++); for(j=0;j<12;j++); }
这是一个简单的延时函数,用于在单片机中实现延时。其中,time参数表示需要延时的毫秒数。具体实现是通过两个for循环来实现的,第一个for循环用于控制需要延时的时间,而第二个for循环则是一个空循环,用于增加延时时间的精度。这个函数的延时时间并不是非常精确,因为它受到很多因素的影响,比如CPU时钟频率、编译器优化等等。所以如果需要高精度的延时,建议使用定时器或者其他硬件延时方式。
阅读全文