1附录5MCS-51指令表MCS-51指令中所用符号和含义Rn——当前工作寄存器组的8个工作寄存器(n=0~7)。Ri——可用于间接寻址的寄存器,只能是当前寄存器组中的2个寄存器R0、R1(i=0,1)。direct——内部RAM中的8位地址(包括内部RAM低128单元地址和专用寄存器单元地址)。#data——8位常数。#data16——16位常数。addr16——16位目的地址,只限于在LCALL和LJMP指令中使用。addr11——11位目的地址,只限于在ACALL和AJMP指令中使用。rel——相对转移指令中的8位带符号偏移量。DPTR——数据指针,16位寄存器,可用作16位地址寻址。SP——堆栈指针,用来保护有用数据。bit——内部RAM或专用寄存器中的直接寻址位。A——累加器。B——专用寄存器,用于乘法和除法指令或暂存器。C——进位标志或进位位,或布尔处理机中的累加器。@——间接寻址寄存器的前缀标志,如@Ri,@DPTR。/——位操作数的前缀,表示对位操作数取反,如/bit。(×)——以×的内容为地址的单元中的内容,X为表示指针的寄存器Ri(i=0、1)、DPTR、SP(Ri、DPTR、SP的内容均为地址)或直接地址单元。如:为了区别地址单元与立即数如30H单元与立即数30H,注释时,表述地址单元时用括号如(30H),立即数直接表示30H。$——表示当前指令的地址。=——表示数据交换。←——箭头左边的内容被箭头右边的内容所代替。2十六进制代码助记符功能对标志位影响字节数周期数POVACCY算术运算指令28~2FADDA,RnA+Rn→A√√√√1125ADDA,directA+(direct)→A√√√√2126,27ADDA,@RiA+(Ri)→A√√√√1124ADDA,#dataA+data→A√√√√2138~3FADDCA,RnA+Rn+CY→A√√√√1135ADDCA,directA+(direct)+CY→A√√√√2136,37ADDCA,@RiA+(Ri)+CY→A√√√√1134ADDCA,#dataA+data+CY→A√√√√2198~9FSUBBA,RnA-Rn-CY→A√√√√1195SUBBA,directA-(direct)-CY→A√√√√2196,97SUBBA,@RiA-(Ri)-CY→A√√√√1194SUBBA,#dataA-data-CY→A√√√√2104INCAA+1→A√XXX1108~0FINCRnRn+1→RnXXXX1105INCdirect(direct)+1→(direct)XXXX2106,07INC@Ri(Ri)+1→(Ri)XXXX11A3INCDPTRDPTR+1→DPTR1214DECAA-1→A√XXX1118~1FDECRnRn-1→RnXXXX1115DECdirect(direct)-1→(direct)XXXX2116,17DEC@Ri(Ri)-1→(Ri)XXXX11A4MULABA*B→BA√√X01484DIVABA/B→A……B√√X014D4DAA对A进行十进制调整√X√√11逻辑运算指令58~5FANLA,RnA∧Rn→A√XXX1155ANLA,directA∧(direct)→A√XXX2156,57ANLA,@RiA∧(Ri)→A√XXX1154ANLA,#dataA∧data→A√XXX2152ANLdirect,A(direct)∧A→(direct)XXXX2153ANLdirect,#data(direct)∧data→(direct)XXXX3248~4FORLA,RnA∨Rn→A√XXX1145ORLA,directA∨(direct)→A√XXX213十六进制代码助记符功能对标志位影响字节数周期数POVACCY46,47ORLA,@RiA∨(Ri)→A√XXX1144ORLA,#dataA∨data→A√XXX2142ORLdirect,A(direct)∨A→(direct)XXXX2143ORLdirect,#data(direct)∨data→(direct)XXXX3268~6FXRLA,RnA⊕Rn→A√XXX1165XRLA,directA⊕(direct)→A√XXX2166,67XRLA,@RiA⊕(Ri)→A√XXX1164XRLA,#dataA⊕data→A√XXX2162XRLdirect,A(direct)⊕A→(direct)XXXX2163XRLdirect,#data(direct)⊕data→(direct)XXXX32E4CLRA0→A√XXX11F4CPLAA→AXXXX1123RLAA循环左移一位XXXX1133RLCAA带进位位循环左移一位√XX√1103RRAA循环右移一位XXXX1113RRCAA带进位位循环右移一位√XX√11C4SWAPAA半字节交换XXXX11数据传送指令E8~EFMOVA,RnRn→A√XXX11E5MOVA,direct(direct)→A√XXX21E6,E7MOVA,@Ri(Ri)→A√XXX1174MOVA,#datadata→A√XXX21F8~FFMOVRn,AA→RnXXXX11A8~AFMOVRn,direct(direct)→RnXXXX2278~7FMOVRn,#datadata→RnXXXX21F5MOVdirect,AA→(direct)XXXX2188~8FMOVdirect,Rndirect→RnXXXX2285MOVdirect1,direct2(direct2)→(direct1)XXXX3286,87MOVdirect,@Ri(Ri)→(direct)XXXX2275MOVdirect,#datadata→(direct)XXXX32F6,F7MOV@Ri,AA→(Ri)XXXX11A6,A7MOV@Ri,direct(direct)→(Ri)XXXX2276,77MOV@Ri,#datadata→(Ri)XXXX2190MOVDPTR,#data16data16→DPTRXXXX3293MOVCA,@A+DPTRA+DPTR→A√XXX1283MOVCA,@A+PCA+PC→A√XXX124十六进制代码助记符功能对标志位影响字节数周期数POVACCYE2,E3MOVXA,@Ri(Ri)→A√XXX12E0MOVXA,@DPTR(DPTR)→A√XXX12F2,F3MOVX@Ri,AA→(Ri)XXXX12F0MOVX@DPTR,AA→(DPTR)XXXX12C0PUSHdirectSP+1→SP(direct)→SPXXXX22D0POPdirectSP→(direct)SP-1→SPXXXX22C8~CFXCHA,RnA=Rn√XXX11C5XCHA,directA=(direct)√XXX21C6,C7XCHA,@RiA=(Ri)√XXX11D6,D7XCHDA,@RiA0~3=(Ri)0~3√XXX11位操作指令C3CLRC0→CYXXX√11C2CLRbit0→bitXXX21D3SETBC1→CYXXX√11D2SETBbit1→bitXXX21B3CPLCCY→CYXXX√11B2CPLbitbit→bitXXX2182ANLC,bitCY∧bit→CYXXX√22B0ANLC,/bitCY∧bit→CYXXX√2272ORLC,bitCY∨bit→CYXXX√22A0ORLC,/bitCY∨bit→CYXXX√22A2MOVC,bitbit→CYXXX√2192MOVbit,CCY→bitXXXX22控制转移指令*1ACALLaddr11PC+2→PC,SP+1→SP(PC)0~7→(SP),SP+1→SP(PC)8~15→(SP)addr11→(PC)10~0XXXX2212LCALLaddr16PC+3→PC,SP+1→SP(PC)0~7→(SP),SP+1→SP(PC)8~15→(SP)addr16→PCXXXX32十六进助记符功能对标志位影响字周5制代码节数期数POVACCY22RETSP→(PC)8~15,SP-1→SPSP→(PC)0~7,SP-1→SPXXXX1232RETISP→(PC)8~15,SP-1→SPSP→(PC)0~7,SP-1→SP中断返回XXXX12*1AJMPaddr11PC+2→PCaddr11→(PC)10~0XXXX2202LJMPaddr16addr16→PCXXXX3280SJMPrelPC+2→PC,rel→PCXXXX2273JMP@A+DPTRA+DPTR→PC√XXX1260JZrelA=0,rel→PCA≠0,PC+2→PCXXXX2270JNZrelA≠0,rel→PCA=0,PC+2→PCXXXX2240JCrelCY=1,rel→PCCY=0,PC+2→PCXXXX2250JNCrelCY=0,rel→PCCY=1,PC+2→PCXXXX2220JBbit,relbit=1,rel→PCbit=0,PC+3→PCXXXX3230JNBbit,relbit=0,rel→PCbit=1,PC+3→PCXXXX3210JBCbit,relbit=1,rel→PC,0→bitbit=0,PC+3→PCXXXX32B5CJNEA,direct,relA≠(direct),rel→PCA=(direct),PC+3→PCXXX√32B4CJNEA,#data,relA≠data,rel→PCA=data,PC+3→PCXXX√32B8~BFCJNERn,#data,relRn≠data,rel→PCRn=data,PC+3→PCXXX√32B6~B7CJNE@Ri,#data,rel(Ri)≠data,rel→PC(Ri)=data,PC+3→PCXXX√32D8~DFDJNZRn,relRn-1≠0,rel→PCRn-1=0,PC+2→PCXXXX22D5DJNZdirect,rel(direct)-1≠0,rel→PC(direct)-1=0,PC+3→PCXXX√3200NOP空操作,PC+1→PCXXXX116附录6AT89系列单片机1.AT89系列单片机简介AT89系列单片机是ATMEL公司的8位Flash单片机系列,这个系列单片机的最大特点是在片内含有Flash存储器。因此,在应用中有着十分广泛的前途,特别是在便携式省电及特殊信息保存的仪器和系统中显得更为有用。AT89系列单片机是以8051核构成的,它和8051系列单片机是兼容的,故而对于熟悉8051的用户来说,用ATMEL公司的89系列单片机进行取代8051的系统设计是轻而易举的事2.89系列单片机的优点1)内部含Flash存储器。在系统的开发过程中可以十分容易进行程序的修改,从而大大缩短了系统的开发周期;能有效地保存一些数据信息,即使外界电源损坏也不会影响到信息的保存。2)89系列单片机的引脚和80C51的引脚相同。当用89系列单片机取代80C51时,不管采用40引脚或是44引脚的产品,只要用相同引脚的89系列单片机取代80C51的单片机即可以直接进行代换。3)静态时钟方式。89系列单片机采用静态时钟方式,节省电能,这对于降低便携式产品的功耗十分有用。4)错误编程亦无废品产生。一般的OTP产品一旦错误编程就成了废品,而89系列单片机内部采用了Flash存储器,所以错误编程之后仍可以重新编程直到正确为止故不存在废品。5)可进行反复系统试验。用89系列单片机设计的系统可以反复进行系统试验,每次试验可以编入不同的程序修改使系统不断能追随用户的最新要求。3.89系列单片机的内部结构89系列单片机的内部结构和80C51相近,主要含有如下一些部件:(1)8031CPU(6)片内RAM(2)振荡电路(7)并行IO接口(3)总线控制部件(8)定时器(4)中断控制部件(9)串行IO接口(5)片内Flash存储器(10)片内EEPROM89系列单片机中AT8