第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,$