延时1s计算方法是将所有指令执行时间相加得出的。比如:
dly1s:
mov
r2,#10
;1
dly1:
mov
r3,#200
;110
dly2:
mov
r4,#248
;120010
djnz
r4,$
;224820010
djnz
r3,dly2
;220010
djnz
r2,dly1
;210
ret
;2
total=1+10+2000+992000+4000+20+2=998033
如果使用12m晶振,那么延时时间为0998秒。
单片机编程时延时程序其实就是一些循环指令组成的集合。比如:
DELAY:MOV R2,#248 ;本条指令1T执行1次
DJNZ R2,$ ;本条指令2T执行248次
NOP ;本条指令1T执行1次
RET ;本条指令2T执行1次
所以延时时间为:1+2482+1+2=500T,如果晶振是12M的话,延时500us
ah是高位字节,al是低位字节,ax是包含了ah和al两个字节的字;
ah和al都是8位长度,最大值是FFH,因此不可能将200H赋给ah,编译时会报错;如果将200当做十进制才可以;(将汇编默认的16进制改成10进制。)
在delay延时程序里面,首先push ax 是在堆栈中保存ax;
ax的值赋给了cx。它们的高位是200D, 即C8H,低位是0,一起是C800H;
CX北赋值之前被压栈,送入堆栈;
cx在循环loop里面是用来倒计数的,每循环一次,cx自动减去1,当cx达到0时,loop结束。
al是0不要紧,循环次数是用cx来计算的;
最后cx, ax依次出栈,还原先前的值。注意出栈顺序,因为堆栈是先进后出的;
ret是退出循环;
以上就是关于汇编1S的延时程序怎么弄全部的内容,包括:汇编1S的延时程序怎么弄、单片机汇编程序怎么计算延时、汇编延时程序疑问等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)