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


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

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

正好1000个机器周期。
R7,是8位寄存器,其最大数值是255,不能直接存入500。
不同频率晶振的单片机指侍空令周期不一样,假如指令周期是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;
。。。。。。。;腊谈团内部操作自己补上
}
这个程序不一定对的,更具自己要求再改轮橘动。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
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

这要根亏掘据你的晶振频颂空敬率和每条指令的指令周期来编写,有的指令是1个机器周期,有的是2或4个……,你所说的1000个指令周期到底是多少?你想要延时多久,软件野慎延时还是定时器延时?
MOV R7,#500
DJNZ R7,$