我在编一个汇编程序的时候把Rn的R1~R6都用了,现在又要编一个延时子程序,需要用到三个Rn,例如R0、R1、R7, 我是把Rn用MOV Rn,direct指令存在一个地方后,再调Rn来编写延时程序。这对吗?如果不对,有什么其他的办法?
不是听说通用寄存器Rn有四组嘛,是不是切换一组后就又可以从R0用到R7了,然后用R0、R1、R7来编延时子程序,等结束后再换回到原来的那组去?如果这样可以,汇编程序怎么编,请指教。
还有直接用push 01h 可以把R1压入堆栈吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
下面代码是正确的,可以参考一下。
ORG 0000H
START:
MOV R7,#08H
MOV A,#0FFH
CLR C
LED:
RLC A
MOV P1,A
CALL DELAY
DJNZ R7,LED
AJMP START
;;延时1s(1+20+100X20)+[(250X100X20)+(100X20)+20]X2=1006462 us=1s
DELAY: ;机械周期
MOV R5,#20 ;1 1
DLY3: MOV R6,#100 ;20 1
DLY2: MOV R7,#250 ;100X20 1
DLY1: DJNZ R7,DLY1 ;250X100X20 2
DJNZ R6,DLY2 ;100X20 2
DJNZ R5,DLY3 ;20 2
RET
END
一周热门 更多>