如何用Keil C51 编写89S51的延时函数,如windows的Delay(...)函数。谢谢.网上有些资料介绍用for循环,但是不够准确。
用汇编算指令
然后放够指令数
在入这个函数后,关总中断,出了再开
而且可以算得最精确,比定时器还精确,嘿嘿嘿
_nop()这样延迟是不准确的,不同型号及晶振都不同,如果定时器没有用完就用定时器,
如果没有定时器了,就内嵌入汇编
写个条件判断死循环,里面判断定时器标志,想延时多长延时多长,入口清定时器
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
这一部分是延时程序
延长时间你可以算算
我觉得用nop指令完全可以做到精确定时
因为对一个应用系统来说,其晶振肯定是确定的。
不过长延时的话一般用for循环就ok了
要精确那就用定时中断
像nop一般在精确的控制时序方面用的多一点
你可以在网上下一个计时的插件,拷贝到你的软件安装目录下能够精确显示你每一条指令的精确时间,能帮你判断是否满足你的定时条件;
没那么麻烦吧,用一个定时器定时不就可以吗?
下载一个懒人系列小工具,51定时器初值计算器,定时器时间到触发中断
nop指令 是怎么用的啊??
谁指教一下
最好能上段 程序 实例
1\用定时器来作延时;
2\用汇编;
3\用C写一个while(i--)之类的,再用示波器测.
这一版块,太没人气了,是不是大家都成大侠了
如果成大侠了,也常回家看看嘛,家里太冷清了
据说努力顶帖也是一种美德,但我只想大家常回家看看
毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来
http://topic.eeworld.net/u/20080110/11/6be2a051-b997-4d78-a9bd-3957fdf86414.html
来 看看 我 曾经转的一片文章,也许对你有帮助
定时器已经够精确的了,没必要费太多精力的
一个定时器可以实现多个定时功能