51单片机中R0,R1,R2.....都表示的是什么

51单片机中R0,R1,R2.....都表示的是什么,很多时候看不懂。比如说
ORG 0
START: CLR P1.0
LCALL DELAY
SETB P1.0 ;使P1.0变为1。
LCALL DELAY
LJMP START ;转入主程序
DELAY: MOV R5,#20 ;延时子程序,延时0.2秒
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
这里面的R5,F6,R7是寄存器,但是MOV R5,#20; 延时子程序,延时0.2秒 这句话是怎么理解的呢?多谢高手解答
各位哥哥们啊,我知道R0他们是寄存器,但是我不明白的一点就是这个地方,将20放到R5中,怎么会是延时0.2秒呢?这一点不懂啊,多谢各位哥哥们解答啊!

这个叫做软件延时程序。由于单片机每执行一条指令都需要时间。上面的程序用文字描述:
DELAY: MOV R5,#20 ;延时子程序,延时0.2秒
这句是将十进制数20这个数传送给寄存器R5。
D1: MOV R6,#20
这句是:D1是标号,将20传给R6
D2: MOV R7,#248
与上相同
DJNZ R7,$
这句是每执行一次R7就减1如果不为0就跳转到这条指令开头,直到减为0。
DJNZ R6,D2
这句是每执行一次R6就减1如果不为0就跳转到D2这个标号,直到减为0。
DJNZ R5,D1
这句是每执行一次R1就减1如果不为0就跳转到D1这个标号,直到减为0。
RET
这是子程序返回指令,懂了吗??
其实这个延时程序不是精确延时的,如果要精确延时就用定时器中断了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-30
51单片机中R0,R1,R2.....都表示的是什么

表示:
当前的工作寄存器组中的寄存器。
( 共4组,每组8个,都是表示成r0-r7;
用psw寄存中的第3,4位rs0,rs1来选择。
复位后,psw默认是00H,
rs0,rs1组合为00
所以共组寄存器组是第0组。)
就和累加器,什么的一样,
里面用来存放数据,可以是00H-ffH,
即可以是0-255中的任何一个数,
当然了,由于单片机只认0和1
寄存器又是8位的,
即00000000b-11111111b
8位2进制数,
用16进制表示出来就是00H-ffH.

不知兄弟是否明白?
第2个回答  2010-05-30
是DELAY后面到RET都是延时子程序,RET是子程序返回指令,RO-R7都是单片机的通用寄存器;整段程序的作用就是产生一个周期0.4秒的方波。
MOV R5,#20是将#20写到寄存器R5中,DJNZ是条跳转指令,DJNZ R7,$此句中的"$"表示本条指令,将R5的值减1,然后判断是不是0,不为0则继续执行本条语句,为0则执行下一条;DJNZ R6,D2表示不为0的时候跳到D2这一句。所以延时时间大致就是(20*248*20)*2=198400个机器周期。
第3个回答  2019-05-05
stmib
r0!
,{r1,r2}
是指将r1,r2的值保存到r0指向的存储单元中(r0自动加1)
ldmia
r0!
,{r1,r2}
是指将r0指向的单元中的数据读出到r1,r2中(r0自动加1)
第4个回答  2010-05-30
这是一个循环嵌套程序,注意是不是delay后的六行是中间对称的?一个套一个,MOV R5,#20; 只是给R5赋一个初值,具体的“延时0.2秒”是结合实际的电路来实现0.2s延迟的,不同的电路不同的晶振不一定就是0.2s