当前位置:文档之家› 单片机89c51指令及操作汇总

单片机89c51指令及操作汇总

数据传送指令以累加器A为目的操作数的指令:MOV A,Rn (Rn)→AMOV A,direct (direct)→A MOV A,@Ri (Ri)→AMOV A,#data (#data)→A以寄存器Rn为目的操作数的指令:MOV Rn,A (A)→Rn MOV Rn,direct (direct)→Rn MOV Rn,#data (#data)→Rn 以直接地址为目的操作数的指令:MOV direct,A (A)→direct MOV direct,Rn (Rn)→direct MOV direct,direct(direct)→direct MOV direct,@Ri (Ri)→direct MOV direct,#data(#data)→direct 以间接地址为目的操作数的指令:MOV @Ri,A (A)→RiMOV @Ri,direct (direct)→Ri MOV @Ri,#data (data)→Ri16位数据传送指令:MOV DPTR,#data16dataH→DPH,dataL→DPL 查表指令:MOVC A,@A+DPTR 先pc+1→pc,后A+DPTR→A,一字节MOVC A,@A+PC 先pc+1→pc,后A+PC →A,一字节累加器A与片外RAM传送指令:MOVX A,@Ri Ri→A,且使=0MOVX A,@DPTR DPTR→A, 且使=0 MOVX @Ri,A A→Ri, 且使=0MOVX @DPTR,A A→DPTR,且使=0栈操作指令:入栈 PUSH direct 先SP+1→SP,后direct→SP出栈 POP direct先SP→direct,后SP-1→SP交换指令:1)字节交换指令XCH A,Rn A←→RnXCH A,direct .XCH A,@Ri .2)低半字节交换指令XCHD A,@Ri A0~3←→Ri0~33)累加器A中高4位和低4位交换SWAP A A0~3←→A4~7算术运算指令加法类指令ADD A ,# data A ←(A)+data ADD A ,directA ←(A)+(direct)ADD A ,Rn A ←(A)+(Rn)ADD A ,@Ri A ←(A)+((Ri))带进位加法指令ADDC A ,# dataA ←(A)+ data +(CY)ADDC A ,directA ←(A)+(direct)+(CY)ADDC A ,RnA ←(A)+(Rn)+(CY)ADDC A ,@RiA ←(A)+((Ri))+(CY)带借位减法指令SUBB A ,# dataA ←(A) - data -(CY)SUBB A ,directA ←(A) -(direct)-(CY)SUBB A ,RnA ←(A) –(Rn)-(CY)SUBB A ,@RiA ←(A) -((Ri))-(CY)乘法指令MUL AB BA←(A)×(B)除法指令DIV AB A←(A)÷(B)之商,B←(A)÷(B)之余数加1指令INC A A ←(A)+ 1 INC directdirect ←(direct)+ 1 INC Rn Rn ←(Rn)+ 1 INC @Ri Ri ←((Ri))+ 1 INC DPTR DPTR ←(DPTR)+ 1 减1指令DEC A A ←(A)-1DEC direct direct ←(direct)-1 DEC Rn Rn ←(Rn)-1DEC @Ri Ri ←((Ri))-1十进制调整指令DA A 调整累加器内容为BCD数逻辑操作指令累加器清零指令:CLR A A ←0 累加器按位取反指令:CPL A循环左移 RL A循环右移 RR A带进位循环左移 RLC A带进位循环右移 RRC A逻辑与运算指令ANL A ,#data A ←(A)∧data ANL A ,directA ←(A)∧(direct) ANL A ,Rn A ←(A)∧(Rn)ANL A ,@Ri A ←(A)∧((Ri)) ANL direct ,Adirect ←(direct)∧(A) ANL direct ,#datadirect ←(direct)∧data逻辑或运算指令ORL A ,#data A ←(A)∨data ORL A ,directA ←(A) ∨(direct) ORL A ,Rn A ←(A) ∨(Rn) ORL A ,@Ri A ←(A) ∨((Ri))ORL direct ,Adirect ←(direct) ∨(A) ORL direct ,#datadirect ←(direct) ∨data逻辑异或运算指令XRL A ,#data A ←(A)dataXRL A ,direct A ←(A) ( direct) XRL A ,Rn A ←(A) (Rn) XRL A ,@Ri A ←(A) ((Ri))XRL direct ,Adirect ←(direct) (A) XRL direct ,#datadirect ←(direct) data控制转移类指令长转移指令 LJMP addr16PC ← addr16 短转移指令AJMP addr11;PC←(PC)+2,PC10~0←addr11,PC15~11不变相对转移指令SJMP rel ;PC ←(PC) + 2,PC ←(PC) + rel间接转移指令JMP @A+DPTR ; PC ←(A)+(DPTR)空操作指令NOP PC+1→PC判零转移指令JZ rel;PC+2→PC当A全为0时,PC=PC+rel,当A不为全0时,程序顺序执行。

