C51单片机指令系统_第1页
C51单片机指令系统_第2页
C51单片机指令系统_第3页
C51单片机指令系统_第4页
C51单片机指令系统_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C51单片机指令系统从机器语言到汇编指令·全面解析80C51的111条指令Contents课程目录C51单片机指令系统全面解析,从基础概念到编程实践。01指令系统概述与基本概念02七种寻址方式详解03数据传送与算术运算指令04逻辑运算与控制转移指令05位操作指令与编程优化实践Chapter01指令系统概述与基本概念从机器语言到汇编语言,理解指令系统的本质与80C51的111条指令架构INSTRUCTIONSET指令与指令系统的本质指令系统是微处理器的"语言",80C51通过111条汇编指令构建完整的操作能力。理解从机器语言到汇编语言的映射关系,是掌握单片机编程的第一步——操作码决定"做什么",操作数决定"对谁做"。80C51单片机芯片实物01机器语言:以二进制代码描述指令功能,如EBH代表MOVA,R3操作,机器可直接执行但人类难以记忆和编写。02汇编语言:用MOV、ADD等助记符替代二进制操作码,大幅提升可读性,但仍需通过汇编器转换为机器码才能执行。03指令构成:一条完整指令包含操作码字段和操作数字段,基本形式为"操作码+操作数",操作数可以是数据本身或其存放地址。04指令系统:特定微处理器全部指令的集合,80C51拥有111条指令,不同架构的单片机指令系统通常不兼容。InstructionSetArchitecture80C51指令系统的三大特点80C51指令系统以"快、短、强"为核心设计哲学——执行速度快(64条单周期指令)、编码字节少(49条单字节指令)、位操作能力强(17条位操作指令),使其在嵌入式控制领域具有独特优势。执行时间短单机器周期指令64条,占比57.7%,大多数操作可在一个时钟周期内完成,显著提升实时响应能力。双机器周期指令45条,仅乘法和除法需四个机器周期,整体执行效率极高。64单周期指令编码字节少单字节指令49条,操作码与操作数共存于8位二进制中或操作数被隐含,代码密度高。双字节指令45条;三字节指令仅17条,紧凑的指令编码有效节省程序存储空间。49单字节指令位操作丰富17条位操作指令可对片内RAM位地址区和SFR进行置位、清零、取反、传送等操作。特别适合工业控制场景,可精确控制I/O引脚电平状态,实现高效的位级硬件管理。17位操作指令INSTRUCTIONSET指令的字节结构与执行时间80C51指令按字节数分为单字节(49条)、双字节(45条)和三字节(17条)三种格式,按执行时间分为单周期(64条)、双周期(45条)和四周期(2条)。12MHz晶振下,一个机器周期为1μs,绝大多数指令在1-2μs内即可完成。单字节指令如INCA(机器码04H),操作数被隐含为累加器A;MOVA,R3(机器码EBH)中后3位编码指定寄存器49条双字节指令如MOVA,#35H(机器码74H35H),首字节为操作码,第二字节为8位立即数操作数45条三字节指令如LJMP1000H(机器码02H10H00H),首字节为操作码,后两字节组成16位目标地址17条执行时间12MHz晶振下1个机器周期=1μs,单周期指令仅1μs,双周期2μs,四周期(仅MUL/DIV)为4μs1μs/周期C51InstructionSet汇编语句结构与符号约定汇编语句由标号、操作码、目的操作数、源操作数和注释五部分组成,掌握符号约定是读懂指令手册的前提。01语句结构规范完整格式:[标号:]操作助记符目的操作数[,源操作数][;注释],方括号内为可选项标号必须以字母开头,后跟1–8个字母或数字,以冒号结尾,代表该指令在存储器中的首字节地址示例:LOOP:DJNZR7,LOOP

