单片机中,怎么用汇编语言编写程序实现延迟40ms

单片机中,怎么用汇编语言编写程序实现延迟40ms,第1张

1循环延时的方法

DELAY: ;误差 0us

MOV R7,#25H

DL1:

MOV R6,#9AH

DL0:

MOV R5,#02H

DJNZ R5,$

DJNZ R6,DL0

DJNZ R7,DL1

RET

不过这不实用。40MS时间单片机都 在这里循环,不作能它事。

1可以用定时中断的方法:

ORG 0000H

LJMP START

ORG 000BH

LJMP Timer0Interrupt

START:

MOV SP,#60H

LCALL InitTimer0

LOOP:

;add your code here!

LJMP LOOP

InitTimer0:

MOV TMOD,#01H

MOV TH0,#63H

MOV TL0,#0C0H

SETB EA

SETB ET0

SETB TR0

RET

Timer0Interrupt:

PUSH DPH

PUSH DPL

PUSH ACC

MOV TH0,#63H

MOV TL0,#0C0H

;========================

;add your code here!

;========================

POP ACC

POP DPL

POP DPH

RETI

END

采纳答案,数字,算错了吧?

应该是 500 多毫秒。

51 单片机的指令,执行时间,是一个机器周期或二个机器周期。

只有乘除指令,是四个机器周期。

机器周期,称为T。

正确计算如下:

MOV R2, #10 ;1T

L1: MOV R3, #100 ;1T

L2: MOV R4, #250 ;1T

L3: DJNZ R4, L3 ;2T 2 250 = 500T

DJNZ R3, L2 ;2T (1+500+2) 100 = 50300T

DJNZ R2, L1 ;2T (1+50300+2) 10 = 503030T

RET ;2T (1+503030+2) = 503033T

总共执行时间是:503033T。

当晶振是 12MHz,T 就是 1us。

那么,延时时间就是 503033us,约等于 500 毫秒。

多简单的小程序呀:

TIME1MS:

MOV R6, #2

TIME1:

;延时498uS

MOV R7, #248

DJNZ R7, $ ;R7的为0时,程序向下运行,否则继续减

;

DJNZ R6, TIME1 ;加上此命令后,每个小周期时间为500uS

;运行两周为1MS,再加上最前面的MOV R6那条指令,就是1002MS

RET

此程序实现的是1002MS的定时,当然这当中不算主程序调用此延时程序时现场保护的时间,即压栈和出栈的时间

以上就是关于单片机中,怎么用汇编语言编写程序实现延迟40ms全部的内容,包括:单片机中,怎么用汇编语言编写程序实现延迟40ms、求问这段汇编语言的延时程序怎么计算延时时间、找一个单片机汇编语言编写的延时1ms的子程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存