找回密码
 立即注册
查看: 166|回复: 10

这个句子是怎 样计时到1MS

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-16 22:30:59
已绑定手机

6

主题

6

回帖

54

积分

注册会员

积分
54
发表于 2025-3-7 22:09:47 | 显示全部楼层 |阅读模式

void delay_ms(u8 ms)
{
     u16 i;
     do{
          i = 24M / 10000;
          while(--i);   //10T per loop
     }while(--ms);
} 是怎 么计时到1MS??
如delay_ms(250)就延时到250MS
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-7 22:12:00 | 显示全部楼层
该函数通过循环实现延时。假设系统时钟为24MHz,`i = 24M / 10000` 计算出每1ms所需的循环次数为2400。内层 `while(--i)` 每次循环消耗10个时钟周期(10T),因此2400次循环消耗24000个时钟周期,恰好为1ms。外层 `while(--ms)` 控制总的延时时间,`delay_ms(250)` 即循环250次,达到250ms延时。此方法依赖精确的时钟频率和循环周期,适用于对精度要求不高的场景。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-7 22:18:00 | 显示全部楼层
该代码通过循环计数实现延时。假设系统时钟为24MHz,`i = 24M / 10000` 将 `i` 初始化为 2400。内层循环 `while(--i)` 每次执行约10个时钟周期,因此总耗时约为 2400 * 10 / 24MHz = 1ms。外层循环 `while(--ms)` 控制延时次数,例如 `delay_ms(250)` 将执行250次1ms循环,总延时250ms。此方法依赖于准确的时钟频率和指令周期,实际应用中需考虑系统中断等影响因素。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-7 22:18:00 | 显示全部楼层
该代码通过循环实现延时功能。`i = 24M / 10000` 将 `i` 初始化为 2400,假设系统时钟为 24MHz,每个循环耗时 10 个时钟周期(10T),则每次内循环耗时约 0.001 秒(1ms)。`while(--i)` 执行 2400 次,耗时 1ms。`do-while(--ms)` 控制外层循环次数,`ms` 为延时毫秒数,如 `delay_ms(250)` 即执行 250 次 1ms 延时,总延时 250ms。代码通过精确的循环次数和时钟周期计算实现毫秒级延时。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-7 22:18:00 | 显示全部楼层
该代码通过循环计数实现延时。假设系统时钟为24MHz,`i = 24M / 10000` 将 `i` 初始化为2400。内层循环 `while(--i)` 每次执行约10个时钟周期,因此内层循环总耗时约为 `2400 * 10 / 24M = 1ms`。外层循环 `while(--ms)` 控制延时次数,`ms` 为延时毫秒数。例如 `delay_ms(250)` 将执行250次内层循环,总延时约250ms。该方法的精度依赖于时钟频率和指令周期,实际应用中需结合具体硬件调试。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-7 22:18:00 | 显示全部楼层
该函数通过循环计数实现延时,具体步骤如下:

1. **时钟频率**:假设系统时钟为24MHz,即每微秒执行24个时钟周期。
2. **内层循环**:`i = 24M / 10000` 计算得到 `i = 2400`,表示每次内层循环需要执行2400次。
3. **循环耗时**:`while(--i)`每次循环消耗10个时钟周期,因此内层循环总耗时约为2400 * 10 / 24M = 1ms。
4. **外层循环**:`while(--ms)`控制内层循环的执行次数,每执行一次内层循环,延时1ms。因此,`delay_ms(250)`将延时250ms。

综上,函数通过精确的循环计数实现了1ms的延时,并通过外层循环控制总延时时间。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-7 22:18:00 | 显示全部楼层
在该代码中,`delay_ms`函数通过循环计数实现延时。具体原理如下:  

1. **时钟频率**:假设系统时钟为24MHz,即每秒执行24M个时钟周期。  
2. **循环计算**:`i = 24M / 10000`,表示每个内循环执行2400次,每次循环消耗10个时钟周期(10T),因此内循环总耗时为:  
   \[
   2400 \times 10T = 24000T
   \]  
   对应时间:  
   \[
   \frac{24000T}{24M} = 1ms
   \]  
3. **外循环控制**:`ms`参数控制外循环次数,`delay_ms(250)`即执行250次内循环,总延时为250ms。  

总结:通过精确计算循环次数与时钟周期,实现了1ms的延时,并通过参数`ms`控制总延时时间。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:503
  • 最近打卡:2025-05-02 08:06:55
已绑定手机

1

主题

834

回帖

1447

积分

金牌会员

积分
1447
发表于 2025-3-8 09:02:00 | 显示全部楼层
AI将控制全世界
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:322
  • 最近打卡:2025-05-02 10:02:36
已绑定手机

21

主题

487

回帖

1041

积分

金牌会员

积分
1041
发表于 2025-3-8 12:33:35 | 显示全部楼层
wnag*** 发表于 2025-3-8 07:52
这人工智能要霸屏啊

哈哈
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-02 07:32:37

21

主题

564

回帖

2678

积分

金牌会员

积分
2678
发表于 2025-3-9 08:37:28 | 显示全部楼层
很明显不是1ms啊,除法和do while跳转自身也要消耗时间的
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 22:09 , Processed in 0.127027 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表