如何利用单片机汇编指令编程实现延时10ms利用汇编指令设计多重循环编程实现20ms延时

如何利用单片机汇编指令编程实现延时10ms利用汇编指令设计多重循环编程实现20ms延时,第1张

这是调用一个延时10毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了

DELAY10MS:

MOV R2,#20

DELAY10MS1:

MOV R3,#250

DJNZ R3,$

DJNZ R3,DELAY10MS1

RET

这是调用一个延时20毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了

DELAY20MS:

MOV R2,#40

DELAY20MS1:

MOV R3,#250

DJNZ R3,$

DJNZ R3,DELAY20MS1

RET

RETRET的作用是子程序返回。调用一个子程序,当单片机执行到RET语句的时候,单片机就会返回到调用的地方并继续向下执行。

下面给你一个例程:

闪烁灯

ORG 00H

AJMP START

ORG 30H

START:

MOV P0,#00H

LCALL DELY;调用延时子程序

MOV P0,#0FFH

LCALL DELY;调用延时子程序

AJMP START

DELY:

MOV R7,#250

DL1:MOV R6,#250

DJNZ R6,$

DJNZ R7,DL1

RET

MOV AX,5FFFH ;可修改0000~0FFFFH之内 越大延时越高

REP2:

MOV CX,5FFFH

REP10MS:

LOOP REP10MS

DEC AX ;AX-1->AX

CMP AX,0H ;比较AX和0的大小

JNE REP2 ;AX不等于0则跳转到 REP2

就是机器没执行一条指令要170ns,数字仅供参考

让循环重复执行5FFF5FFF次,达到秒级 具体的要自己调试

设主频12MHz的51单片机,编一个100ms二重循环的延时程序如下,供参考。其它汇编可以类似编程。

SSSS:MOV R0,#99;本指令是单周期指令,用时1us

KKKK0:DJNZ R0,KKKKK;2us

MOV R1,#125;1us

LLLL0:DJNZ R1,LLLLL;2us

NOP;1us

NOP;1us

NOP;1us

NOP;1us

LLLLL:SJMP LLLL0;2us

NOP;1us

NOP;1us

NOP;1us

NOP;1us

NOP;1us

KKKKK:SJMP KKKK0;2us

NOP;1us

NOP;1us

NOP;1us

NOP;1us

NOP;1us

RET;2us

这段程序延时时间是

1+99[2+1+125(2+1+1+1+1+2)+1+1+1+1+1+2]+1+1+1+1+2=100000us=100ms

可以适当调整循环常数99、125以求减小NOP(空 *** 作指令),使程序更加精练。

dshxxf程序不错,但延时时间是50301us,计算如下1+100(1+2250+3)

汇编程序的延时可以直接根据指令计算

在12M晶振的条件下,1个机器周期的指令为1微妙

单片机的指令分为单字节、双字节、三字节三种,其机器周期分别为1us、2us、3us [12M晶振]

对上述程序,分三部分计算:

push 06h ;1周期 1us

push 07h ;1周期 1us

MOV R6,#14H ;2周期 2us

;下面做一个整体计算 (2+192+2)14 us

DL1:MOV R7,#19H ;2周期

DL2:DJNZ R7,DL2 ;2周期

DJNZ R6,DL1 ;2周期

pop 07h;1周期 1us

pop 06h;1周期 1us

RET;1周期 1us

然后累加即可得答案

^_^ 希望对你有帮助~

用delay来产生延时在要求较高的场合不大合适。

可调用系统时间来产生准确的延时,并且可控制延迟时间

TEMP: MOV AH,2CH

INT 21H

ADD DH,5 ;获得时间DH为 当前的秒数,5秒可以自己选择

PUSH DX

WAIT:

POP DX

MOV AL,DH

PUSH DX

MOV AH,2CH ;新的时间

INT 21H

CMP DH,AL

JB WAIT ;小于5秒的话继续查询

欢迎讨论

以上就是关于如何利用单片机汇编指令编程实现延时10ms利用汇编指令设计多重循环编程实现20ms延时全部的内容,包括:如何利用单片机汇编指令编程实现延时10ms利用汇编指令设计多重循环编程实现20ms延时、8086下求汇编语言延时3秒的代码、求做个汇编编程,用双层循环实现100ms的延时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存