汇编语言延时程序,延时10毫秒的延时程序是什么

汇编语言延时程序,延时10毫秒的延时程序是什么,第1张

首先明确机器执行一条指令耗时大概是1us那么延时10ms的程序如下:MOV AX,50L1:MOV BX,100L2:DEC BX     JNZ L2DEC AXJNZ L1执行完之后时间大约为10ms多一点

根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。

具体步骤如下:/导致这种情况的原因主要是

sub delay(T as single)

dim T1 as single

t1=timer

do

doevents

loop while timer-t1<t

end sub

调用时,使用 delay 3 即可延时3秒

除了用timer函数外,还可以使用gettickcount函数,不过使用它之前要声明它,过程与上面的过程差不多,只是参数便是毫秒作为单位了

SLEEP函数延时是毫秒级的,精确度比较高,但它在延时时会占用很多系统时间,使 *** 作系统暂时无法响应用户 *** 作,所以在长延时的时候不适合使用它

延时方法很多,用定时/计数比较方便也比较精确。如果用软件延时,则可以用循环(多重、嵌套都行)。根据时间长短确定循环次数,力求精确。时间计算以机器的晶振频率为基准,算出各指令的运行时间(每条指令运行时间乘所循环的次数就是该指令的全部运行时间),所有指令运行时间的和就是延时的时间。

比如:设晶振频率为12MHz 则每机器周期为1us

513us延时程序为

DL513: MOV R7,#0FFH ;1us

DJNZ R7,$;2us 255=510us

RET ;2us

延时时间为1+510+2=513us

延时时间较长则可以用多重循环(以四重循环为例),如:

KKKK0:MOV R2,#XX ;1us

KKKK1:MOV R3,#LL ;1usXX

KKKK2:MOV R4,#NN ;1usXXLL

KKKK3:MOV R5,#MM ;1usXXLLNN

DJNZ R5,$ ;2us XXLLNNMM

DJNZ R4,KKKK3 ;2us XXLLNN

DJNZ R3,KKKK2 ;2us XXLL

DJNZ R2,KKKK1 ;2us XX

RET ;2us

延时时间为1us+1usXX+1usXXLL+1usXXLLNN+2us XXLLNNMM+2us XXLLNN+2us XXLL+2us XX+2us

适当确定四个循环次数XX、LL、NN、MM就能得到准确的延时时间。

1、比较死板的方法是自己写一个delay函数,里面用for,while等做一些循环,下面是1ms的延时函数

void

delay1ms(void)

{

unsigned

char

i,j;

for(i=0;i<10;i++)

for(j=0;j<33;j++);

}

具体算法是//(3j+2)i=(3×33+2)×10=1010(us),但精确度不高,如果想准确点可以调节相应的参数用示波器来实

现,上面的函数适用于程序简单,对时间性要求不高,如:点led灯,单个按键 *** 作等等。

2,就是用定时器中断里面设定标志位来产生延时的方法,比如你可以把定时器设定为每1ms进一次中断,在中断里面

把一个标志位(如flag)置一

当你需要1ms延时的时候你可以先初始化定时器,然后查询标志位是否置一,置一则执行if后面的语句,即if(fla{};

当你需要10ms延时时,你可以把flag设置为uchar,中断里面flag++;外面查询用if(10==flag){};

以此类推,上面的方法精确度高适用地方。

以上就是关于汇编语言延时程序,延时10毫秒的延时程序是什么全部的内容,包括:汇编语言延时程序,延时10毫秒的延时程序是什么、关于EXCEL VBA 延时程序、汇编语言延时程序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9509323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存