3.5-3.6 逻辑运算类指令、控制转移类指令(课件)-《单片机技术与应用》(高教版第二版) 同步精品课堂
|
26页
|
99人阅读
|
1人下载
精品
内容正文:
单片机技术与应用
-第14课时-
高教版第二版
逻辑运算类指令、控制转移类指令
教学目标
了解逻辑运算类指令和控制转移类指令的数量、分类和主要功能
掌握各类逻辑运算指令和控制转移指令的格式、操作功能、字节数和机器周期数
理解逻辑运算指令和控制转移指令对标志位的影响
教学重难点
各类逻辑运算指令和控制转移指令的功能和使用方法
理解控制转移指令中目标地址的计算和转移范围
正确运用子程序调用与返回指令实现程序的模块化设计
让我们一起开启单片机的学习之旅。
导入新课
在单片机编程中,逻辑运算和程序流程控制是非常重要的部分。
MCS - 51 系列单片机有哪些逻辑运算类指令和控制转移类指令呢?
它们各自的功能和特点是什么?
如何运用这些指令实现复杂的程序逻辑?
让我们一起开启单片机的学习之旅。
新知讲授
概述
逻辑运算类指令共 24 条,包括 20 条逻辑指令(与、或、异或、累加器 A 清 0 和求反等)和 4 条移位指令。
特点
累加器 A 清 0 和取反、移位指令是针对累加器 A 的单操作数指令。
与、或、异或操作指令寻址方式组合部分与加、减法指令相同。
这类指令不影响 PSW 算术标志位,只有带进位循环移位指令影响 CY,所有逻辑运算按位进行。
逻辑运算类指令
逻辑运算类指令
新知讲授
逻辑与指令
逻辑运算类指令
逻辑运算类指令
指令助记符 操作功能 字节数 机器周期数
ANL A,#data A←(A) ∧ data 2 1
ANL A,Rn A←(A) ∧ (Rn) 1 1
ANL A,@Ri A←(A) ∧ ((Ri)) 1 1
ANL A,direct A←(A) ∧ (direct) 2 1
ANL direct,A direct←(direct) ∧ (A) 2 1
ANL direct,#data direct←(direct) ∧ data 3 2
例3 - 16:(A)=07H,(R0)=0FDH,
执行指令 ANL A,R0,
执行结果为:(A)=05H。
新知讲授
逻辑或指令
逻辑运算类指令
逻辑运算类指令
指令助记符 操作功能 字节数 机器周期数
ORL A,#data A←(A) ∨ data 2 1
ORL A,Rn A←(A) ∨ (Rn) 1 1
ORL A,@Ri A←(A) ∨ ((Ri)) 1 1
ORL A,direct A←(A) ∨ (direct) 2 1
ORL direct,A direct←(direct) ∨ (A) 2 1
ORL direct,#data direct←(direct) ∨ data 3 2
例3 - 17:(P1)=05H,(A)=33H,
执行指令 ORL P1,A,
执行结果为:(P1)=37H。
新知讲授
逻辑异或指令
逻辑运算类指令
逻辑运算类指令
指令助记符 操作功能 字节数 机器周期数
XRL A,#data A←(A) ⊕ data 2 1
XRL A,Rn A←(A) ⊕ (Rn) 1 1
XRL A,@Ri A←(A) ⊕ ((Ri)) 1 1
XRL A,direct A←(A) ⊕ (direct) 2 1
XRL direct,A direct←(direct) ⊕ (A) 2 1
XRL direct,#data direct←(direct) ⊕ data 3 2
例 3 - 18:(A)=90H,(R3)=73H,
执行指令 XRL A,R3,
执行结果为:(A)=0E3H。
新知讲授
逻辑异或指令
逻辑运算类指令
逻辑运算类指令
指令助记符 操作功能 字节数 机器周期数
XRL A,#data A←(A) ⊕ data 2 1
XRL A,Rn A←(A) ⊕ (Rn) 1 1
XRL A,@Ri A←(A) ⊕ ((Ri)) 1 1
XRL A,direct A←(A) ⊕ (direct) 2 1
XRL direct,A direct←(direct) ⊕ (A) 2 1
XRL direct,#data direct←(direct) ⊕ data 3 2
例 3 - 18:(A)=90H,(R3)=73H,
执行指令 XRL A,R3,
执行结果为:(A)=0E3H。
新知讲授
逻辑异或指令 - 应用
例 3 - 19:若 (A)=B5H = 10110101B
逻辑异或指令可使字节中某些位取反,其他位保持不变,也可对某单元自身异或实现清 0 操作。
逻辑运算类指令
XRL A,#0FOH ;A 的高 4 位取反,低 4 位保留,(A)=01000101B = 45H
MOV 30H,A ;(30H)=45H
XRL A,30H ;自身异或使 A 清 0
新知讲授
移位指令
逻辑运算类指令
控制转移位指令
指令助记符 操作功能 字节数 机器周期数
RL A 1 1
RR A 1 1
RLC A 1 1
RRC A 1 1
累加器 A 清 0 和取反指令
CLR A:功能是累加器 A 清 0,不影响 CY、AC、OV 等标志。
CPL A:功能是将累加器 A 的内容按位逻辑取反,不影响标志。
新知讲授
移位指令- 应用
例 3 - 20:设 (A)=5AH,且 CY = 0
移位指令可实现算术运算,左移 1 位相当于原内容乘以 2,右移 1 位相当于原内容除以 2(商为非整数时向下取整)。
移位指令
执行指令 RL A 后,(A)=0B4H。
执行指令 RR A 后,(A)=2DH。
执行指令 RLC A 后,(A)=0B4H。
执行指令 RRC A 后,(A)=2DH。
新知讲授
控制转移类指令概述
控制转移类指令共 17 条,可分为无条件转移指令、条件转移指令、子程序调用及返回指令。能实现程序向前、向后转移,根据条件分支、循环运行及调用子程序。
无条件转移指令
逻辑运算类指令
控制转移类指令
指令助记符 操作功能 字节数 机器周期数
LJMP addr16 PC←addr16 3 2
AJMP addr11 PC10~0←addr11,PC15~11 不变 2 2
SJMP rel PC←(PC)+2 + rel 2 2
JMP @A+DPTR PC←(A)+(DPTR) 1 2
新知讲授
无条件转移指令 - 长转移指令 LJMP addr16
该指令把 16 位目标地址装入 PC,不影响标志位,可使程序在 64KB 程序存储器地址空间任意转移,但执行时间长、字节多。汇编语言中 addr16 通常是标号。
无条件转移指令 - 绝对转移指令 AJMP addr11
逻辑运算类指令
控制转移类指令
程序转移目的地址由 AJMP 指令所在地址 PC 值加 2 构成当前 PC 值,当前 PC 值高 5 位与指令中 11 位直接地址形成转移目的地址,可在 2KB 范围内转移。汇编语言中 addr11 通常是标号。
例3 - 21:若 AJMP 指令地址 (PC)=2300H,执行指令 AJMP 0FFH 后,转移目的地址 (PC)=20FFH。
例3 - 22:若 AJMP 指令地址 (PC)=2FFFH,执行指令 AJMP OFFH 后,转移目的地址 (PC)=30FFH。
MOV DPTR,#TABLE
JMP @A+DPTR
TABLE:AJMP TAB1
AJMP TAB2
AJMP TAB3
新知讲授
无条件转移指令 - 短转移指令 SJMP rel
SJMP 指令操作数 rel 用 8 位带符号数补码表示,转移范围是相对 PC 当前值向前 128 字节,向后 127 字节,即转移目的地址 = SJMP 指令所在地址 + 2 + rel。汇编语言中 rel 通常是标号。若程序末尾加 SJMP $,则程序进入无限循环。
无条件转移指令 - 间接转移指令 JMP @A+DPTR
逻辑运算类指令
控制转移类指令
该指令以 DPTR 内容为基址,累加器 A 内容为相对偏移量,在 64KB 范围内无条件转移,可实现多分支转移,又称散转指令。
例 3 - 23:根据累加器A的值,转移不同处理程序的入口
MOV DPTR,#TABLE
JMP @A+DPTR
TABLE:AJMP TAB1
AJMP TAB2
AJMP TAB3
当(A)=0 时转 TAB1 执行,(A)=2 时转 TAB2 执行,(A)=4 时转 TAB3 执行,A 的值必须是偶数。
新知讲授
控制转移类指令——条件转移类指令
指令名称 指令助记符 操作功能 字节数 机器周期数
判断累加器是否为零转移指令
JZ rel 若 (A)=0,则 PC←PC + 2 + rel;若 (A)≠0,则顺序执行 2 2
JNZ rel 若 (A)≠0,则 PC←PC + 2 + rel;若 (A)=0,则顺序执行 2 2
比较转移指令
CJNE A,#data,rel 若 (A)≠data,则 PC←PC + 3 + rel;若 (A)=data,则 PC←PC + 3 3 2
CJNE A,direct,rel 若 (A)≠(direct),则 PC←PC + 3 + rel;若 (A)=(direct),则 PC←PC + 3 3 2
CJNE @Ri,#data,rel 若 ((Ri))≠data,则 PC←PC + 3 + rel;若 ((Ri))=data,则 PC←PC + 3 3 2
CJNE Rn,#data,rel 若 (Rn)≠data,则 PC←PC + 3 + rel;若 (Rn)=data,则 PC←PC + 3 3 2
减 1 条件转移指令
DJNZ direct,rel 若 (direct)-1≠0,则 PC←PC + 3 + rel;若 (direct)-1=0,则 PC←PC + 3 3 2
DJNZ Rn,rel 若 (Rn)-1≠0,则 PC←PC + 2 + rel;若 (Rn)-1=0,则 PC←PC + 2 2 2
新知讲授
判断累加器是否为 0 转移指令
例 3 - 24:编写程序:两个数相加,若和不等于0则和取反,若和为0则将20H单元清0
控制转移类指令——条件转移类指令
ADD A,R0
JNZ LOOP
MOV 20H,A
LOOP:CPL A
判断累加器是否为0转移指令是以累加器A 的内容是否为0作为转移的条件,累加 器A为0,则转移,累加器A不为0,则顺序执行。执行这条指令不作任何运算,也不影 响标志位。
新知讲授
比较转移指令
例 3 - 25:编写程序:当从P1 口输人数据为08H 时,程序继续执行,否则等待,直到P1 口出现08H。参考程序如下:
控制转移类指令——条件转移类指令
MOV A,#08H
WAIT: CJNE A,P1,WAIT
比较转移指令是先对两个规定的操作数进行比较,根据比较的结果来决定是否转移。若两 个操作数相等,则不转移,程序顺序执行;若两个操作数不等,则转移。比较是做一次减法运 算,但其差值不保存,两个数的原值不受影响,而标志位要受到影响。
新知讲授
减1条件转移指令
例 3 - 26:编写程序:将内部RAM从 DATA 单元开始的10个无符号数相加,相加结果送 SUM单元保存(设相加结果不超过8位二进制数)。参考程序如下:
控制转移类指令——条件转移类指令
MOV R0,#0AH ;设置循环次数
MOV R1,#DATA ;R1 作地址指针,指向数据块首地址
CLR A ;A 清 0
LOOP: ADD A,@R1 ;加一个数
INC R1 ;修改指针,指向下一个数
DJNZ R0,LOOP ;R0 减 1,不为 0 循环
MOV SUM,A ;存 10 个数相加的和
减1条件转移指令又称减1不为0转移指令,该指令是把源操作数减1,结果送回到源操 作数中去,并判断结果是否为0,若不为0则转移到目标地址,继续执行循环程序;若为0则 终止循环程序的执行。
新知讲授
(1)子程序调用指令
② 绝对调用指令ACALL addr11
它的操作功能为:PC←(PC)+2,SP←(SP)+1,(SP)←(PC)7~0,SP←(SP)+1, (SP)←(PC)15~8,(PC)10~0←addr11。
子程序调用与返回指令
子程序调用指令有长调用和绝对调用两条,它们都是双周期指令。
① 长调用指令LCALL addr16
它的操作功能为:PC←(PC)+3,SP←(SP)+1,(SP)←(PC)7~0,SP←(SP)+1, (SP)←(PC)15~8,PC←-addr16。
新知讲授
(2)返回指令
子程序调用与返回指令
返回指令共两条:一条是对应两条调用指令的子程序返回指令RET, 另一条是对应从中断服务程序的返回指令RETI。
① 子程序返回指令RET, 功能为(PC)15~8—((SP)),SP←(SP-1),(PC)7~0← ((SP)),SP←(SP-1)。
② 中断服务程序的返回指令RETI, 功 能 为(PC)15~8←((SP)),SP←-(SP-1),(PC)7~0←((SP)),SP←(SP-1)。
共同点:从堆栈中弹出返回地址送PC, 堆栈指针减2.
不同点:
① 在使用上,RET 指令必须作为子程序的最后一条指令;RETI 必须作为中断服务程序的 最后一条指令。
② RETI 指令除恢复断点地址外,还使得已申请的同级或低级中断申请可以响应;而RET 指令只能恢复返回地址。
随堂检测1
逻辑运算类指令中,哪些指令不影响 PSW 算术标志位?
答案:逻辑运算类指令中,除带进位循环移位指令影响 CY 外,其他指令不影响 PSW 算术标志位,如逻辑与、或、异或、累加器 A 清 0 和取反指令等。
无条件转移指令 LJMP addr16 和 AJMP addr11 的转移范围分别是多少?
答案:LJMP addr16 可使程序在 64KB 程序存储器地址空间任意转移;AJMP addr11 只能在 2KB 范围内转移。
练一练
随堂检测2
条件转移指令 JZ rel 和 JNZ rel 的功能分别是什么?
答案:JZ rel 功能是若 (A)=0,则 PC←PC + 2 + rel;若 (A)≠0,则顺序执行。JNZ rel 功能是若 (A)≠0,则 PC←PC + 2 + rel;若 (A)=0,则顺序执行。
比较转移指令 CJNE A,#data,rel 执行后,如何根据 CY 的值判断两数大小?
答案:当 CY = 0 时,第一操作数大于第二操作数;当 CY = 1 时,第一操作数小于第二操作数。
练一练
师生互动
1
请各小组讨论,在实际编程中,如何根据不同的程序需求选择合适的控制转移类指令,以及如何正确处理子程序调用与返回的过程。
课题小结
1. 逻辑运算类指令
逻辑运算类指令、控制转移类指令
2. 控制转移类指令
无条件转移类指令
条件转移类指令
逻辑与指令
逻辑或指令
逻辑异或指令
累加器A清0和取反指令
移位指令
长转移指令 LJMP addr16
绝对转移指令 AJMP addr11
短转移指令 SJMP rel
间接转移指令 JMP @A+DPTR
谢谢观看
THANKS
Lavf58.46.101
$