单片机3.5控制转移指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上例中跳转到MAIN时:
(e) = 8000H – 8008H = F8H 跳转到DIR时: (e) = 800FH – 8008H = 07H
4
(-8)
使用以上调用与转移指令注意:
★以上指令均为无条件,执行该类指令时程序计数器PC一定转向 非顺序单元执行。
★调用与返回指令常成对使用,返回指令RET应出现在每一个子 程序的末尾。 ★调用与返回指令都要有栈操作,使用该类指令前要建立堆栈, 以便保护断点。

3
8000
MAIN:
MOV A , #01H
8002
ADD A , #02H

8006 PC 8008 …
SJMP MAIN (DIR) MOV A , @R0
800F
DIR:
MOV A , R2
偏移量rel的计算公式为(e) = 目的地址 – PC当前值,注意用补码 表示。PC当前值为跳转指令下面一条指令的地址,即8008H。

DJNZ
DJNZ
R0 , LOOP ;(R0) – 1结果非0转LOOP标号
30H , SQ ;(30H) – 1结果非0转SQ标号
9
4.以位地址的内容为判断条件的转移指令:
(1) JC rel
(2) JNC rel
;( C ) = 1跳转;( C ) = 0顺序向下执行
;( C ) = 0跳转;( C ) = 1顺序向下执行 ;(bit) = 1跳转;(bit) = 0顺序问下执行 ;(bit) = 0跳转;(bit) = 1顺序问下执行 ; (bit) = 1跳转,且将该位内容清0;
第五节
控制转移指令
这类指令可使程序转向非顺序单元执行,使程序发生分支或循环。
一、无条件转移指令: 1.调用与返回指令: 调用子程序与从子程序返回操作解释: 8000 MOV A , #05H 8250 BBD: ----P71
8002
8004 800A PC
---------ACALL BBD
8252
……..
14
例3 判断20H单元内容中1的个数。
Baidu Nhomakorabea
MOV A,20H MOV R1, #08H ;计数判断8次
MOV R0 ,#00H ;1的个数计数单元清0 LOOP:RLC A
JNC ZERO
INC R0 ZERO:DJNZ STOP:SJMP R1 ,LOOP STOP
15
(A) = 04H顺序执行 如果(A )<04H则C= 1 CJNE @R0 , #05H , DIR ;((R0))≠05H则跳DIR标号 CJNE A , 30H , STOP ;(A)≠(30H)则跳STOP标号
8
3.控制转移指令:
P70
DJNZ
第一操作数 , rel
操作:第一操作数内容减1,结果非0则相对转移,结果为0则 顺序执行。 第一操作数可以是DATA或Rn 。 该指令不影响任何标志位。
★转移指令与调用子程序指令的异同:
相同之处是它们都是改变PC值,使程序转入非顺序单元执行。 不同之处是:调用与返回指令在子程序执行结束后一定返回 原断点地址,因此一定有栈操作。 转移指令转走后不一定回到原断点,因此不必
堆栈保存断点地址。
5
★三种转移指令:
AJMP addr11
LJMP addr16 SJMP rel
例1
判断P1口输入的数据若为负则转DIR,否则转MIN。
MIN : MOV A,P1 RLC A JC DIR SJMP MIN
方法1:8000 E5 90 8002 33 8003 40 e1 8005 80 e2
8007
· 800A DIR:
·
求偏移量:e = 〔目的地址 – 下条指令地址〕补码 e1 = 〔800A H - 8005H〕补码=05H
以累加器A的内容为0或非0为条件判断转移。
JZ rel JNZ rel
P68
;A的内容为0则相对转移,否则顺序执行。 ;A的内容非0则相对转移,否则顺序执行。
rel偏移量的定义同前。 例 MOV A , #56H
SUBB A , R0
JZ 8016H … ;当减法结果为0时跳到8016H地址执行 否则继续往下执行。
方法1: MOV R0 ,#50H
CJNE @R0 ,#0FBH ,S1 AJMP DIR S1: CJNE @R0 ,#0FE ,S2
MIN: MOV A,50H
……….
S2: …………. ……………. DIR: ………
13
方法2:
MOV A, 50H
XRL A, #0FBH
JZ DIR MOV A,50H XRL A,#0FEH JZ MIN
---------
800C 将800C压入堆栈保存 PC修改为BBD的地址
RET 返回操作
从堆栈中弹出断点
1
(1).绝对调用指令 ACALL addr11
调用子程序指令。该指令可改变程序计数器PC的低11位地址, 所调子程序首地址必须在2K页内。
(2).长调用指令 LCALL addr16
调用子程序指令。所调子程序首地址可在64K地址的任何位 置。 (3).从子程序返回指令 RET
(3) JB bit , rel (4) JNB bit , rel (5) JBC bit , rel
(bit) = 0顺序向下执行
三、其它指令 1.RETI 2.NOP 从中断返回指令。后述。 空操作指令。执行该指令CPU不作任何操作,只是
延时一个机器周期的时间。
10
四、控制转移指令综合举例:
e2 = 〔8000H – 8007H〕补码=〔-7〕补码=F9H
11
方法2:
MIN:MOV A,P1
ANL A,#80H JNZ DIR LJMP MIN 方法3: ;切取符号位
MIN: MOV A,P1
JB E7H ,DIR ;A可位寻址,其符号位地址 为E7H AJMP MIN
12
例2.判断50H单元內容若为FBH则转DIR,若为FEH则转MIN。
短跳转
长跳转 相对跳转
地址范围2K字节
地址范围64K字节 地址范围256字节
二字节指令
三字节指令 二字节指令
它们就跳转的操作来说没有任何区别,适用于不同的跳转地址范 围。
6
二、有条件转移指令:
该类指令是当符合某种条件时,程序转移到另一地址执行,不符 合这种条件时,程序按原顺序继续执行。
1.判零相对转移指令:
7
2.比较相对转移指令:
P68
CJNE
(目的字节) , (源字节) , rel
操作:将目的字节内容与源字节内容相比较,若不等则相对转移, 若相等则顺序执行。 若(目的字节)<(源字节)则C = 1,否则C = 0 该指令执行后操作数内容不变。
例 CJNE A , #04H , MAIN ;(A) ≠04H则跳转到MAIN标号
2
2.无条件跳转指令:
P64
(1)绝对跳转指令 AJMP addr11
可使程序在2k页内跳转,即可改变低11位地址。 (2)长跳转指令 LJMP addr16 可使程序跳转到64K程序存储器的任何位置。 (3)相对短跳转指令 SJMP rel
其中rel为偏移量,指令表中用(e)表示。rel的数字指出PC跳转应 从现地址向上或向下跳转多少字节。rel为8位有符号二进制数,它 的范围是-128 ~ +127,用补码表示。rel为负值时表示从大地址向小 地址跳转,为正值时表示从小地址向大地址跳转。
相关文档
最新文档