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

关于延时函数

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-10-21 15:43:09 | 显示全部楼层 |阅读模式
在keil5上写的延时函数经过debug不断测试后,时间规定下来了,但烧录到单片机里进行运行,时间与程序里写的时间对不上,这个问题该怎么解决呀?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-02 03:42:37

22

主题

283

回帖

905

积分

高级会员

积分
905
发表于 2024-10-21 15:46:41 来自手机 | 显示全部楼层
时钟设置对了吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-10-21 15:51:34 | 显示全部楼层
邮*** 发表于 2024-10-21 15:46
时钟设置对了吗?

我是新手,对这还不懂,我没有管时钟。那时钟的话该如何去设定呀,大佬。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-30 13:52:43

10

主题

134

回帖

993

积分

高级会员

积分
993
发表于 2024-10-21 15:58:30 | 显示全部楼层
使用AIapp-ISP-v6.94R软件生成吧,选择型号频率自动生成。

软件延时函数

软件延时函数
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-10-21 16:26:38 | 显示全部楼层
远行*** 发表于 2024-10-21 15:58
使用AIapp-ISP-v6.94R软件生成吧,选择型号频率自动生成。

这个我之前试过,让它单独运行这个时间还是比较准的,但是假设引入一个1毫秒的延时函数,让它连续运行1000次,相当于经过了一秒,这个时候把程序烧录到单片机再运行,时间就又不对了

点评

1秒的时间比较长,不建议用软件延时,如果你的单片机型号有RTC,可以使用RTC的秒中断,如果没有,使用定时器的自动装载模式,这是硬件完成的,没有误差,就算在中断程序中使用软件累加为一个比较长的时间,也不会产  详情 回复 发表于 2024-10-21 17:31
这个只适合运行1次,而且要考虑中断的影响,运行多次会加入其他的判断和跳转时间,这是正常的  详情 回复 发表于 2024-10-21 17:21
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:177
  • 最近打卡:2025-04-30 13:52:43

10

主题

134

回帖

993

积分

高级会员

积分
993
发表于 2024-10-21 16:40:29 | 显示全部楼层
江上*** 发表于 2024-10-21 16:26
这个我之前试过,让它单独运行这个时间还是比较准的,但是假设引入一个1毫秒的延时函数,让它连续运行100 ...

考虑是否有其他中断打断了程序的执行导致时间变长,关闭中断跑一下看看
回复 支持 反对

使用道具 举报 送花

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

19

主题

3191

回帖

4872

积分

论坛元老

积分
4872
发表于 2024-10-21 17:20:59 | 显示全部楼层
不要在debug里面测软件延时,要用逻辑分析仪去看。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4850

回帖

8384

积分

超级版主

DebugLab

积分
8384
发表于 2024-10-21 17:21:49 | 显示全部楼层
江上*** 发表于 2024-10-21 16:26
这个我之前试过,让它单独运行这个时间还是比较准的,但是假设引入一个1毫秒的延时函数,让它连续运行100 ...

这个只适合运行1次,而且要考虑中断的影响,运行多次会加入其他的判断和跳转时间,这是正常的
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4850

回帖

8384

积分

超级版主

DebugLab

积分
8384
发表于 2024-10-21 17:31:04 | 显示全部楼层
江上*** 发表于 2024-10-21 16:26
这个我之前试过,让它单独运行这个时间还是比较准的,但是假设引入一个1毫秒的延时函数,让它连续运行100 ...

1秒的时间比较长,不建议用软件延时,如果你的单片机型号有RTC,可以使用RTC的秒中断,如果没有,使用定时器的自动装载模式,这是硬件完成的,没有误差,就算在中断程序中使用软件累加为一个比较长的时间,也不会产生误差
比如20ms产生一个中断,中断函数内使用const unsigned char累加到50来定时1秒,响应中断时硬件会立即自动重新装载定时器值,不受中断函数执行时间影响,中断函数执行时间远小于20ms即可
注意中断频率要尽量低,避免频繁进入中断影响主程序运行,中断函数执行时间应尽量短,要远小于中断频率,如果中断函数执行时间大于中断周期,则退出中断后又会立即进入中断,主程序就无法运行了
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-21 19:29:11 | 显示全部楼层
你所谓对不上是说有误差吧,那这个误差你实测有多少,希望误差控制在什么范围内,这些都要量化,不然总觉得不好,总觉得不够,到底要做到什么地步才算好,需要一个量化的东西,比如1分钟误差不超1秒,或者1秒误差不超1毫秒,不同的要求有不同的解决方案,问题太笼统,得到的答案也就很笼统。如果是微秒级的问题,通过NOP空指令的数量调整傻延迟即可,如果是毫秒级的范畴,考虑用定时器或者定时器+软定时器基本能解决所有问题,如果是分钟、小时,甚至年月日的话,用RTC又比较适合。
睁开眼睛做场梦~~~
回复 支持 1 反对 0

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 22:11 , Processed in 0.455297 second(s), 124 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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