标题: c语言算时间 for延时,怎么算时间?for(i=;;) [打印本页]

作者: 可爱萌萌哒    时间: 2020-7-6 14:32
标题: c语言算时间 for延时,怎么算时间?for(i=;;)
如题

作者: 漫天星光    时间: 2020-7-6 15:10
利用STC下载软件,那里面有个功能是计算时间的
作者: liqingb    时间: 2020-7-6 15:20
先把机器周期,时钟周期,指令周期看一下
作者: xxpp2011    时间: 2020-7-6 15:20
可以用这个软件计算

单片机延时计算工具.zip

1.2 MB, 下载次数: 19


作者: xianfajushi    时间: 2020-7-6 15:21
这种延时只适用于不精确的有一定范围内可用的,精确的延时要使用计数器中断。
作者: xianfajushi    时间: 2020-7-6 15:23
比如说数码管和点阵的延时可在255-100之间计数延时都没问题,甚至更大范围都适用的路474-47这样的范围而不受影响的延时。
作者: 黄youhui    时间: 2020-7-6 16:07
这种for循环一般只算大概时间,精确时间一般用定时器
作者: gzjfly1995    时间: 2020-7-6 16:48
For循环只能计算一个基于时间周期的大概时间,一般用定时器会更好一点
作者: 杨雪飞    时间: 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次,就可以计算出他原地计算这么多次用的时间,也就是这个延时函数所能延迟的时间。


作者: f556    时间: 2020-7-7 09:48
手工计算的我一般不太自信,都是延时闪灯多次,用表计秒,来的真实可靠。
特别对于多时钟的芯片,ACLK、SMCLK、MCLK等再加倍频、分频,各不同,实测计时我常用。
作者: wangyuejia2015    时间: 2020-7-7 10:00
12M的晶振的bai机器周期是1/12M*12,就是1us ,51的一个for循环大概是8个机器周期,也就是0.66us。
作者: 菜鸟946    时间: 2020-7-9 10:29
晶振频率是11.05926的话
作者: 菜鸟946    时间: 2020-7-9 10:30
void delay(uint z){}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1