找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4901|回复: 12
收起左侧

c语言算时间 for延时,怎么算时间?for(i=;;)

  [复制链接]
ID:711481 发表于 2020-7-6 14:32 来自触屏版 | 显示全部楼层 |阅读模式
如题
回复

使用道具 举报

ID:97554 发表于 2020-7-6 19:04 | 显示全部楼层
void Delay(unsigned int a)//0~65535
{
unsigned char b;for(;a>0;a--)
{
for
(b=110;b>0;b--);         }
}


比如上边这样一个延时程序,
void Delay(unsigned int a)//0~65535   这里边的unsigned int是无符号整数的意思,也就是a的取值范围是0-65535
那么就可以按照需要在函数里写void Delay(3)这样的数字,这个数字的作用下边说。
unsigned char b;这句是定义个无符号字符型的数字b
for(;a>0;a--)   这句,没有写a=几这个初始值,因为是在上边void Delay(unsigned int a)括号里给的,这里只要a比0大,那就-1,直到减到a=0
接下来的
for
(b=110;b>0;b--);
也是一样的但是他在a-1的函数里,他是先给b个值110,然后只要b比0大,就做b-1的运算,直到a=0,于是上边的程序就是
不断的进行这样的计算:
先看看a等不等于0,不等于那就a-1
然后
b-1=110   110-1=109    109-1= 108
一直这样减到b=0也就是原地做了110次减法,单片机在这里运行110个周期,
然后b=0了又回去看a的值,
假如void Delay(unsigned int a) 这里a取值500  

在主程序里延时子函数写作:
void main(){
        while(1)
        {
                LED1=0;//点亮
                Delay(500);
                LED1=1;
                Delay(500);
        }
};


那就是让单片机做500次的110-1-1-1-1-1-1减到0的运算,
那么也就是机器自己原地玩了500  ×  110 = 55000次,
如果单片机是12M的晶振,那单片机每秒钟运行12M次,用这12M次除以55000次,就可以计算出他原地计算这么多次用的时间,也就是这个延时函数所能延迟的时间。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:504443 发表于 2020-7-6 15:10 | 显示全部楼层
利用STC下载软件,那里面有个功能是计算时间的
回复

使用道具 举报

ID:277948 发表于 2020-7-6 15:20 | 显示全部楼层
先把机器周期,时钟周期,指令周期看一下
回复

使用道具 举报

ID:452950 发表于 2020-7-6 15:20 | 显示全部楼层
可以用这个软件计算

单片机延时计算工具.zip

1.2 MB, 下载次数: 19

回复

使用道具 举报

ID:332444 发表于 2020-7-6 15:21 | 显示全部楼层
这种延时只适用于不精确的有一定范围内可用的,精确的延时要使用计数器中断。
回复

使用道具 举报

ID:332444 发表于 2020-7-6 15:23 | 显示全部楼层
比如说数码管和点阵的延时可在255-100之间计数延时都没问题,甚至更大范围都适用的路474-47这样的范围而不受影响的延时。
回复

使用道具 举报

ID:592807 发表于 2020-7-6 16:07 | 显示全部楼层
这种for循环一般只算大概时间,精确时间一般用定时器
回复

使用道具 举报

ID:798531 发表于 2020-7-6 16:48 | 显示全部楼层
For循环只能计算一个基于时间周期的大概时间,一般用定时器会更好一点
回复

使用道具 举报

ID:282850 发表于 2020-7-7 09:48 | 显示全部楼层
手工计算的我一般不太自信,都是延时闪灯多次,用表计秒,来的真实可靠。
特别对于多时钟的芯片,ACLK、SMCLK、MCLK等再加倍频、分频,各不同,实测计时我常用。
回复

使用道具 举报

ID:775776 发表于 2020-7-7 10:00 | 显示全部楼层
12M的晶振的bai机器周期是1/12M*12,就是1us ,51的一个for循环大概是8个机器周期,也就是0.66us。
回复

使用道具 举报

ID:453334 发表于 2020-7-9 10:29 | 显示全部楼层
晶振频率是11.05926的话
回复

使用道具 举报

ID:453334 发表于 2020-7-9 10:30 | 显示全部楼层
void delay(uint z){}
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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