;R7减1不为零则跳转到LOOP处继续循环02核心符号约定Rn:当前寄存器组R0~R7,用于快速访问工作寄存器@Ri:以R0/R1内容为地址的间接寻址,访问片内RAM#data/#data16:8/16位立即数,直接参与运算的常数direct:片内RAM或SFR的8位直接地址,范围00H~FFHrel:带符号8位偏移量(−128~+127),用于相对跳转bit:位地址,支持位寻址区的单独位操作(x):x地址单元中的内容,表示取存储器数据((x)):以x内容为地址的存储单元内容,间接取值/bit:对位操作数取反,实现逻辑非运算CHAPTER02七种寻址方式详解寻址方式决定如何找到操作数——掌握七种寻址方式是编写正确汇编程序的基石寻址方式立即寻址与直接寻址立即寻址将操作数直接编码在指令中(以#为前缀),适合常量赋值;直接寻址通过8位地址直接访问存储单元,可覆盖内部RAM低128字节、位地址空间和SFR。二者是最基础、使用频率最高的寻址方式。立即寻址IMMEDIATE01操作数直接包含在指令代码中,以#号作为前缀标识,支持8位(#data)和16位(#data16)两种宽度02示例:MOVA,#30H将立即数30H装入累加器A;MOVDPTR,#1000H将16位地址装入数据指针03适用场景:常量赋值、初始值设定、地址加载等需要直接使用固定数值的编程场合直接寻址DIRECT01指令中直接给出操作数所在单元的8位地址,CPU根据该地址直接读取或写入对应存储单元02可访问三个区域:内部RAM低128字节(00H~7FH)、位地址空间(20H~2FH的128个位)、特殊功能寄存器SFR03重要限制:SFR只能通过直接寻址方式访问,如MOVA,P1读取P1口状态(P1为SFR的符号地址)C51ADDRESSINGMODES寄存器寻址与寄存器间接寻址寄存器寻址直接操作寄存器内容,速度最快;寄存器间接寻址则以寄存器值为地址访问存储单元。前者"寄存器即操作数",后者"寄存器即地址指针"。寄存器寻址MECHANISM操作数在寄存器中,指令直接指定寄存器名称,CPU直接读取寄存器内容,无需访问存储器REGISTERS可用寄存器:工作寄存器R0~R7、累加器A、寄存器B、数据指针DPTR、进位标志Cy等EXAMPLEMOVA,R0将R0内容送A;ADDA,R1将A与R1内容相加,单周期完成单周期执行寄存器间接寻址MECHANISM寄存器中存放的是操作数的地址而非数据本身,以@为前缀,如@R0、@R1、@DPTR@Ri@Ri(R0/R1)间接访问内部RAM(256B)或外部RAM(256B),如MOVA,@R0按R0指向的地址取数@DPTR@DPTR间接访问外部RAM的64KB空间,如MOVXA,@DPTR从DPTR指向的外部RAM地址读取数据64KB寻址空间寻址方式·ADDRESSINGMODES变址寻址、相对寻址与位寻址变址寻址通过基址+偏移实现ROM查表功能,相对寻址以PC为基准实现程序跳转(-128~+127范围),位寻址直接操作单个二进制位。三种寻址方式分别服务于数据表查询、程序流程控制和精确位操作三大核心场景。变址寻址(基址+变址)以DPTR或PC为基址寄存器、A为变址寄存器,两者相加得到ROM中的实际操作数地址。典型指令MOVCA,@A+DPTR广泛用于查表操作,如字符编码表、波形数据表等ROM常量数据的读取。ROM查表相对寻址以当前PC值加上指令中8位带符号偏移量rel确定跳转目标,跳转范围为-128~+127字节。典型指令SJMPrel用于短距离程序跳转,rel为补码表示的偏移量,正数向高地址跳、负数向低地址跳。程序跳转位寻址直接对单个位地址进行置位(SETB)、清零(CLR)、取反(CPL)等操作,实现对单个二进制位的精确控制。可寻址范围:内部RAM20H~2FH的128个位地址(00H~7FH)以及可位寻址的SFR(如P0~P3、TCON等)。位操作AddressingModes·80C51七种寻址方式全景对照80C51的七种寻址方式覆盖了从常量赋值、寄存器操作到存储器访问、程序跳转、位控制的全部场景。掌握每种方式的可用空间范围和典型指令格式,是编写正确高效汇编程序的前提。80C51七种寻址方式对照表寻址方式核心机制可用存储空间典型指令01立即寻址操作数直接编码在指令中指令代码内(常量)MOVA,#30H02直接寻址指令给出操作数单元地址内部RAM低128B、位地址、SFRMOVA,30H03寄存器寻址操作数在寄存器中R0~R7、A、B、DPTR、CyMOVA,R004寄存器间接寻址寄存器内容为操作数地址内/外部RAM(@Ri),外部64KB(@DPTR)MOVA,@R005变址寻址基址+变址=ROM地址程序存储器ROM(64KB)MOVCA,@A+DPTR06相对寻址PC+偏移量=跳转地址程序存储器(-128~+127B)SJMPrel07位寻址直接操作单个二进制位RAM20H~2FH位区、可位寻址SFRSETBP1.0七种寻址方式各有适用场景,编程时需根据数据类型和存储位置选择正确的寻址方式CHAPTER03数据传送与算术运算指令数据传送是指令系统的'搬运工',算术运算是'计算器'——二者构成程序运行的基本操作能力80C51·数据传送片内数据传送指令(MOV族)MOV是80C51数据传送的核心,本质是"复制"而非"移动"——源操作数不变,目的操作数获得副本。片内MOV指令共16条。以累加器A为目的MOVA,Rn/direct/@Ri/#data四种格式,将寄存器、直接地址、间接地址或立即数数据装入累加器A,是数据进入ALU的主要通道。4FORMATS·MOVA,Rn以直接地址为目的MOVdirect,A/Rn/direct/@Ri/#data五种格式,支持任意片内RAM区域、SFR之间的双向数据传送,灵活性最高。5FORMATS·ALLAREAS以间接地址为目的MOV@Ri,A/direct/#data三种格式,通过R0/R1指针间接写入RAM,配合INC指令可实现数组遍历、缓冲区批量操作。3FORMATS·POINTERI/O以寄存器为目的MOVRn,A/direct/#data三种格式,以及16位传送MOVDPTR,#data16用于设置外部RAM地址指针,支持64KB寻址。3+1·DPTR16-BITC51指令系统·数据传送片外传送、ROM读取与数据交换MOVX指令通过@DPTR或@Ri访问外部RAM(64KB/256B),MOVC指令通过变址寻址读取ROM常量数据,XCH/XCHD/SWAP实现灵活的数据交换。三类指令分别服务于外部存储扩展、常量表查询和数据处理中的位操作需求。片外RAM传送(MOVX)MOVXA,@DPTR/MOVX@DPTR,A—通过16位地址指针读写外部64KBRAM空间,是最常用的外部RAM访问方式MOVXA,@Ri/MOVX@Ri,A—通过8位地址读写外部RAM低256字节,P2口内容作为高8位地址输出64KBROM读取(MOVC)MOVCA,@A+DPTR—以DPTR为基址、A为偏移量读取ROM,查表范围覆盖整个64KB程序存储空间MOVCA,@A+PC—以PC为基址读取ROM,适用于当前位置附近的短表查询,代码位置无关ROM数据交换指令XCHA,Rn/@Ri—A与操作数整体交换内容,共3条指令XCHDA,@Ri—A与@Ri仅交换低4位,高4位各自保持不变SWAPA—累加器A高4位与低4位互换,如35H→53H4bitStackOperations堆栈操作指令(PUSH/POP)80C51堆栈位于内部RAM,由SP指针管理,遵循后进先出原则且向上生长。PUSH/POP指令是保护现场的核心机制——编程时必须保证严格成对使用,避免堆栈错乱。单片机开发实验环境实拍01PUSHdirect:SP先加1指向新栈顶,再将direct单元内容存入栈顶,如PUSHACC将累加器A的内容压栈保护02POPdirect:先将SP指向的栈顶内容取出送入direct单元,SP再减1,如POPACC从栈顶恢复累加器A的值03SP初始设置:复位后SP=07H,实际编程中常将SP重新设置到30H以上区域,避免与工作寄存器区和位寻址区冲突04典型应用:子程序入口连续PUSH保护寄存器,返回前对应POP恢复;中断服务程序中保护断点地址和工作寄存器80C51·指令系统算术运算指令:加法与减法80C51算术运算以累加器A为核心,加法有ADD和ADDC两种,减法只有SUBB一种。多字节运算须利用进位/借位标志串联高低位。DAA专用于BCD码调整。加法指令族不带进位加法,A=A+源操作数,影响Cy、AC、OV、P四个标志位带进位加法,A=A+源操作数+Cy,用于多字节加法的高位运算操作数加1,不影响标志位(INCA除外,影响P),DPTR是唯一可操作的16位寄存器减法指令族带借位减法,A=A−源操作数−Cy,80C51唯一的减法指令做普通减法前须先CLRC清除借位标志;多字节减法中低位SUBB产生的借位自动传递到高位运算操作数减1,不影响标志位,常用于循环计数器递减80C51·指令系统乘除法与辅助运算指令MULAB和DIVAB是80C51仅有的乘除指令(均为四周期),分别以A和B寄存器作为操作数和结果存储。CJNE指令将比较与条件跳转合二为一,DAA专用于BCD码修正——这些辅助指令虽使用频率较低,但在特定场景中不可替代。乘除法与辅助运算指令详表指令功能说明结果存储标志位影响MULABA×B,8位×8位无符号乘法低8位→A,高8位→BOV=1(积>255),Cy=0DIVABA÷B,8位÷8位无符号除法商→A,余数→BOV=1(B=0除零错误),Cy=0CJNEA,#data,rel比较A与立即数,不等则跳转不改变操作数内容A<data时Cy=1,否则Cy=0DAABCD码加法十进制调整调整后的结果存回A影响Cy和P标志MUL/DIV为四周期指令执行较慢,CJNE和DAA在条件判断和BCD运算中发挥关键作用CHAPTER04逻辑运算与控制转移指令逻辑运算处理数据的位级变换,控制转移实现程序的分支与循环——二者赋予程序判断和决策能力80C51InstructionSet逻辑运算指令:与、或、异或ANL(与)、ORL(或)、XRL(异或)是80C51三大基本逻辑运算指令,各有6条变体。通过掩码技术可实现位提取(ANL)、位置位(ORL)和位翻转(XRL)——这是嵌入式编程中处理IO口状态、数据滤波和协议解析的核心技巧。ANL逻辑与ANLA,Rn/direct/@Ri/#data和ANLdirect,A/#data,共6条,对操作数逐位执行与运算位提取:ANLA,#0FH保留低4位;ANLP1,#0F0H屏蔽P1口低4位输出MASK·AND·6VARIANTSORL逻辑或ORLA,Rn/direct/@Ri/#data和ORLdirect,A/#data,共6条,对操作数逐位执行或运算位置位:ORLA,#80H将A最高位置1;ORLP2,#01H将P2.0引脚设为高电平BITSET·OR·6VARIANTSXRL逻辑异或XRLA,Rn/direct/@Ri/#data和XRLdirect,A/#data,共6条,对操作数逐位执行异或运算位翻转:XRLA,#0FFH对A所有位取反;XRLP1,#0FFH翻转P1口全部引脚电平FLIP·XOR·6VARIANTSLogic&ShiftInstructions取反、清零与移位指令CLR/CPL实现累加器的清零和取反,RL/RLC/RR/RRC四种移位指令实现数据的循环移位(带进位或不带进位)。移位指令是软件模拟串行通信协议(SPI/I2C/UART)和多字节数据处理的基础工具。CLRA累加器A全部8位清零(A=00H),仅1条指令,比MOVA,#00H少占一个字节且执行更快。A=00HCPLA累加器A逐位取反(0→1,1→0),如A=55H(01010101)执行后变为AAH(10101010)。55H→AAHRLA/RRA不带进位的循环左移/右移,最高(低)位移入最低(高)位,实现8位数据的循环旋转。8位循环RLCA/RRCA带进位的循环左移/右移,Cy参与9位循环,是多字节移位和串行数据收发的关键指令。9位(Cy)INSTRUCTIONSET控制转移指令:跳转与条件分支80C51提供三种无条件跳转(LJMP64KB/AJMP2KB/SJMP±127B)和多种条件跳转指令。LJMP覆盖全空间但占3字节,SJMP最紧凑但范围受限。DJNZ将递减计数与条件判断合二为一,是实现循环结构的最优选择。无条件跳转LJMPaddr16·长跳转3字节指令,可跳转到64KB程序空间任意地址,适合跨模块大范围跳转AJMPaddr11·绝对跳转2字节指令,目标地址必须在当前2KB页面内,代码密度优于LJMPSJMPrel·短跳转2字节指令,以PC为基准偏移-128~+127字节,最常用于局部代码段跳转条件跳转JZrel/JNZrel累加器A为零/非零时跳转,常用于判断运算结果是否为空或循环终止条件检查DJNZRn/direct,rel操作数减1不为零则跳转,单指令实现递减循环,如DJNZR7,LOOP构成8位计数循环CJNEA,#data/direct,rel比较两个操作数,不相等时跳转并根据大小关系设置Cy标志位TRANSFERCONTROL子程序调用、返回与散转指令LCALL/ACALL将返回地址压栈后跳转到子程序入口,RET/RETI从堆栈弹出地址恢复执行。RETI专用于中断返回并清除优先级锁存,不可与RET混用。LCALLaddr16长调用,将16位返回地址压入堆栈(SP+2),然后PC跳转到64KB内任意子程序入口64KBACALLaddr11短调用,返回地址压栈后跳转到当前2KB页面内的子程序,编码比LCALL少一个字节2KBRET/RETI子程序返回从堆栈弹出2字节地址送入PC;RETI额外清除中断优先级锁存状态InterruptJMP@A+DPTR散转指令,PC=A+DPTR,通过修改A值动态选择跳转入口,适合实现多分支结构Switch-CaseChapter05位操作指令与编程优化实践17条位操作指令赋予80C51精确的位级控制能力——结合编程优化技巧,释放指令系统的全部潜力BITINSTRUCTIONS17条位操作指令全解析80C51的17条位操作指令以进位标志C为中转枢纽,实现位传送、置位/清零、取反和条件跳转四大功能。位寻址空间覆盖RAM20H~2FH的128个位和可位寻址SFR——JBC指令的"跳转并清零"特性在中断标志处理中尤为实用。位传送与置位/清零01MOVC,bit/MOVbit,C—以进位标志Cy为中转,在任意可寻址位与Cy之间传送状态,共2条Cy中转02SETB/CLR—SETB将Cy或指定位设为1;CLR将Cy或指定位清为0,共4条4条指令位取反与位条件跳转03CPLC/CPLbit—对Cy或指定位执行取反操作(0变1,1变0),共2条04JB/JNBbit,rel—位为1则跳转/位为0则跳转,常用于检测IO口状态或标志位,共2条05JBCbit,rel—位为1则跳转并同时将该位清零,非常适合中断标志的"检测+清除"一步完成跳转并清零80C51BITOPERATIONS位操作典型编程模式位操作指令在IO控制、按键检测、状态标志管理和延时程序中展现极高的代码效率——这些编程模式是80C51嵌入式开发的日常必备技能。LED流水灯MOVA,#01H→RLA→MOVP1,A→LCALLDELAY→SJMPRLA·P1按键检测JNBP3.2,KEY_PRESS→JBP3.2,WAITJNB·P3.2软件标志管理SETB00H→JB00H,PROCESS→CLR00HSETB·CLR精确延时R7=200外层→R6=250内层→DJNZ双重循环DJNZ嵌套OPTIMIZATIONSTRATEGIES汇编编程优化策略高效的80C51汇编编程需要在执行速度、代码大小和可读性之间找到平衡。核心优化策略包括:用DJNZ替代DEC+JNZ减少指令周期、用CLR替代MOV清零节省字节、善用查表替代复杂分支判断、优先选择寄存器寻址获得最快执行速度。执行速度优化01优先使用寄存器寻址(单周期)而非直接寻址(双周期),如MOVA,R0比MOVA,00H快一个机器周期02用DJNZ替代DEC+JNZ组合减少一条指令周期,在频繁执行的循环体中效果尤为显著1Cycle代码空间优化01CLRA(1字节)替代MOVA,#00H(2字节),SJMP(2字节)替代LJMP(3字节),累计节省可观的程序空间02用MOVCA,@A+DPTR查表替代大量CJNE条件分支,将N路分支从O(N)代码量压缩为O(1)加表数据O(1)编程模式优化01利用XRLA,A实现快速清零(影响标志位),CPLA替代逐位取反,RLC/RRC实现多字节移位02子程序中合理使用PUSH/POP保护现场,避免寄存器冲突;使用ACALL替代LCALL在2KB范围内节省编码空间2KB80C51Assembly综合实例:数码管动态扫描显示数码管动态扫描程序综合运用查表(MOVC)、数据传送(MOV)、循环控制(DJNZ)和子程序调用(LCALL)等核心指令,是80C51汇编编程能力的综合检验。通过快速轮流点亮各位数码管利用人眼视觉暂留实现多位同时显示效果。七段数码管显示模块实物01段码表准备:在ROM中定义0~9共阴极段码表(3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH),用MOVCA,@A+DPTR查表获取02位选控制:通过P2口输出位选信号,每次仅选中一位数码管,利用视觉暂留效应实现多位同时显示03扫描循环:R2作为位计数器,DJNZR2,SCAN_LOOP控制扫描轮次,每轮更新段码和位选后调用延时子程序04延时配合:LCALLDELAY_MS调用1~5ms延时子程序,保证每位有足够显示时间,过短则亮度不足、过长则闪烁明显InterruptSystem中断系统与指令的配合80C51的5个中断源各有固定入口地址,中断发生时CPU自动保存断点并跳转。中断服务程序必须使用RETI返回,PUSH/POP保护现场是基本规范。80C51中断源入口地址表中断源入口地址触发方式典型应用外部中断0(INT0)0003H边沿/电平触发按键输入、外部事件检测定时器0(T0)000BH定时器溢出精确定时、PWM输出外部中断1(INT1)0013H边沿/电平触发脉冲计数、外部信号同步定时器1(T1)001BH定时器溢出波特率发生器、延时控制串口(UART)0023H收发完成标志串行通信、数据收发处理五个中断源各有固定入口地址,编程时需在入口地址处放置跳转指令引导到实际中断服务程序INSTRUCTIONSETARCHITECTURE111条指令分类统计全景80C51的111条指令按功能分为五大类:数据传送(28条)、算术运算(24条)、逻辑运算与移位(25条)、控制转移(17条)和位操作(17条)。数据传送类占比最大(25%),反映程序运行中数据搬运的高频需求;58%的指令为单周期执行,体现高效设计哲学。按功能分类28条·25%📦数据传送MOV/MOVX/MOVC/XCH/PUSH/POP,覆盖片内RAM、片外扩展RAM及ROM全存储空间的数据交换操作•片内传送:MOV•片外访问:MOVX•查表读取:MOVC24条·22%🔢算术运算ADD/ADDC/SUBB/MUL/DIV/DA,支持8位与16位无符号/有符号运算及十进制BCD码调整功能•加减法:ADD/ADDC/SUBB•乘除法:MUL/DIV•十进制调整:DA25条·23%⚡逻辑与移位ANL/ORL/XRL/RL/RR/RLC/RRC,处理按位逻辑运算、循环移位及带进位标志位的移位操作•逻辑运算:ANL/ORL/XRL•循环左移:RL/RLC•循环右移:RR/RRC17条·15%🔄控制转移LJMP/SJMP/DJNZ/CJNE/LCALL/RET,实现无条件跳转、条件分支、循环计数及子程序调用返回•长跳转:LJMP/AJMP/SJMP•条件转移:DJNZ/CJNE•调用返回:LCALL/ACALL/RET17条·15%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论