标题:
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
2020-7-6 15:20 上传
点击文件名下载附件
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