void delay_ms(int xx) { int ii = 0; for(ii = 0; ii < xx; ii++) { delay_us(1000);__nop();__nop();__nop(); } }
时间: 2024-04-18 12:29:51 浏览: 71
这段代码是用来实现毫秒级延时的函数。它调用了之前提到的delay_us函数来实现微秒级的延时,每次延时1000微秒(即1毫秒)。在外层的循环中,执行了xx次延时操作,从而实现了指定毫秒数的延时。在每次循环内部,还执行了几次空指令(__nop())来进一步精确延时。整体上,这段代码通过调用微秒级延时函数来实现毫秒级的延时操作。
相关问题
解读代码:void delay_us(int xx) { int ii = 0; for(ii = 0; ii < xx; ii++) { __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop(); __nop(); } }void delay_ms(int xx) { int ii = 0; for(ii = 0; ii < xx; ii++) { delay_us(1000);__nop();__nop();__nop(); } }
这段代码定义了两个延时函数:`delay_us`和`delay_ms`。
1. `delay_us`函数是用来实现微秒级延时的。它通过执行一系列的空指令(`__nop()`)来进行精确的微秒级延时。使用一个循环,循环次数由参数`xx`确定,每次循环内部执行了11次空指令,从而实现了指定微秒数的延时。
2. `delay_ms`函数是用来实现毫秒级延时的。它通过调用`delay_us`函数来实现微秒级的延时,每次延时1000微秒(即1毫秒)。外层的循环循环次数由参数`xx`确定,每次循环内部还额外执行了3次空指令。这样就实现了指定毫秒数的延时。
这两个函数结合起来,可以实现不同精度的延时操作。`delay_us`用于微秒级延时,而`delay_ms`则基于`delay_us`实现毫秒级延时。
如果有任何其他问题,请随时提问。
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。
阅读全文