JNZ relPC+2→PC当A不全为0时, PC+rel→PC,当A为全0时,程序顺序执行。

比较条件转移指令CJNE A ,# data ,relPC+3→PC;若# data <A,则PC+rel→PC,且0→CY;若# data >A,则PC+rel→PC,且1→CY;若# data =A,则顺序执行,且0→CY。

CJNE A ,direct ,relPC+3→PC;若direct<A,则PC+rel→PC,且0→CY;若direct>A,则PC+rel→PC,且1→CY;若direct=A,则顺序执行,且0→CY。

CJNE Rn ,#data ,relPC+3→PC;若#data < Rn,则PC+rel→PC,且0→CY;若#data > Rn,则PC+rel→PC,且1→CY;若#data = Rn,则顺序执行,且0→CY。

CJNE @Ri ,# data ,relPC+3→PC;若# data < Ri,则PC+rel→PC,且0→CY;若# data > Ri,则PC+rel→PC,且1→CY;若# data = Ri,则顺序执行,且0→CY。

循环转移指令DJNZ Rn ,relPC+2→PC,Rn-1→Rn;当Rn≠0时,则PC+rel→PC;当Rn=0时,则结束循环,程序往下执行。

DJNZ direct ,relPC+3→PC, direct -1→direct;当direct≠0时,则PC+rel→PC;当direct =0时,则结束循环,程序往下执行。

长调用指令LCALL addr16PC+3→PCSP+1→SPPC7~0→SPSP+1→SPPC15~8→SPaddr15~0→PC返回指令RET SP→PC15~8,弹出断点高8位SP-1→SPSP→PC7~0,弹出断点低8位SP-1→SPRETI SP→PC15~8,,SP-1→SPSP→PC7~0,SP-1→SP位操作类指令1、位数据传送指令MOV C , bit CY←(bit)MOV bit , C bit←(CY)2、位修正指令1)位请0指令CLR C CY← 0CLR bit bit ← 02)位置1指令SETB C CY← 1SETB bit bit ← 13)位取反指令CPL C C←CPL bit bit ←位逻辑“与”运算指令(斜杠“/”表示将该位值取出后,先求反、再参加运算,不改变位地址中原来的值。

)ANL C ,bit CY←(CY)∧(bit)ANL C ,/bit CY←(CY)∧()位逻辑“或”运算指令ORL C ,bit CY←(CY)∨(bit)ORL C ,/bit CY←(CY)∨()判布尔累加器C转移指令JC relPC+2→PC;若C=1,则PC+rel→PC;若C=0,则顺序往下执行。

JNC relPC+2→PC;若C=0,则PC+rel→PC;若C=1,则顺序往下执行。

判位变量转移指令JB bit ,relPC+3→PC;若bit =1,则PC+rel→PC;若bit =0,则顺序往下执行。

JNB bit ,relPC+3→PC;若bit =0,则PC+rel→PC;若bit =1,则顺序往下执行。

JBC bit ,relPC+3→PC;若bit =1,则PC+rel→PC,0→bit若bit =0,则顺序往下执行。

相关主题