求大神问下延时的问题
麻烦问下:延时500msvoiddelay500ms(void)
{
unsignedchara,b,c;
for(c=23;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}
这些是怎么算出来的?
麻烦说的详细点,新手别见笑~
{:loveliness:} 要在汇编,,看他们的指令机器周期时间,,{:smile:} IO接指示灯,写个循环,循环里调用延时,然后改变IO状态,对照手表的秒针来进行调校 这种延时太死了吧,还是用定时器好 建议用定时器,不然太占用资源。。。 l769109884 发表于 2013-5-3 16:58 static/image/common/back.gif
要在汇编,,看他们的指令机器周期时间,,
比如我晶振是32.768,那应该怎么算 大神 lcw_swust 发表于 2013-5-3 16:58 static/image/common/back.gif
IO接指示灯,写个循环,循环里调用延时,然后改变IO状态,对照手表的秒针来进行调校 ...
额 我想弄个100ms,200ms的。。这。。 实际测量修正再测量... ,也不太费事 。既然用了这种方法,也不用指望延时太精确。 wangzeyu315 发表于 2013-5-3 17:28 static/image/common/back.gif
比如我晶振是32.768,那应该怎么算 大神
那么大的延时就不要用就样做了,,用定时器啊。。。要算的话也很麻烦,,一般用软件算的,, 我用延时般用示波器测好参数 wangzeyu315 发表于 2013-5-3 17:30 static/image/common/back.gif
额 我想弄个100ms,200ms的。。这。。
举个例子:
void delayms(int t)
{
int i;
while(t--)
for(i=455;i>0;i--);//由实际情况标定i的初值
}
void main(void)
{
io初始化();
while(1)
{
LED亮;
delayms(500);
LED灭;
delayms(500);
}
}
对照手表的秒针,调节i的初值,让每秒种LED亮灭一次,那么调用delayms(100)就能延时100ms,调用delayms(200)就能延时200ms 用for循环鞋的延时本来就不是很准确,要精确演示还是建议用定时器有不用耗cpu资源 llf021421 发表于 2013-5-3 18:08 static/image/common/back.gif
我用延时般用示波器测好参数
+1 直接用示波器测量一下就行,所谓的靠for、while延时,至今没搞明白该怎么精确计算{:sad:} 23x152x70x1/晶振频率=时间 建议使用定时器! 用仿真吧,加断点 看cpu 时间。 wugang_1213 发表于 2013-5-4 16:35 static/image/common/back.gif
用仿真吧,加断点 看cpu 时间。
精确度达多少呢?? 这个 精度挺高的,几乎就是实际的运行时间, 如果说影响的话,那要考虑晶振的误差,温度的影响。不考虑的话,精度100%。 l769109884 发表于 2013-5-4 23:39 static/image/common/back.gif
精确度达多少呢??
这个 精度挺高的,几乎就是实际的运行时间, 如果说影响的话,那要考虑晶振的误差,温度的影响。不考虑的话,精度100%。
页:
[1]