延时程序 汇编

来源:百度知道 编辑:UC知道 时间:2024/06/03 01:44:45
89C2051 晶振11.0952MHz

延时400us程序:
DELAY:MOV R7,#200
DELAY1:DJNC R7,DELAY
RET
延时2.20ms延时程序:
DEL:MOV R7,#10
DEL1:MOV R6,#104
DEL2:DJNC R6,DEL2
DJNC R7,DEL1
RET
我是新手,希望高手指点一二
(1)问下我的两个延时程序对吗?
(2)延时不超过513us的延时程序还有别的更简单的方法吗?
(3)其中#200,#10,#104是不是随便设的,只要不大过255就行了?
第一程序输入错了,应该是DELAY1:DJNC R7,DELAY1.
(3)问是说在我要求的延时设置过程中,寄存器R6.R7的值是不是随便设的.第二程序我的算法是"(2*R6+3)*R7+3=延时".即(2*104+3)*10+3=2113us(网上看到的算法,不知道用这里对不.还想请问一下2113和2200是允许的误差不?)请指点.

DELAY:MOV R7,#200 ;1us
DELAY1:DJNC R7,DELAY1 ;2us
RET ;2us
T=1+200*2+2=4003us,如果200改为199会更接近些,调整循环次数就能调整延时精度。

DEL:MOV R7,#10;1us
DEL1:MOV R6,#104 ;1us
DEL2:DJNC R6,DEL2 ;2us
DJNC R7,DEL1 ;2us
RET ;2us
T=1+10*1+10*104*2+10*2+2=2113us,如果104改为99会更接近些。

(1)你的两个延时程序都对。
(2)延时不超过513us的延时程序这应该是最简单的方法了。
(3)其中#200,#10,#104不是随便设的,不能大过255,同时也要尽可能满足精度要求。
你的时间算法是对的。
还想请问一下2113和2200是否允许要看你的系统精度来定,一般不说,你这里将近10%的误差是比较大的。

(1)第一个程序可能是你输入错了,应该是DELAY1:DJNC R7,DLAY1
而且时间可能不对,你的意思是进行200个计数的死循环来等效于计时,但是DJNC这个语句也要有执行时间(应该是3个机器周期吧,记不清了),这个你要查芯片的DATASHEET看一看。
(2)使用记时器,8051有,2051我不清楚
(3)不是随便设的,见回答(1),是用数数的方法来计时。