如何用Keil C51 编写89S51的延时函数,如windows的Delay(...)函数。谢谢.网上有些资料介绍用for循环,但是不够准确。

hkey   2007-12-6 16:09 楼主
如何用Keil C51 编写89S51的延时函数,如windows的Delay(...)函数。谢谢.网上有些资料介绍用for循环,但是不够准确。

回复评论 (31)

要准确的延时需要用汇编语言,或者用定时器
点赞  2007-12-6 22:36
用汇编算指令

然后放够指令数

在入这个函数后,关总中断,出了再开

而且可以算得最精确,比定时器还精确,嘿嘿嘿


点赞  2007-12-7 13:39
期待中。。。
点赞  2007-12-7 16:30
lbing7 说的不错!
点赞  2007-12-7 19:08
能否举例说明?谢谢
点赞  2007-12-8 08:41
_nop()这样延迟是不准确的,不同型号及晶振都不同,如果定时器没有用完就用定时器,
如果没有定时器了,就内嵌入汇编
点赞  2007-12-8 09:06
写个条件判断死循环,里面判断定时器标志,想延时多长延时多长,入口清定时器
点赞  2007-12-8 20:55
MOV R2 20H
PUSH R2
PUSH R2
PUSH R2
ACALL DELAY
以上是主程序
DELAY :
DELAY1 DJNZ R2 ,DLLAY1
POP O2H
DELAY2: DJNZ R2 ,DLLAY2
POP 02H
DELAY3: DJNZ R2 ,DLLAY3
RET
这一部分是延时程序
延长时间你可以算算


点赞  2007-12-9 09:38
我觉得用nop指令完全可以做到精确定时
因为对一个应用系统来说,其晶振肯定是确定的。
不过长延时的话一般用for循环就ok了
要精确那就用定时中断
像nop一般在精确的控制时序方面用的多一点
点赞  2007-12-9 16:13
对精确定时别忘了加上函数调用时间
点赞  2007-12-9 17:32
你可以在网上下一个计时的插件,拷贝到你的软件安装目录下能够精确显示你每一条指令的精确时间,能帮你判断是否满足你的定时条件;
点赞  2007-12-10 20:04
没那么麻烦吧,用一个定时器定时不就可以吗?
下载一个懒人系列小工具,51定时器初值计算器,定时器时间到触发中断
点赞  2007-12-11 09:40
头痛了,还是没有找到,期待中。。。。。
点赞  2007-12-11 10:56
nop指令 是怎么用的啊??
谁指教一下
最好能上段 程序 实例
点赞  2007-12-11 20:52
1\用定时器来作延时;
2\用汇编;
3\用C写一个while(i--)之类的,再用示波器测.
点赞  2007-12-11 22:07
这一版块,太没人气了,是不是大家都成大侠了

如果成大侠了,也常回家看看嘛,家里太冷清了

据说努力顶帖也是一种美德,但我只想大家常回家看看

毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来
点赞  2008-4-12 01:11
http://topic.eeworld.net/u/20080110/11/6be2a051-b997-4d78-a9bd-3957fdf86414.html
来 看看 我 曾经转的一片文章,也许对你有帮助
点赞  2008-4-12 09:39
都说定时器不够用,实际一个足以
点赞  2008-4-12 18:45
定时器已经够精确的了,没必要费太多精力的

一个定时器可以实现多个定时功能
点赞  2008-4-14 08:20
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复