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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
这是子程序返回指令,懂了吗??
其实这个延时程序不是精确延时的,如果要精确延时就用定时器中断了。
参考技术A 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.

不知兄弟是否明白?
参考技术B 是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个机器周期。
参考技术C stmib
r0!
,r1,r2
是指将r1,r2的值保存到r0指向的存储单元中(r0自动加1)
ldmia
r0!
,r1,r2
是指将r0指向的单元中的数据读出到r1,r2中(r0自动加1)
参考技术D 这是一个循环嵌套程序,注意是不是delay后的六行是中间对称的?一个套一个,MOV R5,#20; 只是给R5赋一个初值,具体的“延时0.2秒”是结合实际的电路来实现0.2s延迟的,不同的电路不同的晶振不一定就是0.2s

matlab 中的 null(A,'r')命令中的‘r‘是啥

一楼真会开玩笑,plot里r才代表红色呢。
null是用来求齐次线性方程组的基础解系的,加上'r'则求出的是一组
最小正整数解,如果不加,则求出的是解空间的规范正交基。
参考技术A 错,是齐次线性方程组有理数解

以上是关于51单片机中R0,R1,R2.....都表示的是啥的主要内容,如果未能解决你的问题,请参考以下文章

单片机中R0,R1,R2,R5,R6,R7是怎样用的?是怎样计算时钟周期和延时程序的时间的?

汇编和中断

“将R0的内容送到R1”的指令序列,

ARM汇编指令

单片机中Rn的作用是啥?它和Ri的区别是啥?

80C51指令系统中Rn与Ri有啥区别?