[51单片机] 为啥延时为1ms

[复制链接]
2589|14
 楼主| 王万鸿 发表于 2013-10-21 13:07 | 显示全部楼层 |阅读模式
FOR, NTC, TI, tc
void delay (int count)
{
  int i,j,
  for (i=0;i<count;i++)
     for (j=0;j<120;j++);
}
forgot 发表于 2013-10-21 13:09 | 显示全部楼层
因为执行这段代码用了近1ms的时间  和机器周期有关
delin17 发表于 2013-10-21 13:24 | 显示全部楼层
自己看汇编数算机器周期就可以知道了。。
很多这种只是粗略延时
NE5532 发表于 2013-10-21 13:48 | 显示全部楼层
运行这些语句所编译出的汇编语句耗时1mS,但是注意C语言这样延时,延时长度与编译器和优化设置有很大关系。
puppet21 发表于 2013-10-21 15:04 | 显示全部楼层
我补充一个问题:

这种延时的方式和晶振有关系么?是不是只有12M的晶振才是这样表示1ms?
dirtwillfly 发表于 2013-10-21 15:25 | 显示全部楼层
puppet21 发表于 2013-10-21 15:04
我补充一个问题:

这种延时的方式和晶振有关系么?是不是只有12M的晶振才是这样表示1ms? ...

有的。换其他晶振延时就变了
NE5532 发表于 2013-10-21 16:19 | 显示全部楼层
puppet21 发表于 2013-10-21 15:04
我补充一个问题:

这种延时的方式和晶振有关系么?是不是只有12M的晶振才是这样表示1ms? ...

当然有关系。
xhujian 发表于 2013-10-21 17:03 | 显示全部楼层
每个指令执行都要时间,比如是执行一次要1us。你让CPU傻傻的执行1000X1000次,就延时了1S钟。
把单片机的 机器周期 再一看下就知道如何算。
至于为什么这个函数是1S。只能说,在你的机子的硬件环境和编译设置下。恰好是1S。
比如 晶体改了,CPU初始化时时钟是 X12 还是X1 .变量是DATA,还是XDATA。 同样这个函数延时都不一样。这个延时大该估计一下用。不用精确的算。没有意义。
最简单的方式。
你调用 delay(100) 来灭灯,亮灯,快了或慢了就改 120。
黄小俊 发表于 2013-10-21 19:14 | 显示全部楼层
jackhwang 发表于 2013-10-22 08:46 | 显示全部楼层
这个函数实现延时1ms,和单片机的型号与晶振都有关系。比如AT89S51在12MHz情况下,这个函数延时约1ms!
outstanding 发表于 2013-10-22 11:23 | 显示全部楼层
你那个延时是1ms么  ?你的参数都没有赋值,你知道多少时间?
coody 发表于 2013-10-22 11:29 | 显示全部楼层
建议 实际的项目程序不要这样长延时,1ms好多MCU都可以扫描一个大的任务了。。。。
很忙 发表于 2013-10-22 12:00 | 显示全部楼层
ZG11211 发表于 2013-10-22 20:13 | 显示全部楼层
参数都还没赋值,哪只眼睛能看出它就是延时1ms?
 楼主| 王万鸿 发表于 2013-10-23 14:10 | 显示全部楼层
对不起大家大家 都说啦这么多我没反应  挺对不起大家的见解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

15

帖子

0

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