1、2023-1-29福州大学物理与信息工程学院1 使使PC不再自动增加,强行改变不再自动增加,强行改变PC的内容,的内容,使程序转移到指定的入口地址继续执行,以使程序转移到指定的入口地址继续执行,以实现分枝循环、子程序调用、中断等功能。实现分枝循环、子程序调用、中断等功能。共共17条。条。分类:分类:无条件转移无条件转移 条件转移条件转移 中断中断2023-1-29福州大学物理与信息工程学院2 长转移指令(长跳转)长转移指令(长跳转)LJMP addr16 ;(PC)addr16 3字节字节 转移范围大,转移范围大,0216,即,即64KROM2023-1-29福州大学物理与信息工程学院3 短转
2、移指令(短跳转、绝对跳转)短转移指令(短跳转、绝对跳转)AJMP addr11 将当前将当前PC值的高值的高5位和位和add11相连相连 PC=PC1511a10a9a8a7a6a5a4a3a2a1a0即将即将add11写入写入PC的第的第010位,位,PC的的1115位不变。位不变。2023-1-29福州大学物理与信息工程学院4 Addr11代表的范围是代表的范围是202112K 64K的的ROM分为分为32页,每页页,每页2K,范围分别是,范围分别是 0000H07FFH、0800H0FFFH、1000H17FFH、F000HF7FFH、F800HFFFFH AJMP转移范围就是转移范围就
3、是PC当前值所在的当前值所在的2K字节页面内,字节页面内,超出该寻址范围就出错。超出该寻址范围就出错。用于不太长的程序用于不太长的程序 该指令为该指令为2字节字节2023-1-29福州大学物理与信息工程学院5 例:例:机器码机器码 汇编语言汇编语言 07FEH AJMP K11;0800H .0E00H K11:.0F80H K12:.0FFEH AJMP K12 1000H .(PC)=(PC)+2=0800H错误错误(PC)=(PC)+2=1000H K12不在不在1000H17FFH同一页内同一页内2023-1-29福州大学物理与信息工程学院6 相对转移指令相对转移指令 SJMP rel
4、;PC(PC)+2,PC(PC)+rel 转移范围是当前转移范围是当前PC值值128127范围内范围内2023-1-29福州大学物理与信息工程学院7例:例:0100H80relSJMPAAA0102H00NOP0123H00AAA:NOPrel是一字节的偏移量,编程时通常用目标地址标是一字节的偏移量,编程时通常用目标地址标号代替,如本例中号代替,如本例中AAA,汇编时才计算出偏移量,汇编时才计算出偏移量rel,计算方法计算方法是:是:rel=目标地址目标地址-(本指令地址(本指令地址+02H)=0123H-(0100H+02H)=21H2023-1-29福州大学物理与信息工程学院8 注:注:编
5、程时,可用标号代替转移目的地址编程时,可用标号代替转移目的地址 AJMP NEXTSJMP NEXTLJMP NEXT 原地踏步指令原地踏步指令 HERE:SJMP HERE 常写成:常写成:SJMP$2023-1-29福州大学物理与信息工程学院9 散转指令:散转指令:JMP A+DPTR(PC)(A)()(DPTR)若若DPTR值固定,改变值固定,改变A的内容,即可形成多个的内容,即可形成多个分枝。分枝。2023-1-29福州大学物理与信息工程学院10例:例:(A)=0 转到转到 PRG0,(A)=1 转到转到 PRG1,.(A)=7 转到转到 PRG7 MOV DPTR,#TABEL RL
6、 A JMP A+DPTRTABEL:AJMP PRG0 AJMP PRG1 .AJMP PRG72023-1-29福州大学物理与信息工程学院11功能:功能:本质上也是无条件转移指令。本质上也是无条件转移指令。使用:使用:子程序调用子程序调用-程序中反复多次执行的程序中反复多次执行的某一段程序。某一段程序。2023-1-29福州大学物理与信息工程学院12 长调用指令长调用指令LCALL addr16 断点断点PC值进栈保存,调用值进栈保存,调用addr16地址的子地址的子程序。程序。(PC)(PC)+3,(SP)(SP)+1,(SP)(PC70)(SP)(SP)+1,(SP)(PC158)(P
7、C)addr162023-1-29福州大学物理与信息工程学院13例:例:(SP)=60H,标号STRT值为2100H,标号DIR值为8100H。STRT:LCALL DIR或 STRT:LCALL 2100H 结果:(SP)=62H;(61H)=03H;(62H)=21H;(PC)=8100H2023-1-29福州大学物理与信息工程学院14短调用指令短调用指令ACALL addr11(PC)(PC)+2,(SP)(SP)+1,(SP)(PC70)(SP)(SP)+1,(SP)(PC158)(PC)addr11目的地址与当前目的地址与当前PC值必须位于值必须位于2K范围的同一范围的同一页面内页面
8、内2023-1-29福州大学物理与信息工程学院15 编程时,可用标号代替转移目的地址,编程时,可用标号代替转移目的地址,addr11,addr16 交给编译程序计算交给编译程序计算 如:如:LCALL DIR;ACALL DIR2023-1-29福州大学物理与信息工程学院16 子程序返回指令子程序返回指令RET 从堆栈中自动取出断点地址送给从堆栈中自动取出断点地址送给PC,使程序在主程序断点处继续执行。使程序在主程序断点处继续执行。(PC158)(SP);(SP)(SP)1(PC70)(SP);(SP)(SP)1 子程序末尾必须是一条返回指令子程序末尾必须是一条返回指令2023-1-29福州大
9、学物理与信息工程学院17 例:例:(SP)=62H,(62H)=07H;(61H)=30HRET 则则:(SP)=60H;(PC)=0730H2023-1-29福州大学物理与信息工程学院18 中断返回指令中断返回指令RETI 用于中断服务程序末尾用于中断服务程序末尾 除执行除执行RET指令的操作外,还清除中断响应指令的操作外,还清除中断响应时被置位的优先级状态,开放较低级中断和时被置位的优先级状态,开放较低级中断和恢复中断逻辑等功能。恢复中断逻辑等功能。2023-1-29福州大学物理与信息工程学院19 条件转移指令是指当满足某种条件时程序才转移,条件转移指令是指当满足某种条件时程序才转移,而条
10、件不满足时程序继续执行下一条指令。条件而条件不满足时程序继续执行下一条指令。条件主要指主要指PSW中的标志。中的标志。注注:对对PSW的按位操作也将影响相应的标志位。的按位操作也将影响相应的标志位。任何一条改变累加器任何一条改变累加器A的内容的指令都将影响的内容的指令都将影响P标志。标志。8051单片机隐含一个零标志位单片机隐含一个零标志位(Z),当,当(A)=0时,时,Z置置“1”。2023-1-29福州大学物理与信息工程学院20 A判零转移指令判零转移指令 JZ rel;(A)=0时转移,(PC)(PC)+2+rel否则程序顺序执行(PC)(PC)+2 JNZ rel;(A)=1时转移,(
11、PC)(PC)+2+rel否则程序顺序执行(PC)(PC)+22023-1-29福州大学物理与信息工程学院21例例1、将外、将外RAM的一个数据块(首地址为的一个数据块(首地址为DATA1)传送到内部数据传送到内部数据RAM(首地址为(首地址为DATA2),遇到),遇到传送的数据为零时停止传送,试编程。传送的数据为零时停止传送,试编程。解:解:MOV R0,#DATA2 MOV DPTR,#DATA1 MOVX A,DPTR JZ LOOP2 MOV R0,A INC R0 INC DPTR SJMP LOOP1LOOP2:SJMP LOOP2LOOP1:2023-1-29福州大学物理与信息工
12、程学院22 比较转移指令:比较转移指令:比较指令中两个操作数的值是否相等,若值比较指令中两个操作数的值是否相等,若值不等,则转移;若相等则顺序执行。不等,则转移;若相等则顺序执行。同时影响同时影响CY标志位,若第一操作数标志位,若第一操作数右操作数,则转移右操作数,则转移(PC)(PC)+3+rel,同时,同时(CY)=0 若左操作数若左操作数右操作数,则转移右操作数,则转移(PC)(PC)+3+rel,同时,同时(CY)=1 也用于数值比较,以也用于数值比较,以CY状态判断数值大小。状态判断数值大小。CJNE 操作数操作数1,操作数操作数2,转移地址标号转移地址标号2023-1-29福州大学
13、物理与信息工程学院25例如例如:CJNEA,30H,NOTEQ;3分支转移分支转移MOVA,R0;(A)(30H)AJMPWORKNOTEQ:JCLITTER;(A)(30H),转MOVA,R1ACALLSUBLITTER:XXXXWORK:2023-1-29福州大学物理与信息工程学院26 减减1非零转移指令非零转移指令DJNZ Rn,rel ;(Rn)(Rn)1,若(Rn)0则转移,(PC)(PC)+2+rel;若(Rn)0则顺序执行(PC)(PC)+2DJNZ direct,rel ;(direct)(direct)1,若(direct)0则转移,(PC)(PC)+2+rel;若(dire
14、ct)0则顺序执行(PC)(PC)+22023-1-29福州大学物理与信息工程学院27 主要用于控制程序循环,先把主要用于控制程序循环,先把Rn或或direct赋值循环次数,利用减赋值循环次数,利用减1条件转条件转移指令,以减移指令,以减1后是否为后是否为0作为转移条作为转移条件,即可实现按次数控制循环。件,即可实现按次数控制循环。2023-1-29福州大学物理与信息工程学院28例:例:延时延时50ms程序程序 DELY:MOV R7,#200 MOV R6,#125 DEL2:DJNZ R6,DEL2;125*2=250us DJNZ R7,DEL1;0.25ms*20050ms RET 使
15、用使用12MHz晶振时,一个机器周期为晶振时,一个机器周期为1us,执行执行DJNZ指令为指令为2us,加其他指令的时间,加其他指令的时间 (25012)*200150.301ms 使用例:使用例:ACALL DELY 或或 LCALL DELY DEL1:2023-1-29福州大学物理与信息工程学院29JC rel ;(Cy)=1则转移,(PC)(PC)+2+rel 否则,程序继续执行,(PC)(PC)+2JNC rel ;(Cy)=0则转移,(PC)(PC)+2+rel 否则,程序继续执行,(PC)(PC)+2 布尔累加器布尔累加器(进位位进位位)判位转移。判位转移。2023-1-29福州
16、大学物理与信息工程学院30 例例:比较内部比较内部RAM的的30H和和40H单元中的二个无符单元中的二个无符号数的大小,将大数存入号数的大小,将大数存入20H单元,小数存入单元,小数存入21H单单元,若二数相等,则使内元,若二数相等,则使内RAM的第的第127位置位置1。解:解:MOV A,30H CJNE A,40H,LOOP1 SETB 7FH SJMP$LOOP1:JC LOOP2 MOV 20H,A MOV 21H,40H SJMP$LOOP2:MOV 20H,40H MOV 21H,A SJMP$2023-1-29福州大学物理与信息工程学院31JB bit,rel ;(bit)=1则
17、转移,(PC)(PC)+3+rel 否则,程序继续执行,(PC)(PC)+3JNB bit,rel;(bit)=0则转移,(PC)(PC)+3+rel 否则,程序继续执行,(PC)(PC)+3JBC bit,rel;(bit)=1则转移,(PC)(PC)+3+rel,且且(bit)=0 否则,程序继续执行,(PC)(PC)+3 普通数据位判位转移普通数据位判位转移2023-1-29福州大学物理与信息工程学院32 试判断试判断A中的正负,若为正数,存入中的正负,若为正数,存入20H单元;单元;若为负数则存入若为负数则存入21H单元。单元。解:解:JB ACC.7,LOOP MOV 20H,A SJMP$LOOP:MOV 21H,A SJMP$2023-1-29福州大学物理与信息工程学院33NOP 1字节,单周期字节,单周期 该指令仅使该指令仅使(PC)+1然后继续执行下一条然后继续执行下一条指令,无任何操作。指令,无任何操作。常用于延时或程序中作为时间常用于延时或程序中作为时间“微调微调”