单片机指令大全.docx
《单片机指令大全.docx》由会员分享,可在线阅读,更多相关《单片机指令大全.docx(10页珍藏版)》请在冰豆网上搜索。
![单片机指令大全.docx](https://file1.bdocx.com/fileroot1/2022-12/7/e31b67f9-e421-4bb7-af85-c24056522953/e31b67f9-e421-4bb7-af85-c240565229531.gif)
单片机指令大全
单片机指令大全
指令格式 功能简述 字节数 周期
一、数据传送类指令
MOV A,Rn 寄存器送累加器 1 1
MOV Rn,A 累加器送寄存器 1 1
MOV A,@Ri 内部RAM单元送累加器 1 1
MOV @Ri,A 累加器送内部RAM单元 1 1
MOV A,#data 立即数送累加器 2 1
MOV A,direct 直接寻址单元送累加器 2 1
MOV direct,A 累加器送直接寻址单元 2 1
MOV Rn,#data 立即数送寄存器 2 1
MOV direct,#data 立即数送直接寻址单元 3 2
MOV @Ri,#data 立即数送内部RAM单元 2 1
MOV direct,Rn 寄存器送直接寻址单元 2 2
MOV Rn,direct 直接寻址单元送寄存器 2 2
MOV direct,@Ri 内部RAM单元送直接寻址单元 2 2
MOV @Ri,direct 直接寻址单元送内部RAM单元 2 2
MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2
MOV DPTR,#data16 16位立即数送数据指针 3 2
MOVX A,@Ri 外部RAM单元送累加器(8位地址) 1 2
MOVX @Ri,A 累加器送外部RAM单元(8位地址) 1 2
MOVX A,@DPTR 外部RAM单元送累加器(16位地址) 1 2
MOVX @DPTR,A 累加器送外部RAM单元(16位地址) 1 2
MOVC A,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2
MOVC A,@A+PC 查表数据送累加器(PC为基址) 1 2
XCH A,Rn 累加器与寄存器交换 1 1
XCH A,@Ri 累加器与内部RAM单元交换 1 1
XCHD A,direct 累加器与直接寻址单元交换 2 1
XCHD A,@Ri 累加器与内部RAM单元低4位交换 1 1
SWAP A 累加器高4位与低4位交换 1 1
POP direct 栈顶弹出指令直接寻址单元 2 2
PUSH direct 直接寻址单元压入栈顶 2 2
二、算术运算类指令
ADD A,Rn 累加器加寄存器 1 1
ADD A,@Ri 累加器加内部RAM单元 1 1
ADD A,direct 累加器加直接寻址单元 2 1
ADD A,#data 累加器加立即数 2 1
ADDC A,Rn 累加器加寄存器和进位标志 1 1
ADDC A,@Ri 累加器加内部RAM单元和进位标志 1 1
ADDC A,#data 累加器加立即数和进位标志 2 1
ADDC A,direct 累加器加直接寻址单元和进位标志 2 1
INC A 累加器加1 1 1
INC Rn 寄存器加1 1 1
INC direct 直接寻址单元加1 2 1
INC @Ri 内部RAM单元加1 1 1
INC DPTR 数据指针加1 1 2
DA A 十进制调整 1 1
SUBB A,Rn 累加器减寄存器和进位标志 1 1
SUBB A,@Ri 累加器减内部RAM单元和进位标志 1 1
SUBB A,#data 累加器减立即数和进位标志 2 1
SUBB A,direct 累加器减直接寻址单元和进位标志 2 1
DEC A 累加器减1 1 1
DEC Rn 寄存器减1 1 1
DEC @Ri 内部RAM单元减1 1 1
DEC direct 直接寻址单元减1 2 1
MUL AB 累加器乘寄存器B 1 4
DIV AB 累加器除以寄存器B 1 4
三、逻辑运算类指令
ANL A,Rn 累加器与寄存器 1 1
ANL A,@Ri 累加器与内部RAM单元 1 1
ANL A,#data 累加器与立即数 2 1
ANL A,direct 累加器与直接寻址单元 2 1
ANL direct,A 直接寻址单元与累加器 2 1
ANL direct,#data 直接寻址单元与立即数 3 1
ORL A,Rn 累加器或寄存器 1 1
ORL A,@Ri 累加器或内部RAM单元 1 1
ORL A,#data 累加器或立即数 2 1
ORL A,direct 累加器或直接寻址单元 2 1
ORL direct,A 直接寻址单元或累加器 2 1
ORL direct,#data 直接寻址单元或立即数 3 1
XRL A,Rn 累加器异或寄存器 1 1
XRL A,@Ri 累加器异或内部RAM单元 1 1
XRL A,#data 累加器异或立即数 2 1
XRL A,direct 累加器异或直接寻址单元 2 1
XRL direct,A 直接寻址单元异或累加器 2 1
XRL direct,#data 直接寻址单元异或立即数 3 2
RL A 累加器左循环移位 1 1
RLC A 累加器连进位标志左循环移位 1 1
RR A 累加器右循环移位 1 1
RRC A 累加器连进位标志右循环移位 1 1
CPL A 累加器取反 1 1
CLR A 累加器清零 1 1
四、控制转移类指令类
ACCALLaddr11 2KB范围内绝对调用 2 2
AJMP addr11 2KB范围内绝对转移 2 2
LCALL addr16 2KB范围内长调用 3 2
LJMP addr16 2KB范围内长转移 3 2
SJMP rel 相对短转移 2 2
JMP @A+DPTR 相对长转移 1 2
RET 子程序返回 1 2
RET1 中断返回 1 2
JZ rel 累加器为零转移 2 2
JNZ rel 累加器非零转移 2 2
CJNE A,#data,rel 累加器与立即数不等转移 3 2
CJNE A,direct,rel 累加器与直接寻址单元不等转移 3 2
CJNE Rn,#data,rel 寄存器与立即数不等转移 3 2
CJNE @Ri,#data,rel RAM单元与立即数不等转移 3 2
DJNZ Rn,rel 寄存器减1不为零转移 2 2
DJNZ direct ,rel 直接寻址单元减1不为零转移 3 2
NOP 空操作 1 1
五、布尔操作类指令
MOV C,bit 直接寻址位送C 2 1
MOV bit,C C送直接寻址位 2 1
CLR C C清零 1 1
CLR bit 直接寻址位清零 2 1
CPL C C取反 1 1
CPL bit 直接寻址位取反 2 1
SETB C C置位 1 1
SETB bit 直接寻址位置位 2 1
ANL C,bit C逻辑与直接寻址位 2 2
ANL C,/bit C逻辑与直接寻址位的反 2 2
ORL C,bit C逻辑或直接寻址位 2 2
ORL C,/bit C逻辑或直接寻址位的反 2 2
JC rel C为1转移 2 2
JNC rel C为零转移 2 2
JB bit,rel 直接寻址位为1转移 3 2
JNB bit,rel 直接寻址为0转移 3 2
JBC bit,rel 直接寻址位为1转移并清该位 3 2
[1].以累加器A为目的操作数类指令(4条)
这4条指令的作用是把源操作数指向的内容送到累加器A。
有直接、立即数、寄存器和寄存器间接寻址方式:
MOVA,data;(data)→(A)直接单元地址中的内容送到累加器A
MOVA,#data;#data→(A)立即数送到累加器A中
MOVA,Rn;(Rn)→(A)Rn中的内容送到累加器A中
MOVA,@Ri;((Ri))→(A)Ri内容指向的地址单元中的内容送到累加器A
[2].以寄存器Rn为目的操作数的指令(3条)
这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。
有直接、立即和寄存器寻址方式:
MOVRn,data;(data)→(Rn)直接寻址单元中的内容送到寄存器Rn中
MOVRn,#data;#data→(Rn)立即数直接送到寄存器Rn中
MOVRn,A;(A)→(Rn)累加器A中的内容送到寄存器Rn中
[3].以直接地址为目的操作数的指令(5条)
这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。
有直接、立即、寄存器和寄存器间接4种寻址方式:
MOVdata,data;(data)→(data)直接地址单元中的内容送到直接地址单元
MOVdata,#data;#data→(data)立即数送到直接地址单元
MOVdata,A;(A)→(data)累加器A中的内容送到直接地址单元
MOVdata,Rn;(Rn)→(data)寄存器Rn中的内容送到直接地址单元
MOVdata,@Ri;((Ri))→(data)寄存器Ri中的内容指定的地址单元中数据送到直接地址单元
[4].以间接地址为目的操作数的指令(3条)
这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。
有直接、立即和寄存器3种寻址方式:
MOV@Ri,data;(data)→((Ri))直接地址单元中的内容送到以Ri中的内容为地址的RAM单元
MOV@Ri,#data;#data→((Ri))立即数送到以Ri中的内容为地址的RAM单元
MOV@Ri,A;(A)→((Ri))累加器A中的内容送到以Ri中的内容为地址的RAM单元
[5].查表指令(2条)
这组指令的功能是对存放于程序存储器中的数据表格进行查找传送,使用变址寻址方式:
MOVCA,@A+DPTR;((A))+(DPTR)→(A)表格地址单元中的内容送到累加器A中
MOVCA,@A+PC;((PC))+1→(A),((A))+(PC)→(A)表格地址单元中的内容送到累加器A中
[6].累加器A与片外数据存储器RAM传送指令(4条)
这4条指令的作用是累加器A与片外RAM间的数据传送。
使用寄存器寻址方式:
MOVX@DPTR,A;(A)→((DPTR))累加器中的内容送到数据指针指向片外RAM地址中
MOVXA,@DPTR;((DPTR))→(A)数据指针指向片外RAM地址中的内容送到累加器A中
MOVXA,@Ri;((Ri))→(A)寄存器Ri指向片外RAM地址中的内容送到累加器A中
MOVX@Ri,A;(A)→((Ri))累加器中的内容送到寄存器Ri指向片外RAM地址中
[7].堆栈操作类指令(2条)
这4类指令的作用是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。
这类指令只有两条,下述的第一条常称为入栈操作指令,第二条称为出栈操作指令。
需要指出的是,单片机开机复位后,(SP)默认为07H,但一般都需要重新赋值,设置新的SP首址。
入栈的第一个数据必须存放于SP+1所指存储单元,故实际的堆栈底为SP+1所指的存储单元。
PUSHdata;(SP)+1→(SP),(data)→(SP)堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中
POPdata;(SP)→(data)(SP)-1→(SP),堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作
[8].交换指令(5条)
这5条指令的功能是把累加器A中的内容与源操作数所指的数据相互交换。
XCHA,Rn;(A)←→(Rn)累加器与工作寄存器Rn中的内容互换
XCHA,@Ri;(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的内容互换
XCHA,data;(A)←→(data)累加器与直接地址单元中的内容互换
XCHDA,@Ri;(A3-0)←→((Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的内容低半字节互换
SWAPA;(A3-0)←→(A7-4)累加器中的内容高低半字节互换
[9].16位数据传送指令(1条)
这条指令的功能是把16位常数送入数据指针寄存器。
MOVDPTR,#data16;#dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL
MCS-51算术运算指令
算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算。
另外MCS-51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和调整,我们都归类为运算指令。
虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,则可进行多字节无符号整数的运算。
同时利用溢出标志,还可以对带符号数进行补码运算。
需要指出的是,除加、减1指令外,这类指令大多数都会对PSW(程序状态字)有影响。
这在使用中应特别注意。
[1].加法指令(4条)
这4条指令的作用是把立即数,直接地址、工作寄存器及间接地址内容与累加器A的内容相加,运算结果存在A中。
ADDA,#data;(A)+#data→(A)累加器A中的内容与立即数#data相加,结果存在A中
ADDA,data;(A)+(data)→(A)累加器A中的内容与直接地址单元中的内容相加,结果存在A中
ADDA,Rn;(A)+(Rn)→(A)累加器A中的内容与工作寄存器Rn中的内容相加,结果存在A中
ADDA,@Ri;(A)+((Ri))→(A)累加器A中的内容与工作寄存器Ri所指向地址单元中的内容相加,结果存在A中
[2].带进位加法指令(4条)
这4条指令除与[1]功能相同外,在进行加法运算时还需考虑进位问题。
ADDCA,data;(A)+(data)+(C)→(A)累加器A中的内容与直接地址单元的内容连同进位位相加,结果存在A中
ADDCA,#data;(A)+#data+(