导图社区 单片机指令系统(基于51)
单片机指令系统,分为算数运算类,逻辑运算类,控制程序转移类,布尔变量操作类,数据传送类。有需要的小伙伴可以下载收藏哦~
社区模板帮助中心,点此进入>>
妈妈必读:一张0-1岁孩子认知发展的精确时间表
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
人际关系处理
人际交往思维导图
人生导航
处理人际关系6项原则
css
指令系统(111条)
数据传送类(29)(按存储空间分)
片内数据传送指令
A为目的操作数
只有R0和R1作间址寄存器
例如:MOV A,Rn 等
Rn为目的操作数
源操作数不能为间址
例如:MOV Rn,A 等
直接地址为。。。
例如:MOV direct,direct 等
间接地址。。
源。。无Rn
例如:MOV @Ri,A 等
16位数据传送指令
例如:MOV DPTR,#data16
片外数据存储器传送指令 (51单片机中片外RAM和I/O口均用
例如:MOVX A,@Ri MOVX @DPTR,A 等(4)
片内外通过A进行数据传送,只能用寄存器间接寻址
程序存储器数据传送指令 (主要用于查表)
例如:MOVC A,@A+PC ;PC会自动指向下一个 MOVC A,@A+DPTR
PC范围256B,DPTR为64KB
数据交换指令
目的操作数均为A
字节交换指令
例如:XCH A,Rn ;A内容与Rn内容交换。 等
不能是立即数
低半字节交换指令
例如:XCHD A,@Ri ;A的低4位和(Ri)低4位换
累加器A的高,低半字节交换指令
例如:SWAP A ;A的低4与高4换
堆栈操作指令
例如:PUSH direct POP direct
一般要重新设定SP初值(1FH以上) 用于中断处理或子程序过程,保护现场数据
算术运算类(24)
加减乘除影响Cy、AC、OV三个标志
加法指令
不带进位的。。。
例如:ADD A,Rn 等
带进位的。。
例如:ADDC A,Rn 等
加1指令
例如:INC DPTR 等
无立即数
十进制调整指令
例如:DA A
只能用在加法指令之后,影响Cy,不影响OV
减法指令
带借位。。
例如:SUBB A,Rn 等
还影响P标志
减1指令
例如:DEC A 等
无立即数,不影响标志位,只有DEC A影响P
乘法指令
例如:MUL AB
除法指令
例如:DIV AB
逻辑运算类(24)
双操作数。。。。
目的操作数为direct时,源。。只能是A或立即数
逻辑与。。
例如:ANL A,Rn ANL direct,A 等
与0为0
逻辑或。。
例如:ORL A,Rn 等
与0本位
逻辑异或。。
例如:XRL A,Rn 等
与0本位,可判断两个数是否相等
单操作数。。。
累加器A清零指令
例如:CLR A
A求反指令
例如:CPL A
累加器A循环移位指令
例如:RL A RR A
带进位位Cy的。。。。
例如:RLC A RRC A
控制程序转移类(17)
无条件转移指令(2字节)
长转移指令
例如:LJMP addr16
addr16一般用标号表示,范围整个ROM
绝对转移指令
例如:AJMP addr11
引用的标号与该指令下一指令要处于ROM同一个2KB范围
相对转移指令(短转移指令)
例如:SJMP rel
rel是补码形式的有符号数,范围-128~+127 常用该指令完成原地踏步,等待中断事件发生:LOOP:SJMP LOOP或SJMP $
间接长转移指令(相对长转移指令)
例如:JMP @A+DPTR
该指令可形成程序分支,范围64KB
条件转移指令
属于相对寻址,范围,rel计算与标号使用同SJMP
累加器判零转移指令(2字节)
例如:JZ rel ;A为0偏转 JNZ rel ;A不为0偏转
指令执行前A要有确定的值
比较不相等转移指令(3字节)
例如:CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE @Ri,data,rel
两数比较作减法操作并影响Cy,但不影响任何一个操作数内容
减1不为0转移指令
例如:DJNZ Rn,rel (2字节) DJNZ direct,rel (3字节)
用于已知循环次数的循环过程
空操作指令
例如:NOP
常用实现等待或延时
子程序调用与返回指令
1,保护断点(系统自动执行) 2,建立子程序入口 3,保护现场
绝对调用指令(2字节)
例如:ACALL addr11
与绝对转移指令类似
长调用指令(3字节)
例如:LCALL addr16
与长转移指令类似
一般子程序返回指令
例如:RET
中断子程序返回指令
例如:RETI
与RET区别:RET1还要释放中断逻辑以接受新的中断请求
布尔变量操作类(位操作指令) (17)
C(Cy)为位累加器,均采用位(直接)寻址方式,位地址表示方式:1)直接位地址;2)“.”操作符;3)位名称;4)用户自定义
位传送指令
例如:MOV C,bit MOV bit,C
位置位和复位指令
位置位指令
例如:SETB C STEB bit
位复位指令
例如:CLR C CLR bit
位逻辑运算指令
位逻辑与。。
例如:ANL C,bit ANL C,/bit
“/”为求反
。。。或。。
例如:ORL C,bit ORL C,/bit
。。。非。。
例如:CPL C CPL bit
位条件转移指令
位累加器Cy状态判断转移指令(2字节)
例如:JC rel ;Cy=1偏转 JNC rel;Cy=0偏转
通常与CJNE一起用,比较两个数大小
位状态判断转移指令(3字节)
例如:JB bit,rel ;bit=1偏转 JNB bit,rel ;bit=0偏转 JBC bit,rel ;bit=1偏转且bit=0