汇编延时程序

汇编延时程序,第1张

你先看下这段延时程序

采用12M晶振,用51芯片处理。

DELAY: MOV R7,#250;

D1:MOV R6,#250;

D2:DJNZ R6 ,D2;

DJNZ R7,D1;

RET

以上是一段延时0125秒的程序。

它计算的原理是:

这段程序最终执行了250250次,而DJNZ指令执行需要2个机器周期,一个机器周期需要1微秒的时间,所以以上延时程序就是2502502=0125秒。

你的程序原理跟这个应该是一样的~

我们这些程序员很幸运,因为Microsoft公司的专家认为建立一个独立于硬件的延时器是一个好主意。显然,这样做的目的在于,无论程序运行在什么速度的计算机上,都可产生一段固定的延迟时间。下面的程序说明了如何在DOS中建立一个延时器:

#

include

<stdio

h>

#

include

%dos

h>

#

include

<stdlib

h>

void

main(int

argc,char

argv)

{

union

REGS

regs:

unsiged

long

delay;

delay

=

atoI(argv[1])

;

/

assume

that

there

is

an

argument

/

/

multiply

by

1

for

microsecond-granularity

delay

/

/

multiply

by

1000

for

millisecond-granularity

delay

/

/

multiply

by

1000000

for

second-granularity

delay

/

delay

=1000000;

regs

x

ax

=

0x8600

;

regs

x

cx=

(unsigned

int

)((delay

&

0xFFFF0000L)>>16)

;

regs

x

dx

=

(unsigned

int

)

(delay

&

0xFFFF)

int86

(0x15,

&regs,

&regs)

;

}

上例通过DOS中断15H的86H功能来实现延时,延迟时间以微秒为单位,因此,上述延时程序认为你可能要使用一个非常大的数字,于是它分别用CX和DX寄存器来接受延时值的高16位和低16位。上述延时程序最多可以延时49.亿微妙---大约等于12小时。

上例假设延时值以微秒为单位,它把延时值乘以一百万,因此在命令行中可以输入以秒为单位的延时值。例如,“delay

10”命令将产生10秒的延时。

delay函数转换为汇编后是这样的

MOV Rn,#data 为1个周期

DJNZ Rn,rel为2个周期

总共为401个周期

如果按照12MHz晶振来算就是401us(包括调用时间为403us)

只是普通的延时

一般是用于一些低速总线上,从设备的通讯速率较低才采用延时的方法。

以上就是关于汇编延时程序全部的内容,包括:汇编延时程序、怎样在DOS程序中建立一个延时器(delay timer)、C51单片机延时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10122692.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存