概述
-
首先根据板子上晶振知道时钟频率为12MHz(=0.08us=0.1us),板子上长方形金属外壳上有标(或者看原理图)
-
根据ISP软件延时计算器得到循环代码
-
运行_nop_()需要包含库 #include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
- 计算循环计算次数 23 × 205 × 120 = 565,800
- ➗12MHz = 0.04715s 和500ms不符合
- 根据百度知道,一条for语句占用10T
×10计算得0.4715s大致符合500ms=0.5s突然发现原版是do while格式- 根据这篇文章 【51单片机】延时函数计算问题以及如何准确延时https://blog.csdn.net/wait_for_taht_day5/article/details/50526490,取得12T只能计算个大概数值
- 只有一层for循环时,用跑马灯显示效果挺慢的
void delay()
{
unsigned int i;
for(i = 0; i < 50000; i++);
}
- 书上例子双层for循环代入上述公式为0.1s
void delay()
{
unsigned int i, j;
for(i = 0; i < 1000; i++)
for(j = 0; j < 110; j++);
}
- 改写do while格式输入如下所示,先生产1ms代码,参考B站视频 51单片机入门教程-2020版 程序全程纯手打 从零开始入门
51单片机入门教程-2020版 程序全程纯手打 从零开始入门
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
- 对1ms程序进行叠加得xms,改写成
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
xms--;
}
}
- 看程序代码应该do while效率更高,但是计算时间应该是和for一样的
最后
以上就是光亮眼神为你收集整理的快速计算delay函数中for循环延时程序占用的时间的全部内容,希望文章能够帮你解决快速计算delay函数中for循环延时程序占用的时间所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复