单片机延时程序怎么计算的?

[复制链接]
5582|12
 楼主| 297363727 发表于 2012-10-7 22:54 | 显示全部楼层 |阅读模式
void delayms(uint t)
{
uchar m;
  while(t--)
   {for(m=0;m<120;m++);
   }
}

t是多少就是多少毫秒。我想知道这个是怎么算出来的,是根据每条语句的机器周期时间么? 用的是12M的晶振。求大神指点啊
dqyubsh 发表于 2012-10-7 23:10 | 显示全部楼层
这个很粗略,你要看汇编代码,计算一共用了几个指令,每个指令多少个周期,才会比较准确。或者你用一个IO跳变来测量延时函数的时间。
阿南 发表于 2012-10-7 23:47 | 显示全部楼层
2楼的方法是正确的,还有一种比较笨也比较方便有效的方法是:将t设定成固定的值,如10000毫秒,然后一边调节for循环里的值,一边实际测量,至到满意的精确度为此。
logokfu 发表于 2012-10-8 07:23 | 显示全部楼层
楼上说的都很好,不过,建议楼主要学会用定时器。采用查询的办法。这样效率高些,也好把握时间。
NE5532 发表于 2012-10-8 08:57 | 显示全部楼层
还建议楼主定时器和软件延时都学会,按需使用。
dlyt_test001 发表于 2012-10-8 08:58 | 显示全部楼层
长假已过,来冒个泡!不建议楼主用这样的延时!
一个程序中最好要有个定时器!然后用它做延时!
forgot 发表于 2012-10-8 09:56 | 显示全部楼层
按51常见的机器周期是12倍或者6倍的时钟周期来看
即使是机器周期大致延时
t的值也应该不能延时大致t毫秒
forgot 发表于 2012-10-8 09:57 | 显示全部楼层
在不精确延时效果来看,机器周期延时也是很有用的
NE5532 发表于 2012-10-8 19:07 | 显示全部楼层
在不精确延时效果来看,机器周期延时也是很有用的
forgot 发表于 2012-10-8 09:57


软件延时与定时器延时精度相等,详见我精华区的**。
 楼主| 297363727 发表于 2012-10-8 21:22 | 显示全部楼层
9# NE5532
哦,我想学ARM所以现在在学51,不知道以后还需要学AVR不?
NE5532 发表于 2012-10-8 21:52 | 显示全部楼层
你直接学ARM就可以了,其实ARM跟51在理解的容易程度上差不多,欢迎学习AVR,但是学任何单片机都可以。
songhere 发表于 2012-10-8 22:17 | 显示全部楼层
让一个定时器做 时基,这样实时性好些。。。。
fskjhm 发表于 2012-10-23 14:08 | 显示全部楼层
远离51,珍惜脑浆
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

33

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部