请选择 进入手机版 | 继续访问电脑版

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

关于延时函数

[复制链接]
  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 34 天

    [LV.5]常住居民I

    9

    主题

    85

    回帖

    247

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 71 天

    [LV.6]常住居民II

    13

    主题

    174

    回帖

    262

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 34 天

    [LV.5]常住居民I

    9

    主题

    85

    回帖

    247

    积分

    中级会员

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    4

    主题

    96

    回帖

    306

    积分

    中级会员

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

    软件延时函数

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

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 34 天

    [LV.5]常住居民I

    9

    主题

    85

    回帖

    247

    积分

    中级会员

    积分
    247
     楼主| 发表于 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 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    3 小时前
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    4

    主题

    96

    回帖

    306

    积分

    中级会员

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 245 天

    [LV.8]以坛为家I

    17

    主题

    2555

    回帖

    3113

    积分

    论坛元老

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

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 250 天

    [LV.8]以坛为家I

    53

    主题

    2257

    回帖

    4326

    积分

    超级版主

    DebugLab

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

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

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 250 天

    [LV.8]以坛为家I

    53

    主题

    2257

    回帖

    4326

    积分

    超级版主

    DebugLab

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

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

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 264 天

    [LV.8]以坛为家I

    27

    主题

    1387

    回帖

    1849

    积分

    荣誉版主

    热心市民

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-5 12:21 , Processed in 0.090037 second(s), 90 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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