找回密码
 立即注册
查看: 33|回复: 2

记录LED灯的亮灭实验看到的在8位和32位不同模式下的延时函数延时长短不一样的现象。

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:237
  • 最近打卡:2025-12-17 02:32:37
已绑定手机

23

主题

192

回帖

1586

积分

金牌会员

积分
1586
发表于 2025-11-21 01:11:00 | 显示全部楼层 |阅读模式

场景介绍:

用Ai8051U-34K64擎天柱核心板做LED灯的亮灭实验,里面用到延时函数如下:


void Delay500ms(void)        //@40.000MHz
{
        unsigned long i;
        _nop_();_nop_();
        i = 4999998UL;
        while (i--);
}

将代码分别在8位和32位下编译通过,并下载到核心板上。
AiCube-ISP-v6.96F工具中选择的时钟频率都是40.000MHz,下载时注意选择8位还是32位。
程序都能运行。
但发现亮灭的周期不同。
8位的亮灭明显比32位下慢很多。
经分析,原因应该是指令周期不同造成。
同样的c语言代码,8/32位会生成不同的汇编代码,用到的汇编指令可能不同,不同指令的指令周期不同,造成延时相差很大。
没进行代码仿真验证,在这里只是记录实验中遇到的情况。

学习MCU
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:646
  • 最近打卡:2025-12-17 07:25:27
已绑定手机

93

主题

6933

回帖

1万

积分

超级版主

积分
13010
发表于 2025-11-21 11:27:59 | 显示全部楼层

使用ISP软件的软件延时计算功能
要先正确设置8051指令集
可以看到不同指令集生成的延时函数不一样

截图202511211127095326.jpg
截图202511211127552709.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:237
  • 最近打卡:2025-12-17 02:32:37
已绑定手机

23

主题

192

回帖

1586

积分

金牌会员

积分
1586
发表于 2025-11-21 18:34:04 | 显示全部楼层
Debu*** 发表于 2025-11-21 11:27
使用ISP软件的软件延时计算功能
要先正确设置8051指令集
可以看到不同指令集生成的延时函数不一样

谢谢回复。
您说的很对。
我就是一开始没注意这个地方,被迷惑了一段时间。
学习MCU
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-12-17 18:15 , Processed in 0.116842 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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