用汇编语言编写一个延时1S的子程序

用汇编语言编写一个延时1S的子程序,第1张

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

; -----------------------------------------

; Subroutine 延时指定的时钟嘀嗒数

; 入口:

; Didas=时钟嘀嗒数(1秒钟约嘀嗒182次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)

Delay1S Proc Near

push dx

push cx

xor ax,ax

int 1ah

mov Times,dx

mov Times[2],cx

Read_Time: xor ax,ax

int 1ah

sub dx,Times

sbb cx,Times[2]

cmp dx,Didas

jb Read_Time

pop cx

pop dx

ret

Times dw 0,0

Delay1S EndP

; -----------------------------------------

Didas equ 18

Start: call Delay1S

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

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

要求编写延时子程序,就不要使用定时器;

也不要用C语言,因为C语言的执行时间,并不确定。

用汇编语言,是最简单、准确的。

51单片机的程序如下:

DL1000:

MOV R7,#248

DJNZ R7,$

MOV R7,#250

DJNZ R7,$

RET

正好1000个机器周期。

R7,是8位寄存器,其最大数值是255,不能直接存入500。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存