单片机「5」51单片机指令集(2)
单片机指令说多也不多,但也不少,学习指令集不是用于编程,而是在于后期复杂项目中,系统所表现的现象与实际程序不符时,用于查验,所以指令集,只是了解即可,要有此概念,用时再去查找手册即可,小编在此提及的指令,当然不如手册来的精细,所以对指令集感兴趣的同学,建议去看手册.
该章讲完之后,就不在讲指令集了.
指令集就相当于告一段落,在此贴出的目的是用于方便同学们查找.
按功能分:
(1) 数据传送类指令
(2) 算数操作类指令
(3) 逻辑操作类指令
(4) 控制转移类指令
(5) 布尔变量操作类指令
具体用法如下:
MOV 将数传送至累加器/寄存器/地址单元/RAM单元等
MOVC A, @A+DPTR 以DPTR为基址,变址寻址单元中的数据送入累加器
MOVC A, @A+PC 以PC为基址,变址寻址单元中的数据送入累加器
MOVX @Ri, A 累加器送逻辑上外部的片内扩展RAM(8位寻址)
MOVX @DPTR, A 累加器送逻辑上外部的片内扩展RAM(16为寻址)
PUSH direct 直接地址单元压入堆栈
POP direct 出栈送数据到地址单元
XCH A, Rn 寄存器与累加器交换
XCH A, direct 地址单元与累加器交换
XCH A, @Ri 间接RAM与累加器交换
XCHD A, @Ri 间接RAM的低半字节与累加器交换
ADD A, Rn 寄存器内容送入累加器
ADDC A, Rn 带进位寄存器内容送入累加器
SUBB A, Rn 累加器带借位减寄存器内容
INC A 累加器加1
INC Rn 寄存器加1
DEC A 累加器减1
DEC Rn 寄存器减1
MUL AB A乘以B
DIV AB A除以B(A/B)
DA A 累加器十进制调整
ANL A, Rn 累加器与寄存器"与"
ORL A, Rn 累加器与寄存器"或"
XRL A, Rn 累加器与寄存器"异或"
CLR A 累加器清"0"
CPL A 累加器"求反"
RL A 累加器循环左移
RLC A 累加器带进位位循环左移
RR A 累加器循环右移
RRC A 累加器带进位位循环右移
SWAP A 累加器半字节交换
ACALL addr11 绝对(短)调用子程序
LCALL addr16 长调用子程序
RET 子程序返回
RETI 中断返回
AJMP addr11 绝对(短)转移
LJMP addr16 长转移
SJMP re1 相对转移
JMP @A+DPTR 相对于DPTR的间接转移
JZ re1 累加器为零转移
JNZ re1 累加器非零转移
CJNE A, direct, re1 累加器与直接地址单元比较,不相等则转移
DJNZ Rn, re1 寄存器减1,非零转移
NOP 空操作
CLR C 清零进位位
CLR bit 清零直接地址位
SETB C 置1进位位
SETB bit 置1直接地址位
CPL C 进位位求反
CPL bit 直接地址位求反
ANL C, bit 进位位与直接地址位相"与"
ANL C, /bit 进位位与直接地址位反码相"与"
ORL C, bit 进位位与直接地址位相"或"
JC rel 进位位为1则转移
JNC rel 进位位为0则转移
JB bit, rel 直接地址位为1则转移
JNB bit, rel 直接地址位为0则转移
JBC bit, rel 直接地址位为1则转移,该位清0
以上应该是大部分指令的用法了,可以用于任何寄存器的操作.
工作繁忙,出一篇文章实属不易,望带着宽容的眼光看问题.
「硬见小百科」单片机逻辑运算类指令
对单片机的累加器A的逻辑操作:
CLR A ;将A中的值清0,单周期单字节指令,与MOV A,#00H效果相同。
CPL A ;将A中的值按位取反
RL A ;将A中的值逻辑左移
RLC A ;将A中的值加上进位位进行逻辑左移
RR A ;将A中的值进行逻辑右移
RRC A ;将A中的值加上进位位进行逻辑右移
SWAP A ;将A中的值高、低4位交换。
例: (A)=73H,则执行CPL A,这样进行:
73H化为二进制为01110011,
逐位取反即为 10001100,也就是8CH。
RL A是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。
例:A中的值为68H,执行RL A。68H化为二进制为01101000,按上图进行移动。01101000化为11010000,即D0H。
RLC A,是将(A)中的值带上进位位(C)进行移位。
例:A中的值为68H,C中的值为1,则执行RLC A
1 01101000后,结果是0 11010001,也就是C进位位的值变成了0,而(A)则变成了D1H。
SWAP A,是将A中的值的高、低4位进行交换。
例:(A)=39H,则执行SWAP A之后,A中的值就是93H。怎么正好是这么前后交换呢?因为这是一个16进制数,每1个16进位数字代表4个二进位。注意,如果是这样的:(A)=39,后面没H,执行SWAP A之后,可不是(A)=93。要将它化成二进制再算:39化为二进制是10111,也就是0001,0111高4位是0001,低4位是0111,交换后是01110001,也就是71H,即113。
以上所有信息仅作为学习交流使用,不作为任何学习和商业标准。若您对文中任何信息有异议,欢迎随时提出,谢谢!
关于云创硬见
云创硬见是国内最具特色的电子工程师社区,融合了行业资讯、社群互动、培训学习、活动交流、设计与制造分包等服务,以开放式硬件创新技术交流和培训服务为核心,连接了超过30万工程师和产业链上下游企业,聚焦电子行业的科技创新,聚合最值得关注的产业链资源, 致力于为百万工程师和创新创业型企业打造一站式公共设计与制造服务平台。
相关问答
单片机 进行移位操作 右移 时,为什么最高位保持原数,最低位移出?逻辑右移就是不考虑符号位,右移一位,左边补零即可。2、算术右移算术右移需要考虑符号位,右移一位,若符号位为1,就在左边补1,;否则,就补0。所以算术右移...>"...
单片机 中怎样取位地址?在单片机中,取位地址是通过位操作来实现的。首先,需要确定要操作的寄存器或变量的地址。然后,使用位操作指令(如AND、OR、XOR等)来对该地址进行操作。通过设...
单片机 中如何把高四位与低四位进行转换?假设a为原来的数b储存高4位c存低四位b=a>>4;//右移4位使高4位存在低位c=aa=b|c;//高低4位或组成新的简化b=a>>4;a=(a简化...
【用51 单片机 控制16个流水灯,依次左移点亮,.高分用51 单片机 ...[最佳回答]低电平点亮START:MOVR0,#8MOVR1,#8SETBCMOVA,#0FEHMOVP1,AS1:RLCACALLDELAYMOVP1,ADJNZR0,S1SETBCMOV...
C语言驱动 单片机 实现位移控制是否可行?C语言驱动单片机实现位移控制是否可行?答案是C语言驱动单片机实现位移控制是可行的。“位移”也就是对单片机进行移位操作。知识点:移位操作(1)左移(2...C...
C51 单片机 里的_crol_()语句用普通的语句怎么实现 - 懂得C51单片机里的_crol_()语句是循环左移操作,可以用普通的语句实现,如下所示:```cunsignedchara=0xAB;//待左移的数unsignedcharb=(a<<1)|(...
单片机 EQU(0SHL4)是什么意思?EQU跟变量申请差不多,比如DISEQU30H就是定义变量DIS的地址是30H,以后DIS操作相当于对寄存器30H的操作。0SHL4好像没有什么实际意义,如果是1SHL4的话...
单片机 实验二进制到BCD转换?有个问题必须先核实,这个16位二进制数是有符号数还是无符号数?这个问题影响到电路的具体设计,因为你需要一个除法器,关于除法器的设计自行去搜索,最简单的是...
51 单片机 如何将二进制小数转换为十进制 - KatherineLoveS 的...如果你只想要温度的整数值,那就将12位的温度数据右移4位就可以了。比如温度数据是0x2A9,所以温度的整数部分就是0x2A=42℃,温度的小数部分是0x9=0.5...
max157 单片机 功能?a>>6表示a左移6位,也就是除以32,这样可以加快单片机的处理速度(移位运算速度远高于除法),a本身的值不变;左移右移运算只对int,char有效,float和double则...a...