51单片机111条指令
- 格式:doc
- 大小:45.50 KB
- 文档页数:4
MCS-51共有111条指令,可分为5类:[1].数据传送类指令(共29条)[2].算数运算类指令(共24条)[3].逻辑运算及移位类指令(共24条)[4].控制转移类指令(共17条)[5].布尔变量操作类指令(共17条)一些特殊符号的意义Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
包含0—127(255)内部存储单元地址和特殊功能寄存地址。
#data—指令中的8位常数。
#data16—指令中的16位常数。
addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。
#addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。
rel—8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128——+127范围内。
@—间接寄存器寻址或基址寄存器的前缀。
/—为操作的前缀,声明对该位操作书取反。
DPTR—数据指针。
bit—内部RAM和特殊功能寄存器的直接寻址位。
A—累加器。
B—累加器B。
用于乘法和除法指令中。
C—进位标志位。
(x)—某地址单元中的内容。
((x))—由X寻址单元中的内容。
MCS-51的寻址方式[1].直接寻址指令中操作数直接以单元地址形式出现,例如:MOV A,68H这条指令的意义是把内部RAM中的68H单元中的数据内容传送到累加器A中。
值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于内部RAM进行寻址。
低128位单元在指令中直接以单元地址的形式给出。
对于特殊功能寄存器可以使用其直接地址进行访问,还可以以它们的符号形式给出,只是特殊功能寄存器只能用直接寻址方式访问,而无其它方法。
MCS-51汇编指令(111条)数据传送指令(28)一、内部数据传送指令(15条)1、立即寻址型传送指令MOV A, #data ;A←dataMOV Rn, #data ;Rn←dataMOV @Ri, #data ;(Ri)←dataMOV direct, #data ;direct ←data2、直接寻址型传送指令MOV A, direct ;A←(direct)MOV direct, A ;direct←AMOV Rn, direct ;Rn←(direct)MOV @Ri, direct ;(Ri)←(direct)MOV direct2, direct1 ;direct2←(direct1)3、寄存器寻址型传送指令MOV A,Rn;A←RnMOV Rn, A ;Rn←AMOV direct,Rn;direct←Rn4、寄存器间址型传送指令MOV A, @Ri ;A←(Ri)MOV @Ri, A ;(Ri)←AMOV direct, @Ri ;direct←(Ri)二、外部数据传送指令(7条)1、16位数据传送指令MOV DPTR, #data16 ;DPTR←data162、外部ROM的字节传送指令MOVC A, @A+DPTR ;A←(A+DPTR)MOVC A, @A+PC ;PC←PC+1,A←(A+PC)3、外部RAM的字节传送指令MOVX A,@Ri ;A←(Ri)MOVX @Ri,A ;(Ri)←AMOVX A,@DPTR ;A←(DPTR)MOVX @DPTR,A ;(DPTR)←A三、堆栈操作指令(2条)1、压栈指令PUSH direct ;SP←SP+1,(SP)←(direct) 2、弹出指令POP direct ;(SP)→direct, SP-1→ SP四、数据交换指令(4条)XCH A,Rn;A↔RnXCH A, direct;A↔directXCH A, @Ri ;A↔(Ri)XCH A, @Ri;A3~0↔(Ri)3~0一、加法指令(13条)1、不带Cy的加法指令ADD A, Rn ;A←A+RnADD A, direct ;A←A+(direct)ADD A, @Ri ;A←A+(Ri)ADD A, #data ;A←A+data2、带Cy的加法指令ADDC A, Rn ;A←A+Rn+CyADDC A, direct ;A←A+(direct) +CyADDC A, @Ri ;A←A+(Ri) +CyADDC A, #data ;A←A+data+Cy3、加1指令INC A ;A←A+1 (对奇偶校验位P有影响)INC Rn ;Rn←Rn+1INC direct ;direct←(direct)+1INC @Ri ;(Ri) ← (Ri) +1INC DPTR ;DPTR←DPTR+1(唯一的16位运算指令)二、减法指令(8条)1、带Cy的减法指令(4条)SUBB A, Rn ;A←A-Rn-CySUBB A, direct ;A←A-(direct) -CySUBB A, @Ri ;A←A-(Ri) -CySUBB A, #data ;A←A-data-Cy2、减1指令(4条)DEC A ;A←A-1(对奇偶校验位P有影响)DEC Rn ;Rn←Rn-1DEC direct ;direct←(direct)-1DEC @Ri ;(Ri) ← (Ri) -1三、十进制调整指令(1条)DA A ;若AC=1或A3~A0 > 9 ,则A←A+06H ;若Cy=1或A7~A4 > 9 ,则A←A+60H;对进位标志位Cy和AC有影响。
51单片机111条指令一览表指令字节周期动作说明算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INC direct 2 1 将直接地址的内容加116.INC @Ri 1 1 将间接地址的内容加117.INC DPTR 1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC @Ri 1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。
如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。
执行本指令后,进位位(C)及溢出位(OV)被清除为024.DA A 1 1 将累加器A作十进制调整,若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6若(A) 7-4>9或(C)=1,则(A) 7-4←(A)7-4+6逻辑运算指令25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器28.ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器指令字节周期动作说明29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器34.ORL A,#data 2 1 将累加器的值与常数做OR的逻辑判断,结果存回累加器35.ORL direct,A 2 1 将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址36.ORL direct,#data 3 2 将直接地址的内容与常数值做OR的逻辑判断,结果存回该直接地址37.XRL A,Rn 1 1 将累加器的值与Rn寄存器的值做XOR的逻辑判断,结果存回累加器38.XRL A,direct 2 1 将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器39.XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器40.XRL A,#data 2 1 将累加器的值与常数作XOR的逻辑判断,结果存回累加器41.XRL direct,A 2 1 将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址42.XRL direct,#data 3 2 将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址43.CLR A 1 1 清除累加器的值为044.CPL A 1 1 将累加器的值反相45.RL A 1 1 将累加器的值左移一位46.RLC A 1 1 将累加器含进位C左移一位47.RR A 1 1 将累加器的值右移一位48.RRC A 1 1 将累加器含进位C右移一位49.SW AP A 1 1 将累加器的高4位与低4位的内容交换。
(A)3-0←(A)7-4 数据转移指令50.MOV A,Rn 1 1 将寄存器的内容载入累加器51.MOV A,direct 2 1 将直接地址的内容载入累加器52.MOV A,@Ri 1 1 将间接地址的内容载入累加器53.MOV A,#data 2 1 将常数载入累加器54.MOV Rn,A 1 1 将累加器的内容载入寄存器55.MOV Rn,direct 2 2 将直接地址的内容载入寄存器56.MOV Rn,#data 2 1 将常数载入寄存器57.MOV direct,A 2 1 将累加器的内容存入直接地址指令字节周期动作说明58.MOV direct,Rn 2 2 将寄存器的内容存入直接地址59.MOV direct1, direct2 3 2 将直接地址2的内容存入直接地址160.MOV direct,@Ri 2 2 将间接地址的内容存入直接地址61.MOV direct,#data 3 2 将常数存入直接地址62.MOV @Ri,A 1 1 将累加器的内容存入某间接地址63.MOV @Ri,direct 2 2 将直接地址的内容存入某间接地址64.MOV @Ri,#data 2 1 将常数存入某间接地址65.MOV DPTR,#data16 3 2 将16位的常数存入数据指针寄存器66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器68.MOVX A,@Ri 1 2 将间接地址所指定外部存储器的内容读入累加器(8位地址) 69.MOVX A,@DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器(16位地址)70.MOVX @Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器(8位地址)71.MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所指定的外部存储器(16位地址)72.PUSH direct 2 2 将直接地址的内容压入堆栈区73.POP direct 2 2 从堆栈弹出该直接地址的内容74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换75.XCH A,direct 2 1 将累加器的值与直接地址的内容互换76.XCH A,@Ri 1 1 将累加器的值与间接地址的内容互换77.XCHD A,@Ri 1 1 将累加器的低4位与间接地址的低4位互换布尔代数运算78.CLR C 1 1 清除进位C为079.CLR bit 2 1 清除直接地址的某位为080.SETB C 1 1 设定进位C为181.SETB bit 2 1 设定直接地址的某位为182.CPL C 1 1 将进位C的值反相83.CPL bit 2 1 将直接地址的某位值反相84.ANL C,bit 2 2 将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C85.ANL C,/bit 2 2 将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C86.ORL C,bit 2 2 将进位C与直接地址的某位做OR的逻辑判断,结果存回进位C87.ORL C,/bit 2 2 将进位C与直接地址的某位的反相值做OR的逻辑判断,结果存回进位C88.MOV C,bit 2 1 将直接地址的某位值存入进位C89.MOV bit,C 2 2 将进位C的值存入直接地址的某位90.JC rel 2 2 若进位C=1则跳至rel的相关地址91.JNC rel 2 2 若进位C=0则跳至rel的相关地址92.JB bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址93.JNB bit,rel 3 2 若直接地址的某位为0,则跳至rel的相关地址指令字节周期动作说明94.JBC bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0程序跳跃95.ACALL addr11 2 2 调用2K程序存储器范围内的子程序96.LCALL addr16 3 2 调用64K程序存储器范围内的子程序97.RET 1 2 从子程序返回98.RETI 1 2 从中断子程序返回99.AJMP addr11 2 2 绝对跳跃(2K内)100.LJMP addr16 3 2 长跳跃(64K内)101.SJMP rel 2 2 短跳跃(2K内)-128~+127字节102.JMP @A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址103.JZ rel 2 2 累加器的内容为0,则跳至rel所指相关地址104.JNZ rel 2 2 累加器的内容不为0,则跳至rel所指相关地址105.CJNE A,direct,rel 3 2 将累加器的内容与直接地址的内容比较,不相等则跳至rel 所指的相关地址106.CJNE A,#data,rel 3 2 将累加器的内容与常数比较,若不相等则跳至rel所指的相关地址107.CJNE @Rn,#data,rel 3 2 将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址108.CJNE @Ri,#data,rel 3 2 将间接地址的内容与常数比较,若不相等则跳至rel所指的相关地址109.DJNZ Rn,rel 2 2 将寄存器的内容减1,不等于0则跳至rel所指的相关地址,等于0则顺序执行110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址111.NOP 1 1 无动作。