快速计算delay函数中for循环延时程序占用的时间

快速计算delay函数中for循环延时程序占用的时间

首先根据板子上晶振知道时钟频率为12MHz(=0.08us=0.1us),板子上长方形金属外壳上有标(或者看原理图)

根据ISP软件延时计算器得到循环代码

运行_nop_()需要包含库 #include

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一样的

相关推荐

小米6还能卖多少钱?教你快速估价避免被坑!
365在线体育官方网站入口

小米6还能卖多少钱?教你快速估价避免被坑!

📅 07-28 👁️ 7382
7、梦幻西游跑300环大概要多少钱
365bet开户网站

7、梦幻西游跑300环大概要多少钱

📅 09-09 👁️ 9903
冷饮的做法大全
365bet开户网站

冷饮的做法大全

📅 08-22 👁️ 3259
万能表的使用方法图解
365在线体育官方网站入口

万能表的使用方法图解

📅 10-19 👁️ 3796