单片机指令说多也不多,但也不少,学习指令集不是用于编程,而是在于后期复杂项目中,系统所表现的现象与实际程序不符时,用于查验,所以指令集,只是了解即可,要有此概念,用时再去查找手册即可,小编在此提及的指令,当然不如手册来的精细,所以对指令集感兴趣的同学,建议去看手册.
该章讲完之后,就不在讲指令集了.
指令集就相当于告一段落,在此贴出的目的是用于方便同学们查找.
按功能分:
(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
以上应该是大部分指令的用法了,可以用于任何寄存器的操作.
工作繁忙,出一篇文章实属不易,望带着宽容的眼光看问题.
,