汇编语言编写一段延时1000个指令周期的子程序

如题所述

要求编写延时子程序,就不要使用定时器;
也不要用C语言,因为C语言的执行时间,并不确定。
用汇编语言,是最简单、准确的。
51单片机的程序如下:

DL1000:
MOV R7,#248
DJNZ R7,$
MOV R7,#250
DJNZ R7,$
RET

正好1000个机器周期。
R7,是8位寄存器,其最大数值是255,不能直接存入500。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-25
不同频率晶振的单片机指令周期不一样,假如指令周期是1us,1000个指令周期就是1000us=1ms就是写一个1ms的延时,最准确的方法用定时器,汇编写很麻烦的,要计算初值建议用c语言,初始化为
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
中断程序:
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
。。。。。。。;内部操作自己补上
}
这个程序不一定对的,更具自己要求再改动。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
第2个回答  2017-10-29
nop 指令空转3个时钟周期
mov cx,118   4个时钟周期
push         15个
pop          12个
loop          5个
ret          20个  


delay  proc
    push cx
    mov cx,118
@delay:
    nop
    loop @delay
    pop cx
    ret
    endp

第3个回答  2010-09-25
这要根据你的晶振频率和每条指令的指令周期来编写,有的指令是1个机器周期,有的是2或4个……,你所说的1000个指令周期到底是多少?你想要延时多久,软件延时还是定时器延时?
第4个回答  2010-09-25
MOV R7,#500
DJNZ R7,$
相似回答