C51控制转移类指令及位操作指令_第1页
C51控制转移类指令及位操作指令_第2页
C51控制转移类指令及位操作指令_第3页
C51控制转移类指令及位操作指令_第4页
C51控制转移类指令及位操作指令_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

C51控制转移类指令及位操作指令80C51单片机指令系统深度解析Contents课程目录C51控制转移类指令及位操作指令——从指令系统概览到编程实战的完整学习路径。0180C51指令系统概览与定位02控制转移类指令详解03子程序调用与返回机制04布尔变量位操作指令05指令综合应用与编程实战CHAPTER0180C51指令系统概览与定位从五大类指令体系出发,理解控制转移与位操作指令的核心地位INSTRUCTIONSET80C51指令系统五大分类体系80C51单片机共111条指令,按功能划分为数据传送、算术运算、逻辑运算、控制转移和位操作五大类。其中控制转移类指令(17条)和位操作类指令(17条)合计占比超过30%,是实现程序流程控制和精细化数据处理的核心工具集。PART01数据处理三件套数据传送MOV、PUSH、POP等,实现寄存器、RAM、SFR之间的数据搬运28条算术运算ADD、SUBB、MUL、DIV等,完成加减乘除及BCD码调整运算24条逻辑运算ANL、ORL、XRL、CLR、RL等,实现位级逻辑操作与数据变换25条PART02流程控制双核心控制转移LJMP、SJMP、JZ、CJNE、ACALL、RET等,改变PC值以控制程序走向17条位操作MOVC,bit、SETB、CLR、JC、JB等,以位为单位进行传送、修改和条件判断17条CONTROLTRANSFER控制转移指令的核心原理控制转移指令通过修改程序计数器PC的值来改变程序执行顺序,是实现分支、循环、子程序调用等程序结构的基础。理解PC的工作机制是掌握所有转移指令的前提。01PC自动递增机制:PC(程序计数器)指向下一条待执行指令的地址,正常顺序执行时PC自动递增,每取一条指令PC加对应字节数。02跳转执行原理:控制转移指令在执行时将目的地址装入PC,使CPU跳转到新地址取指令执行,从而打破线性顺序执行模式。03地址生成方式:转移地址的生成方式有三种——直接给出绝对地址(addr16/addr11)、给出相对偏移量(rel)、通过寄存器间接计算(@A+DPTR)。04标志位保护:控制转移类指令一般不影响PSW中的标志位(除CJNE影响CY、部分位转移指令检测标志外),保证转移操作不干扰运算状态。80C51单片机·DIP封装实物80C51·CONTROLTRANSFER三种转移地址形成方式对比80C51控制转移指令采用绝对寻址、相对寻址和间接寻址三种地址生成方式,分别对应不同的跳转范围和应用场景。绝对寻址指令直接提供目标地址,LJMP给出16位地址(64KB全空间),AJMP给出11位地址(2KB范围)目标地址=指令中直接给出的地址值,编译时即确定,跳转范围与当前PC位置无关适用于需要跳转到固定地址的场合,如中断向量表、系统初始化入口等64KB全空间相对寻址指令给出8位有符号补码偏移量rel,目标地址=(PC)+rel,rel范围-128~+127支持双向跳转(正数向高地址、负数向低地址),代码可重定位,适合条件分支和短循环广泛应用于条件判断、循环控制等场景,是程序结构化的基础指令±128双向跳转间接寻址JMP@A+DPTR指令将A与DPTR无符号相加作为新PC值,实现64KB范围内动态跳转A的值在运行时可变,因此可实现散转(多分支跳转),常用于switch-case型程序结构特别适合键盘扫描、菜单选择、状态机等多分支决策场景A+DPTR动态散转CHAPTER02控制转移类指令详解从无条件转移到条件转移,系统掌握16条程序流向控制指令C51·CONTROLTRANSFERLJMP长转移指令LJMP是80C51中跳转范围最大的无条件转移指令,可覆盖64KB全地址空间。其三字节结构直接携带16位绝对地址,常用于系统复位入口跳转和远距离程序分支。01指令格式:LJMPaddr16,三字节指令,2个机器周期,第二三字节分别为目标地址的高8位和低8位02执行过程:addr16的高8位→PCH,低8位→PCL,PC被完整替换为新地址,程序无条件跳转执行03跳转范围:64KB程序存储器全地址空间(0000H~FFFFH),不受当前PC位置限制04典型应用:系统复位向量0000H处放置LJMPMAIN,将程序引导到主函数入口地址开始执行LJMP指令参数一览参数项具体值说明指令字节数3操作码1字节+addr16高8位1字节+addr16低8位1字节机器周期数2取指和执行共需2个机器周期跳转范围64KB0000H~FFFFH全地址空间对标志位影响无不影响PSW中任何标志位LJMP是跳转能力最强的无条件转移指令,适用于任意地址的远距离跳转ControlTransfer·AbsoluteJumpAJMP绝对转移指令AJMP通过11位地址与PC高5位拼接实现2KB页面内的绝对跳转,比LJMP节省一个字节。其跳转范围受限于当前2KB页面边界,理解地址拼接机制是正确使用AJMP的关键。目标地址24-bit高5位PC+2[15:11]‖低11位addr11[10:0]01指令格式双字节指令,2个机器周期,编码中仅包含目标地址的低11位。2B·2T02地址拼接目标地址=(PC+2)高5位‖addr11,高位取自当前PC。PC+2‖addr1103跳转范围仅限当前PC所在2KB页面内,如0000H–07FFH,跨页面将出错。2KBPage04与LJMP对比节省1字节存储空间,范围从64KB缩减到2KB,适合中短距离跳转。−1B/2KBSHORTJUMP·RELATIVETRANSFERSJMP相对转移指令SJMP使用8位有符号补码偏移量实现-128~+127字节范围的双向相对跳转,其代码可重定位特性使其成为条件分支和短距离跳转的首选指令。指令格式双字节指令,2个机器周期,rel为8位有符号补码SJMPrel地址计算基准为SJMP后的PC值,即指令地址加2再叠加偏移量(PC)+2+rel双向跳转正数向高地址前向跳转,负数向低地址后向跳转±127B可重定位相对偏移使代码移动后跳转关系自动保持正确模块化ControlTransferJMP@A+DPTR散转指令JMP@A+DPTR是80C51中唯一的间接转移指令,通过运行时动态计算目标地址实现多分支散转,是构建跳转表(JumpTable)和实现switch-case结构的核心指令。指令格式单字节指令,2个机器周期,目标地址=(A)+(DPTR)的无符号16位相加结果。2周期动态计算特性A的值在运行时可变,同一条指令能跳转到不同地址,实现一入口多分支的散转结构。运行时跳转表实现ROM中建立入口地址表,DPTR指向表首地址,A中存放偏移量,按索引直接跳转到目标处理程序。ROM表典型应用场景菜单选择、命令解析、状态机切换等需要多路分支的场合,比逐条比较判断效率更高。多路分支UNCONDITIONALJUMP·控制转移四条无条件转移指令综合对比80C51的四条无条件转移指令在字节数、跳转范围、寻址方式上各有特点,选择时应综合考虑跳转距离、存储空间和是否需要动态计算等因素。无条件转移指令参数对比表指令字节数机器周期跳转范围寻址方式LJMPaddr163264KB绝对寻址(16位地址)AJMPaddr11222KB绝对寻址(11位+PC高5位)SJMPrel22-128~+127B相对寻址(8位有符号偏移)JMP@A+DPTR1264KB间接寻址(A+DPTR动态计算)四条指令覆盖从2KB到64KB的不同跳转需求,选择时需权衡跳转范围、代码大小和动态性ConditionJumpJZ/JNZ判零条件转移指令JZ和JNZ通过检测累加器A是否为零来决定程序走向,是最基础的条件判断指令。二者配合使用可实现循环控制、数据有效性检测等核心逻辑结构。JZrel双字节指令,占用2个机器周期。当累加器A的内容为00H时,程序跳转到(PC)+2+rel的目标地址;若A不为零,则顺序执行下一条指令。常用于循环结束判断。A=0→JumpJNZrel双字节指令,占用2个机器周期。当累加器A的内容不为00H时发生跳转,否则顺序执行后续指令。与JZ指令形成互补的条件判断对,实现双向分支控制。A≠0→Jump累加器判断判断对象是累加器A的8位内容,而非PSW状态寄存器中的标志位。执行判零指令前,必须确保待检测的数据已通过传送指令送入累加器A中,这是指令正确工作的前提。ACCCheck典型应用广泛应用于循环计数器判零退出、数据缓冲区空满检测、算术运算结果为零的分支处理、字符串结束符判断等场景,是汇编程序流程控制的核心基础指令。控制流构建CONDITIONALBRANCHCJNE比较不相等转移指令CJNE是80C51中功能最丰富的条件转移指令,同时完成数值比较、条件跳转和CY标志设置三项操作,是实现大小判断和多路分支的核心工具。操作数组合四种形式:A↔#data、A↔direct、Rn↔#data、@Ri↔#data执行逻辑不等→跳转(PC)+3+rel;相等→顺序执行下一条CY设置规则第一操作数<第二操作数→CY=1;≥时→CY=0(无符号比较)三态分支CJNE+JC/JNC实现:等于(未跳转)、大于(CY=0)、小于(CY=1)BRANCHINGFLOWCJNEOp1,Op2,rel比较两操作数Op1=Op2?YES顺序执行CY不变等于NO跳转(PC)+3+relCY按比较结果置位CY=0大于CY=1小于CONTROLTRANSFER·控制转移DJNZ减1非零转移指令DJNZ将减法计数与条件跳转合二为一,是80C51实现循环结构最高效的指令。通过预设循环计数初值,每次自动减1并判零,为零时自然退出循环。01两种操作数形式DJNZRn,rel(寄存器减1)和DJNZdirect,rel(直接地址单元减1),均为双字节或三字节指令。两种形式分别针对工作寄存器和片内RAM任意单元,灵活适应不同数据存储需求。2/3字节指令02执行过程操作数减1并回存→判断结果是否为0→不为0跳转至(PC)+rel处继续循环,为0则顺序执行退出。单条指令完成计数更新与分支判断,无需额外比较指令。减1→判零→跳转03循环计数注意事项若初值为00H,减1后变为FFH(255),将循环255次而非0次,使用前需确保初值有效。程序员应特别注意无符号字节运算的溢出特性,避免逻辑错误。00H→FFH=255次04典型循环模式先给Rn或直接地址赋循环次数初值→循环体→DJNZ跳回循环体入口,构成紧凑的计数循环结构。该模式代码密度高、执行速度快,是延时程序与数据处理的常用框架。赋初值→循环体→跳回C51ControlTransferCJNE实现三路分支判断程序设计通过CJNE指令的'比较+跳转+设置CY'三重功能,配合JC/JNC指令,可以用最少的指令实现等于、大于、小于三路分支判断,是80C51分支程序设计的经典模式。程序流程设计Step01CJNEA,#data,NOT_EQ——若A等于data则顺序执行(等于分支),不等则跳转并设置CYStep02JCLESS——CY=1说明A<data(小于分支),CY=0则继续执行(大于分支)Step03三个分支分别以EQUAL、LESS、GREATER标签标记,各自执行对应处理逻辑后用LJMP汇合实际应用场景温度控制系统根据采集温度与设定阈值的比较结果,分别执行加热、制冷或保持三种控制策略通信协议解析将接收到的命令码与预定义值逐一比较,根据匹配结果分发到对应的命令处理子程序CHAPTER03子程序调用与返回机制理解ACALL/LCALL调用过程与RET/RETI返回机制中堆栈的关键作用C51控制转移类指令LCALL/ACALL子程序调用指令LCALL和ACALL通过将断点地址压栈保存后跳转到子程序入口,实现了程序的分层调用结构。LCALL覆盖64KB全空间,ACALL限于2KB页面内,调用过程中堆栈指针SP自动加2。LCALL长调用指令01指令格式:LCALLaddr16,三字节指令,2个机器周期,可调用64KB空间内任意地址的子程序02调用过程:(PC)←(PC)+3得到断点→SP加1后PCL压栈→SP再加1后PCH压栈→addr16装入PC跳转执行64KBACALL绝对调用指令01指令格式:ACALLaddr11,双字节指令,2个机器周期,只能在当前2KB页面内调用子程序02地址拼接:子程序地址=(PC+2)的高5位||addr11,压栈过程与LCALL相同,SP同样加22KBCONTROLTRANSFER·RETURNRET/RETI子程序返回指令RET通过从堆栈弹出断点地址恢复程序执行,RETI在此基础上额外清除中断优先级触发器。中断服务程序必须使用RETI返回,否则将导致同级和低优先级中断被永久屏蔽。指令对比RETRET返回指令PCH←(SP)→SP−1→PCL←(SP)→SP−1,断点地址从堆栈弹出恢复至PC,程序回到调用点继续执行适用于普通子程序的返回,不修改任何标志位和中断系统状态RETIRETI中断返回指令在RET弹栈恢复PC的基础上,额外清除内部中断优先级状态触发器,开放同级和低优先级中断响应中断服务程序若误用RET返回,优先级触发器不清除,同级和低优先级中断将被永久阻塞Stack&Nesting堆栈机制与子程序嵌套调用80C51堆栈向上生长(SP递增),严格遵循LIFO原则保存断点地址。嵌套调用时每层调用压入2字节断点,返回时逐层弹出,SP管理不当将导致程序跑飞。堆栈增长方向80C51堆栈向高地址方向生长,压栈时SP先加1再存数据,弹栈时先取数据再SP减1SP+1→StoreSP初始化系统复位后SP=07H,通常用MOVSP,#30H等指令将SP设到安全区域,避免覆盖工作寄存器MOVSP,#30H嵌套调用过程每层调用压入2字节断点(PCL+PCH),多层嵌套时堆栈依次保存各层返回地址,RET逐层弹出恢复PCL+PCH/2Bytes堆栈安全嵌套深度受堆栈空间限制,不正确的PUSH/POP操作可能破坏断点数据,导致RET返回到错误地址使程序跑飞LIFO/RETLCALL/RETStackTrace子程序调用与返回完整执行实例通过一个LCALL调用实例,可以清晰观察断点地址压栈、SP变化、PC跳转以及RET返回时的弹栈恢复全过程,是理解堆栈运作的最佳教学案例。LCALL0200H执行过程堆栈变化追踪执行步骤SP值堆栈内容PC值初始状态(SP=07H)07H堆栈为空0100H计算断点PC+307H堆栈为空0103HSP+1,PCL(03H)压栈08H(08H)=03H0103HSP+1,PCH(01H)压栈09H(09H)=01H,(08H)=03H0103Haddr16装入PC09H堆栈不变0200H子程序执行RET09H开始弹栈0200HPCH←(SP)=01H,SP-108H(09H)已读出01??HPCL←(SP)=03H,SP-107H堆栈恢复空0103HLCALL调用时断点0103H被完整压栈保存,RET返回时按相反顺序弹出恢复,SP回到初始值CHAPTER04布尔变量位操作指令掌握80C51独特的位处理能力,实现精细化的开关量控制与状态管理位处理指令80C51位处理系统架构基础80C51拥有独立的布尔处理子系统,以位累加器C(即CY标志位)为核心,配合128位RAM位地址空间和可位寻址SFR,形成完整的位级数据处理能力,共17条专用指令。位累加器与位地址空间位累加器C即PSW中的CY位,在位操作中承担数据中转站角色,类似字节操作中累加器A的核心地位。所有位运算指令默认以C为操作数之一,结果也存回C。位寻址区包含RAM20H~2FH(位地址00H~7FH共128位)和可位寻址SFR(位地址80H~F7H)两个独立区域,支持直接位寻址操作。17条专用位指令涵盖置位、清零、取反、传送、逻辑运算及位条件跳转,实现高效的位级控制与状态判断。位地址与字节地址的关系两套独立编号体系:位地址与字节地址分别编址。20H字节的D0位对应位地址00H,D7位为07H;21H字节D0位为08H,依此类推至2FH。SFR位地址规则:如P0端口字节地址80H,其P0.0~P0.7的位地址为80H~87H;PSW字节地址D0H,CY位地址为D7H。指令区分方式:位操作指令以位地址(如00H、D7H)为目标,字节操作指令以字节地址(如20H、D0H)为目标,汇编器自动识别。BITTRANSFERINSTRUCTIONS位传送指令MOVC,bit/MOVbit,C位传送指令实现位累加器C与位地址之间的双向数据传输,是位操作的基础。80C51不支持位到位的直接传送,所有位间数据交换必须通过C中转完成。01MOVC,bit双字节指令,占用1个机器周期。将指定位地址中的布尔值读入位累加器C,执行后源位内容保持不变,不影响其他标志位。1CYCLE02MOVbit,C双字节指令,占用2个机器周期。将位累加器C中的布尔值写入指定位地址,执行后C的内容不变,常用于输出控制。2CYCLES03必须经C中转80C51架构不支持位到位的直接传送(如MOVP1.0,P3.2为非法指令),任意两位之间的数据交换必须通过C累加器中转完成。P3.2→C→P1.004典型应用读取外部引脚电平状态到C进行条件判断、将运算结果输出到端口位控制外设、实现位变量在程序中的赋值和传递操作。引脚·外设·传递BITOPERATION位置位与清零指令SETB/CLRSETB和CLR指令提供对单个位的直接置1和清0能力,是I/O控制、标志位管理和状态初始化的基础工具。四条指令覆盖对C和对任意bit的操作。位置位/清零指令参数一览指令字节数机器周期功能说明CLRC11将位累加器C清零(C←0)CLRbit21将指定位地址清零(bit←0)SETBC11将位累加器C置位(C←1)SETBbit21将指定位地址置位(bit←1)四条指令分别对C和bit进行置1和清0操作,均不影响其他标志位BITOPERATIONS位取反与位逻辑运算指令位取反指令CPL实现单位的0/1翻转,位逻辑指令ANL/ORL在位累加器C与位地址之间执行与/或运算。组合使用可实现任意布尔逻辑表达式,直接驱动硬件控制逻辑。位取反指令CPLCPLC单字节·1周期位累加器C取反,0→1或1→0;CPLbit双字节·1周期指定位地址内容取反典型应用:LED闪烁控制(CPLP1.0翻转引脚电平)、信号极性反转、标志位状态切换CPL位逻辑与/或指令ANLC,bit/ANLC,/bit:C与bit(或bit取反值)逻辑与,结果存回C,bit本身不被修改ORLC,bit/ORLC,/bit:C与bit(或bit取反值)逻辑或,结果存回C,可组合实现复杂布尔表达式ANL·ORLBitConditionalBranch位条件转移指令JC/JNC/JB/JNB/JBC位条件转移指令以C或位地址的状态作为跳转条件,实现位级的程序流程控制。其中JBC的"跳转并清零"功能可一步完成事件标志的检测与清除,是高效事件驱动编程的关键。基于位累加器C的转移JCrel当C=1时跳转,常配合CJNE使用,根据CY标志判断两操作数的大小关系实现分支JNCrel当C=0时跳转,与JC互为反向条件,用于无借位/无进位的分支判断应用场景数值比较后的分支处理、多字节运算的进位链控制、状态机条件转移基于位地址bit的转移JB/JNBJB:(bit)=1时跳转;JNB:(bit)=0时跳转,常用于检测引脚电平或标志位状态JBCbit,rel(bit)=1时跳转并同时清零,适合事件标志的"检测-处理-清除"一步完成关键优势直接访问位寻址区,无需字节操作;JBC原子操作避免中断干扰80C51INSTRUCTIONSET·BOOLEANPROCESSING17条位操作指令全景汇总80C51的17条位操作指令覆盖传送、修改、运算、转移四大功能类别,以位累加器C为核心枢纽,配合独立的位地址空间,构成完整的布尔处理子系统。位操作指令分类汇总表类别指令功能2条位传送MOVC,bit/MOVbit,CC与位地址之间双向传送布尔值4条位置位/清零CLRC/CLRbit/SETBC/SETBbit对C或位地址执行清0或置1操作2条位取反CPLC/CPLbit对C或位地址的值执行逻辑取反4条位逻辑运算ANLC,bit/ANLC,/bit/ORLC,bit/ORLC,/bitC与位地址(或其反值)执行与/或运算5条位条件转移JC/JNC/JB/JNB/JBC根据C或bit状态决定跳转,JBC同时清零17条指令覆盖位操作的全部需求,以C为枢纽实现位级数据的传送、修改、运算和流程控制17条指令CHAPTER05指令综合应用与编程实战通过延时程序、I/O控制和状态机设计实例,融会贯通控制转移与位操作指令DelayProgrammingDJNZ实现多层嵌套软件延时程序利用DJNZ指令构建多层嵌套循环可实现精确的软件延时,延时时间由循环层数和计数初值决定。延时程序设计原理单层DJNZRn,$最大循环256次,每次2个机器周期,12MHz下最大延时约512μs多层嵌套:外层每执行一次,内层完整执行一轮,总延时≈各层计数值之积×单次周期时间延时计算与调参方法12MHz晶振下机器周期=1μs,延时=Σ(各层循环次数×周期数),调整R5/R6/R7初值匹配目标延时软件延时精度受中断打断、指令执行偏差等影响,高精度场景建议使用硬件定时器中断替代FormulaTdelay=Σ(Ni×Cyclesi×Tmachine)KeyParameter12MHz→TMC=1μs,Maxsingle≈512μsI/OPORTCONTROL位操作指令实现I/O端口流水灯控制通过SETB/CLR位操作指令可精确控制单个I/O引脚的电平状态,配合DJNZ延时循环和SJMP无限循环,可实现流水灯、呼吸灯等经典I/O控制效果。整体移位法A←#0FEH→MOVP1,A→延时→RLA→SJMP循环,每次左移一位实现灯光流动效果RLA位操作法依次CLRP1.0→延时→SETBP1.0→CLRP1.1→延时→SETBP1.1,逐位控制各引脚电平SETB/CLR位操作优势SETB/CLR只改变目标位,不影响同一端口其他引脚状态,适合多外设共享同一端口的场景独立控制延时配合每个LED状态切换之间插入DJNZ多层嵌套延时子程序,控制灯光流动速度到人眼可辨识范围DJNZKEYDETECTION&DEBOUNCE条件转移与位操作实现按键检测与消抖按键检测程序是JB/JNB位条件转移指令与位操作指令的经典组合应用,通过"检测→消抖→确认→等待释放"四步流程,可靠地识别按键动作并消除机械抖动干扰。01·检测引脚扫描JBP3.2,LOOPJBP3.2,LOOP持续扫描引脚,高电平循环等待,低电平进入下一步P3.2=002·消抖延时消除调用延时子程序消除机械抖动,避免电平毛刺导致误触发10ms03·确认二次验证JBP3.2再次JBP3.2确认仍为低电平,判定为有效按键并执行处理程序有效触发04·释放等待复位JNBP3.2,$JNBP3.2,$循环等待引脚恢复高电平,确保单次触发1:1STATEMACHINE·控制转移JMP@A+DPTR散转指令实现状态机架构利用JMP@A+DPTR散转指令配合ROM跳转表,可高效实现多状态机的状态分发,每个状态对应独立的处理程序。该架构结构清晰、扩展方便,是嵌入式系统程序设计的经典模式。01跳转表设计在RO

温馨提示

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

评论

0/150

提交评论