《C51控制转移类指令及位操作指令.ppt》由会员分享,可在线阅读,更多相关《C51控制转移类指令及位操作指令.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 80C51单片机指令系统单片机指令系统本讲教学内容:本讲教学内容:控制转移类指令控制转移类指令控制转移类指令控制转移类指令程序的顺序执行是由程序的顺序执行是由PC自动加自动加1来实现的来实现的,但在,但在应用系统中,往往会遇到一些情况,需要强迫改变程应用系统中,往往会遇到一些情况,需要强迫改变程序执行顺序,比如调用子程序,比如根据检测值与设序执行顺序,比如调用子程序,比如根据检测值与设定值的比较结果要求程序转移到不同的分支入口等。定值的比较结果要求程序转移到不同的分支入口等。要改变程序的执行顺序进行分支转向,应通过强迫修要改变程序的执行顺序进行分支转向,应通过强迫修正正PC值得方
2、法来实现,这就是控制转移类指令的基本值得方法来实现,这就是控制转移类指令的基本功能。功能。80C5设有丰富的控制转移指令,可分为无条件转设有丰富的控制转移指令,可分为无条件转移指令、移指令、条件转移指令条件转移指令、循环转移指令、子程序调用、循环转移指令、子程序调用和返回指令及空操作指令等。和返回指令及空操作指令等。采用助记符有:采用助记符有:AJMP、LJMP、SJMP、JZ、JNZ、CJNE、DJNZ、ACALL、LCALL、RET、RETI、NOP等等1313种。种。条条件件转转移移指指令令仅仅仅仅在在满满足足指指令令中中规规定定的的条条件件(如如累累加加器器内内容容是是否否为为零零,两
3、两个个操操作作数数是是否否相相等等)时时才才执执行行无条件转移,否则程序顺序执行。无条件转移,否则程序顺序执行。6条条指指令令可可分分为为累累加加器器判判零零转转移移指指令令、数数值值比比较较转移指令转移指令和和减减1条件转移指令条件转移指令。条件转移指令条件转移指令累加器判零转移指令累加器判零转移指令JZrel;若;若(A)=0,则,则(PC)=(PC+2)+rel;若;若(A)0,则,则(PC)=(PC)+2JNZrel;若;若(A)0,则,则(PC)=(PC+2)+rel;若;若(A)=0,则,则(PC)=(PC)+2满满足足各各自自条条件件时时,程程序序转转向向指指定定的的目目标标地地
4、址址执执行行(相相当当于于执执行行SJMPrel)。当不满足各自条件时,程序顺序往下执行。当不满足各自条件时,程序顺序往下执行。偏偏移移量量rel是是用用补补码码形形式式表表示示的的带带符符号号的的8位位数数,因因此此程程序序转移的目标地址为指令前转移的目标地址为指令前128B或指令后或指令后127B。这些指令执行后不影响任何操作数和标志位。这些指令执行后不影响任何操作数和标志位。数值比较转移指令数值比较转移指令 CJNEA,direct,relCJNEA,data,relCJNERn,data,relCJNERi,data,rel其指令格式为:其指令格式为:CJNE(操作数(操作数1),(操
5、作数),(操作数2),),rel数数值值比比较较转转移移指指令令是是三三字字节节指指令令,是是80C51单单片片微微机机指指令令系系统统中中仅仅有有的的四四条条三三个个操操作作数数的的指指令令,在在程程序序设设计计中中非非常有用。同时具有比较转移和数值大小比较的功能。常有用。同时具有比较转移和数值大小比较的功能。这组指令的功能是对指定的两操作数进行比较,即这组指令的功能是对指定的两操作数进行比较,即(操作数操作数1)(操作数操作数2),但比较结果均不改变两个操作数,但比较结果均不改变两个操作数的值,仅影响标志位的值,仅影响标志位CY。若不等,程序转移到若不等,程序转移到(PC)十十3加上第三字
6、节带符号加上第三字节带符号的的8位偏移量(位偏移量(rel)所指向的目标地址;所指向的目标地址;若若(操作数操作数1)(操作数操作数2),清进位标志(,清进位标志(CY)。)。若若(操操作作数数1)(操操作作数数2),则则置置位位进进位位标标志志(CY)。)。值相等,程序继续执行。值相等,程序继续执行。程程序序转转移移的的范范围围是是从从(PC)3为为起起始始的的127一一128B的单元地址。的单元地址。比如比如CJNERn,#data,rel指令指令例:温度控制程序例:温度控制程序 某温度控制系统,某温度控制系统,A中存温度采样值中存温度采样值Ta,(20H)=温度下限温度下限值值T20,(
7、30H)=温度上限值温度上限值T30。若。若TaT30,程序转降温,程序转降温JW,若若TaT20,程序转升温,程序转升温SW,若,若T30TaT20程序转程序转FH返回主程返回主程序。序。CJNEA,30H,LOOPAJMPFH;等于;等于T30,转,转FHLOOP:JNCJW;大于;大于T30,降温,降温CJNEA,20H,LOOP1AJMPFH;等于;等于T20,转,转FHLOOP1:JCSW;小于;小于T20,升温,升温FH:-;保温;保温JW:-;降温降温SW:-;升温升温DJNZRn,relDJNZdirect,rel指指令令功功能能是是:每每执执行行一一次次本本指指令令,先先将将
8、指指定定的的Rn或或direct的的内内容容减减1,再再判判别别其其内内容容是是否否为为0。若若不不为为0,转转向向目目标标地地址址,继继续续执执行行循循环环程程序序;若若为为0,则则结结束束循循环程序段,程序往下执行。环程序段,程序往下执行。减减1 1条件转移指令条件转移指令例:某应用系统外扩了例:某应用系统外扩了8K字节字节RAM,要求把内部,要求把内部RAM的的20H2FH单元内容发送到外部单元内容发送到外部RAM的的800H80FH单元中。单元中。执行指令:执行指令:MOVDPTR,#800HMOVR0,#20HMOVR7,#10HAGAIN:MOVA,R0MOVXDPTR,AINCR
9、0INCDPTRDJNZR7,AGAIN?:?:请将以上循环控制改用请将以上循环控制改用CJNE指令来实现指令来实现?:?:请将以上循环控制改用请将以上循环控制改用JZ指令来实现指令来实现请看请看KeilC下演示实例,程序段如下:下演示实例,程序段如下:ORG 0000HLJMP MAINORG 0030HMAIN:MOV A,#01HJZ Lable1DEC AJZ Lable2NOPLable1:NOPLable2:MOV B,#0FFHEND指令指令SJMPrelAJMPaddr11LJMPaddrl6JMPADPTR 这这类类指指令令的的功功能能是是程程序序无无条条件件地地转转移移到到
10、各各自自指指定定的目标地址去执行,不同的指令形成的目标地址不同。的目标地址去执行,不同的指令形成的目标地址不同。无条件转移指令无条件转移指令1.长转移指令长转移指令LJMP addr16该该指指令令提提供供16位位地地址址,目目标标地地址址由由指指令令第第二二字字节节(高高8位位地地址址)和和第第三三字字节节(低低8位位地地址址)组组成成。因因此此,程程序序转转向向的的目目标标地地址址可可以以包包含含程程序序存存储储器器的的整整个个64KB空间。空间。例例:设设(PC)0123H,标标号号ADR所所指指单单元元地地址址为为3456H。执行指令执行指令 LJMPADR执行结果为(执行结果为(PC
11、)3456H程序转向程序转向3456H单元执行。单元执行。绝对转移指令绝对转移指令AJMP addr11该该指指令令提提供供11位位地地址址,目目标标地地址址由由指指令令提提供供的的11位位地地址址去去取取代代当当前前PC的的低低11位位,形形成成新新的的PC值值,即即为为本本绝绝对对转转移移地地址址。因因此此,程程序序的的目目标标地地址址必必须须包包含含AJMP指指令令后后第第一一条条指指令令的的第第一一个个字字节节(即即当当前前PC地址地址)在内的在内的2KB范围内范围内(即高即高5位地址必须相同位地址必须相同)。例:设(例:设(PC)0456H,标号,标号ADR所指的单元为所指的单元为0
12、123H。执行指令执行指令 AJMPADR执行结果程序转向为(执行结果程序转向为(PC)0123H。例:例:0000H2111AJMP0111H;转移有效;转移有效07FEH8110AJMP0C10H;当前;当前PC值为值为0800H;转移有效;转移有效0100HAJMP0B11H;转移无效;转移无效3短转移指令短转移指令:SJMPrel其其目目标标地地址址是是由由当当前前PC(程程序序计计数数器器)值值和和指指令令的的第第二二字字节节提提供供的的8位位带带符符号号的的相相对对地地址址相相加加而而成成的的。指指令令可转向指令前可转向指令前128B或指令后或指令后127B。rel为为8位带符号数
13、。位带符号数。(PC)=(PC)+2+rel例:例:2100H80FEHERE:SJMPHERErel:2100H2102H=FFFEH。高。高8 8位是位是FFH,表示表示负跳负跳,偏移量为偏移量为FEH(2)。这是一条原地踏步指令。这是一条原地踏步指令。可用作程序结束或中断等待。可用作程序结束或中断等待。当相对地址为当相对地址为FEH(-02)FEH(-02)时,时,SJMPSJMP指令实现原地转圈指令实现原地转圈的运行状态。的运行状态。间接转移指令间接转移指令JMPA+DPTR其其目目标标地地址址是是将将累累加加器器A中中的的8位位无无符符号号数数与与数数据据指指针针DPTR的的内内容容
14、相相加加而而得得(在在程程序序运运行行时时动动态态决决定定)。相相加加运运算算不不影影响响累累加加器器A和和数数据据指指针针DPTR的的原原内内容容。若若相相加加的的结结果果大大于于64KB,则则从从程程序序存存储储器器的的零零地地址址往往下下延延续续。当当DPTR的的值值固固定定,而而给给A赋赋以以不不同同的的值值,即即可可实实现现程程序序的的多多分分支支转转移移。如如实实现现键键盘盘译译码码散转功能。散转功能。例:设(例:设(A)5,(,(DPTR)4567H。执行指令为执行指令为JMPADPTR执行结果为执行结果为:(PC)(A)(DPTR)05H4567H456CH程序转向程序转向45
15、6CH单元执行。单元执行。绝对调用指令绝对调用指令ACALLaddr11无条件地调用首址为无条件地调用首址为addr11处的子程序。操作不影响处的子程序。操作不影响标志位标志位。断断点点地地址址自自动动压压栈栈:把把PC加加2以以获获得得下下一一条条指指令令的的地地址址(当当前前PC),将将这这16位位的的地地址址压压进进堆堆栈栈(先先PCL,后后PCH),同同时时栈栈指指针针加加2。然然后后将将指指令令提提供供的的11位位目目标标地地址址,送送入入PC10PC0,而而PC15PC11的的值值不不变变,程程序序转转向向子子程程序序的的首首地地址址开开始始执执行行。目目标标地地址址由由指指令令第
16、第一字节的高三位和指令第二字节所组成;一字节的高三位和指令第二字节所组成;所所调调用用的的子子程程序序的的首首地地址址必必须须与与ACALL后后面面指指令令的的第一个字节在同一个第一个字节在同一个2KB区域内。区域内。3.5.4 子程序调用指令子程序调用与返回指令组子程序调用与返回指令组例例:设设(SP)60H,(PC)0123H,子子 程程 序序SUBRTN的首地址为的首地址为0456H。执行指令为执行指令为ACALLSUBRTN执行结果为(执行结果为(PC)20123H20125H(PC),),将(将(PC)=0125H压入堆栈:压入堆栈:25H压入(压入(SP)161H,01H压入(压入
17、(SP)十)十l62H,此时(,此时(SP)62H。addr11PC100,PC=0456H长调用指令长调用指令LCALLaddr16无无条条件件地地调调用用首首址址为为addr16处处的的子子程程序序。操操作作不不影影响响标标志志位。位。断断点点地地址址自自动动压压栈栈:把把PC加加3以以获获得得下下一一条条指指令令的的地地址址,将将这这16位位的的地地址址压压进进堆堆栈栈(先先PCL,后后PCH),同同时时栈栈指指针针加加2。将将指指令令第第2和和第第3字字节节所所提提供供的的16位位目目标标地地址址,送送PC15PC0,程序转向子程序的首地址开始执行。程序转向子程序的首地址开始执行。所调
18、用的子程序的首地址可以在所调用的子程序的首地址可以在64KB范围内。范围内。例:设(例:设(SP)60H,(,(PC)0123H,子程序,子程序SUBRTN的首地址为的首地址为3456H。执行指令为执行指令为LCALLSUBRTN例:设例:设(SP)62H,RAM中的中的(62H)0lH,(61H)26H。子程序子程序SUBRTN的首地址为的首地址为3456H。执行指令:执行指令:LCALLSUBRTN执行结果:(执行结果:(PC)30123H30126H(PC)。)。将将(PC)压压入入堆堆栈栈:26H压压入入(SP)l61H中中,01H压压入入(SP)1=62H中中,此此时时(SP)62H
19、。(PC)=3456H,执行子程序。执行子程序。3.5.5 返回指令思考思考:AJMPLJMP与与ACALLLCALL的区别?的区别?3.子程序返回指令子程序返回指令RET执执行行时时表表示示结结束束子子程程序序,返返回回调调用用指指令令ACALL或或LCALL的的下下一一条条指指令令(即即断断点点地地址址),继继续续往往下下执执行行。执执行行时时将将栈栈顶顶的的断断点点地地址址送送入入PC(先先PCH,后后PCL),并把栈指针减,并把栈指针减2。3.5.5 返回指令4.中断返回指令中断返回指令RETI它它除除了了执执行行从从中中断断服服务务程程序序返返回回中中断断时时保保护护的的断断点点处处
20、继继续续执执行行程程序序(类类似似RET功功能能)外外,并并清清除除内内部部相相应的中断状态寄存器。应的中断状态寄存器。因此,中断服务程序必须以因此,中断服务程序必须以RETI为结束指令。为结束指令。CPU执执行行RETI指指令令后后至至少少再再执执行行一一条条指指令令,才才能能响响应应新新的的中中断断请请求求。利利用用这这一一特特点点,可可用用来来实实现现单单片片微机的单步操作。微机的单步操作。例例:设设(SP)62H,中中断断时时断断点点是是0123H,RAM中的(中的(62H)0lH,(,(61H)23H。执执行行指指令令RETI结结果果为为:(SP)60H,PC0123H程序回到断点程
21、序回到断点0123H处继续执行。清除内部相处继续执行。清除内部相应的中断状态寄存器。应的中断状态寄存器。例:从引脚输出5个方波MOVR2,#11;5个方波,10个状态LOP:CPLP1.7;状态变反LCALLDelayDJNZR2,LOPHERE:SJMPHEREDelay:MOVR5,#255LOOP2:MOVR4,#255LOOP1:NOPNOPDJNZR4,LOOP1DJNZR5,LOOP2RET第三章第三章 80C51单片机指令系统单片机指令系统本讲教学内容:本讲教学内容:位操作指令位操作指令布尔(位)操作类指令布尔(位)操作类指令80C51内内部部有有一一个个布布尔尔(位位)处处理理
22、器器,具具有有较较强强的布尔变量处理能力。的布尔变量处理能力。布布尔尔处处理理器器实实际际上上是是一一位位的的微微处处理理机机,它它以以进进位位标标志志CY作作为为位位累累加加器器,以以内内部部RAM的的20H至至2FH单单元元及及部部分分特特殊殊功功能能寄寄存存器器为为位位存存储储器器,以以P0、P1、P2、P3为为位位I/O。对对位位地地址址空空间间具具有有丰丰富富的的位位操操作作指指令令,包包括括布布尔尔传传送送指指令令、布布尔尔状状态态控控制制指指令令、位位逻逻辑辑操操作作指指令令及及位位条条件件转转移移指指令令。助助记记符符有有MOV、CLR、CPL、SETB、ANL、ORL、JC、
23、JNC、JB、JNB、JBC等等11种。种。布布尔尔操操作作类类指指令令中中位位地地址址可可用用以以下下多多种种方方式式表表示示,这这些方式均能为些方式均能为80C51的汇编程序所识别:的汇编程序所识别:直接用位地址直接用位地址0255或或0FFH表示;表示;采采用用字字节节地地址址的的位位数数方方式式表表示示,两两者者之之间间用用“”隔隔开开,如:如:20H0;1FH7等等采采用用字字节节寄寄存存器器名名加加位位数数表表示示,两两者者之之间间用用“”隔隔开开,如:如:P15;PSW5等;等;采用位寄存器的定义名称表示,如:采用位寄存器的定义名称表示,如:F0。如如:位地址位地址D5H、F0、
24、D0.5、等表示的是同一位。等表示的是同一位。MOVC,bit;(;(C)(bit)MOVbit,C;(;(bit)(C)功功能能:将将源源操操作作数数(位位地地址址或或布布尔尔累累加加器器)送送到到目目的操作数(布尔累加器或位地址)中去。的操作数(布尔累加器或位地址)中去。布尔传送指令布尔传送指令例:设(例:设(C)=1,执行指令执行指令:MOVP13,C,执行结果为执行结果为P13口线输出口线输出“l”。例:设例:设P1口的内容为口的内容为00111010B,执行指令执行指令:MOVC,P13,执行结果为(执行结果为(C)1。3.6.1 布尔传送指令1位清除(位清除(CLR)指令)指令 C
25、LRC;(;(C)0CLRbit;(;(bit)0功能:将功能:将C或指定位(或指定位(bit)清)清0。例:例:设设P1口的内容为口的内容为11111010B,执行指令为,执行指令为CLRP10后,后,(P1)=11111010B。2位置位置1(SETB)指令指令SETBC;(;(C)lSETBbit;(;(bit)1功能:将功能:将C或指定位(或指定位(bit)置)置1。布尔状态控制指令布尔状态控制指令例:设(例:设(C)0,P3口的内容为口的内容为11111010B。执行指令为执行指令为SETBP30SETBC执执行行结结果果为为(C)1,P301,即即P311111011B。3位取反(
26、位取反(CPL)指令)指令CPLC;(;(C)(C)CPLbit;(;(bit)(bit)功能:将功能:将C或指定位(或指定位(bit)取反。)取反。例:设(例:设(C)0,P1口的内容为口的内容为00111010B。执行指令为执行指令为CPL C 执行结果为(执行结果为(C)=1,P1.0=l,即,即P000111011B。1位逻辑位逻辑“与与”(ANL)操作指令)操作指令ANLC,bit;(;(C)(C)(bit)ANLC,bit;(;(C)(C)(bit)功功能能:将将指指定定位位(bit)的的内内容容或或指指定定位位内内容容取取反反后后(原原内内容不变容不变)与与C的内容进行逻辑与运算
27、,结果仍存于的内容进行逻辑与运算,结果仍存于C中。中。例:设例:设(C)=l,P1口的内容为口的内容为11111011B,(ACC7)0。执行指令为执行指令为ANLC,P1.0;(;(C)1ANLC,ACC.7;(;(C)0执行结果为(执行结果为(C)0。布尔布尔(位位)逻辑操作逻辑操作指令指令1位逻辑位逻辑“与与”(ANL)操作指令)操作指令ANLC,bit;(;(C)(C)(bit)ANLC,bit;(;(C)(C)(bit)功功能能:将将指指定定位位(bit)的的内内容容或或指指定定位位内内容容取取反反后后(原原内内容不变容不变)与与C的内容进行逻辑与运算,结果仍存于的内容进行逻辑与运算
28、,结果仍存于C中。中。例:设例:设(C)=l,P1口的内容为口的内容为11111011B,(ACC7)0。执行指令为执行指令为ANLC,P1.0;(;(C)1ANLC,ACC.7;(;(C)0执行结果为(执行结果为(C)0。布尔布尔(位位)逻辑操作逻辑操作指令指令2位逻辑位逻辑“或或”(ORL)操作指令)操作指令ORL C,bit;(;(C)C)十()十(bit)ORL C,/bit;(;(C)(C)十()十(bit)功功能能:将将指指定定位位(bit)的的内内容容或或指指定定位位内内容容取取反反后后(原原内内容容不不变变)与与C的的内内容容进进行行逻逻辑辑或或运运算算。结结果果仍仍存存于于C
29、中。中。例例:设设(C)1,P1口口的的内内容容为为11111011B,(ACC7)0。执行的指令为执行的指令为ORLC,P1.0;(;(C)=1ORLC,ACC7;(;(C)=1 执行结果为(执行结果为(C)1。l、布尔累加器条件转移指令、布尔累加器条件转移指令JCrelJNCrel功功能能:对对布布尔尔累累加加器器C进进行行检检测测,当当C1或或C0时时,程程序序转转向向当当前前PC值值(转转移移指指令令地地址址+2)与与第第二二字字节节中中带带符符号号的的相相对对地地址址(rel)之之和和的的目目标标地地址址,否否则则程程序序往下顺序执行。因此转移的范围是往下顺序执行。因此转移的范围是1
30、28+127B。布尔(位)条件转移指令布尔(位)条件转移指令例:设(例:设(C)0执行指令:执行指令:JCLABEL1;(C)=0,则则程程序序顺顺序序往往下下执执;行;行CPLC;(C)=1,程序转,程序转LABEL2JCLABEL2;以后,进位位取反变为;以后,进位位取反变为l,程序转向,程序转向LABEL2单元执行。单元执行。例:设(例:设(C)1。执行指令:执行指令:JNCLABEL1CLRCJNCLABEL2;以后,进位位清为;以后,进位位清为0,程序转向,程序转向LABEL2单元执行。单元执行。2位测试条件转移指令位测试条件转移指令 JBbit,relJNBbit,rel功功能能:
31、检检测测指指定定位位,当当位位变变量量分分别别为为1或或0时时,程程序序转转向向当当前前PC值值(转转移移指指令令地地址址+2)与与第第二二字字节节中中带带符符号号的的相相对对地地址址(rel)之之和和的的目目标标地地址址,否否则则程程序序往往下下顺顺序序执执行行。因因此此转转移移的的范范围围是是128127B。操作不影响标志位。操作不影响标志位。例:设累加器例:设累加器 A A中的内容为中的内容为FEH(11111110B)。)。执行指令为执行指令为,LABEL1;ACC.0=0,程序顺序往下执行,程序顺序往下执行JB,LABEL2;ACC.1=1,转,转LABEL2单元执行单元执行例:设累
32、加器例:设累加器A中的内容为中的内容为FEH(11111110B)执行指令执行指令:,LABEL1;ACC.1=1,程程序序顺顺序序往往下下执执行行JNB,LABEL2;ACC.0=0,程程序序转转向向LABEL2 ;单元执行。;单元执行。3位测试条件转移并清位测试条件转移并清0指令指令 JBCrel功功能能:检检测测指指定定位位,当当位位变变量量为为1时时,则则将将该该位位清清0,且且程程序序转转向向当当前前PC值值(转转移移指指令令地地址址+2)与与第第二二字字节节中中带带符符号号的的相相对对地地址址(rel)之之和和的的目目标标地地址址,否否则则程序往下顺序执行。因此转移的范围是程序往下
33、顺序执行。因此转移的范围是128127B。操作不影响标志位。操作不影响标志位。例:设累加器例:设累加器A中的内容为中的内容为7FH(01111111B)。)。执行指令执行指令,LABEL1;ACC.7=0,LABEL2;ACC.6=1,程序转向,程序转向;LABEL2单元执行,单元执行,;并将;并将ACC6位清为位清为0。执行结果执行结果(A)=3FH(00111111B)。)。例例11:散转程序设计,根据:散转程序设计,根据A中的数值实现程序散转中的数值实现程序散转MOVR1,A;(A)3RLAADD A,R1MOVDPTR,#TABLE;散转表首地址送;散转表首地址送DPTRJMP A+DPTRTABLE:LJMPPM0;转程序;转程序PM0TABLE3:LJMPPM1;转程序;转程序PM1-PM0:-PM1:-;LJMP是是一一个个三三字字节节指指令令,因因此此转转移移指指令令入入口口 ;地址相隔;地址相隔3个字节,个字节,A中内容需是中内容需是3的倍数。的倍数。END