单片机原理及应用第三章 指令系统(循环、位操作)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、知识回顾 无条件转移指令(4条)
1、长转移指令 LJMP addr16 ; addr16 → PC。
注:addr16及LOOP的取值为0~FFFFH。
2、短转移指令 AJMP addr11 ; 先(PC)+2 → PC,
; 再 addr11 →PC0~10 ,(PC11~15)不变。
注:目标地址须在AJMP指令后第一字节开始的 同一2KB范围内。
MOV A, @R0 MOV @R1, A
; ((R0)) → A,(A) = (20H) ; (A) → (R1),((R1)) = (20H),
; (60H) = (20H)
INC R0
; (R0) +1 → R0, (R0) = 21H
INC R1
; (R1) +1 → R1, (R1) = 61H
(2) JNZ rel ; 先(PC)+2 → PC,
注:当A ≠ 0时,(PC)+ rel→PC ;当A=0时,则顺序执行。
一、知识回顾 条件转移指令(6条)
2、比较转移指令
CJNE CJNE CJNE CJNE
注释:
A, #data, rel A, direct, rel @Ri, #data, rel Rn, #data, rel
DJNZ R2, Start RET
; (R2) -1 → R2, 再转到Start处 ; 子程序返回
三、调用和返回指令(4条)
主程序
第一次调用
断点A
第二次调用
断点B
第一次返回 第二次返回
子程序
两个问题:
1)调用时,如何将当 前PC值改为子程序首 地址。
RET
2)返回时,如何将当 前PC值改为断点处地 址。
先(PC)+3 → PC,再将目的操作数与源操作数相比较。 (1)若相等,则顺序执行,且0 →Cy; (2)若不相等,则(PC)+ rel→PC,同时,若目的操作数 > 源操作数,则 0 →Cy; 否则, 1 →Cy。
二、循环转移指令(2条)
它属于条件转移类指令。
1. DJNZ Rn, rel 2. DJNZ direct, rel
注意:采用该指令可在64KB范围内调用子程序。
三、调用和返回指令(4条)
3、返回指令
(1)子程序调用返回指令:RET (2)中断服务程序返回指令:RETI
注释: ① ((SP)) → PC8~15,弹出断点高 8 位; ② (SP) - 1 → SP; ③ ((SP)) → PC0~7,弹出断点低 8 位; ④ (SP) - 1 → SP。
跳转过程为:
先(PC)+2 → PC,再(PC)+ rel → PC 。
Βιβλιοθήκη Baidu
四、位操作指令
4、位条件转移类指令
② CLR bit ; bit 0
(2)位置“1”指令 ① SETB C ; C 1
② SETB bit
(3)位取反指令 ① CPL C
; bit 1 ; C (/C)
② CPL bit ; bit (/bit)
四、位操作指令
3、位逻辑运算指令(4 条)
(1)位逻辑“与”指令 ① ANL C,bit ; C (C)∧(bit) ② ANL C,/bit ; C (C)∧(/bit)
四、位操作指令
1、位传送指令(2条) (1)MOV C, bit ;C (bit)
(2)MOV bit, C ;bit (C) 注:
① C 即 Cy; ② bit 表示位地址。
即:可位寻址区(00H~7FH)及11个特殊功能寄存器。
四、位操作指令
2、位修正指令(6 条)
(1)位清零指令
① CLR C ; C 0
主程序调用子程序及返回示意图
三、调用和返回指令(4条)
1、短调用指令 (2字节)
ACALL addr11
; 先(PC)+2 → PC,断点值
;(SP)+1 → SP
;(PC0~7)→(SP) ;(SP)+1 → SP
压入断点
;(PC8~15)→(SP) ; addr110~10→ PC0~10,PC11~15不变
注意:子程序首地址须与该指令后第一字节地址在同一 2KB范围内。
三、调用和返回指令(4条)
2、长调用指令 (3字节)
LCALL addr16
; 先(PC)+3 → PC,断点值
;(SP)+1 → SP
;(PC0~7)→(SP) ;(SP)+1 → SP
压入断点
;(PC8~15)→(SP)
; addr160~15→ PC0~15
一、知识回顾 无条件转移指令(4条)
3、相对转移指令 SJMP rel ; 先 (PC)+2 → PC, ; 再 (PC)+ rel → PC 。
注:目标地址须在SJMP指令后第一字节开始的前 128字节至后127字节范围内。
4、间接转移指令 JMP @A+DPTR ;(DPTR)+(A)→PC 。
或 DJNZ 20H,LOOP。
二、循环转移指令
例1:请编出将RAM内 20H ~ 2FH 中的数据传到 60H ~ 6FH 的程序。
ORG 1000H
Start: MOV R2, #16 ; 16 → R2
MOV R0, #20H ; 20H → R0
MOV R1, #60H ; 60H → R1
注释:(PC)+2 → PC;(Rn)-1→Rn [或(direct)-1→direct]; ① 若(Rn)≠0 [或(direct)≠0] ,则(PC)+ rel→PC ; ② 否则,结束循环,程序顺序往下执行。
(1) rel为一个字节的带符号二进制补码。 (2)地址偏移可用标号代替,如:DJNZ R0, LOOP;
(2)位逻辑“或”指令 ① ORL C,bit ; C (C)∨(bit) ② ORL C,/bit ; C (C)∨(/bit)
四、位操作指令
4、位条件转移类指令(5 条)
(1)判C转移指令 JC rel ;(Cy)=“1”就跳转;否则不跳转。 JNC rel ;(Cy)“1”就跳转;否则不跳转。
注:目标地址64KB范围内,该指令具有散转功能。
一、知识回顾 空操作指令(1条)
NOP ;(PC)+1 → PC。
注:常用于产生一个机器周期的延时。
条件转移指令(6条) 1、判零转移指令 (1) JZ rel ; 先(PC)+2 → PC,
注:当A=0时,(PC)+ rel→PC ;当A≠0时,则顺序执行。
1、长转移指令 LJMP addr16 ; addr16 → PC。
注:addr16及LOOP的取值为0~FFFFH。
2、短转移指令 AJMP addr11 ; 先(PC)+2 → PC,
; 再 addr11 →PC0~10 ,(PC11~15)不变。
注:目标地址须在AJMP指令后第一字节开始的 同一2KB范围内。
MOV A, @R0 MOV @R1, A
; ((R0)) → A,(A) = (20H) ; (A) → (R1),((R1)) = (20H),
; (60H) = (20H)
INC R0
; (R0) +1 → R0, (R0) = 21H
INC R1
; (R1) +1 → R1, (R1) = 61H
(2) JNZ rel ; 先(PC)+2 → PC,
注:当A ≠ 0时,(PC)+ rel→PC ;当A=0时,则顺序执行。
一、知识回顾 条件转移指令(6条)
2、比较转移指令
CJNE CJNE CJNE CJNE
注释:
A, #data, rel A, direct, rel @Ri, #data, rel Rn, #data, rel
DJNZ R2, Start RET
; (R2) -1 → R2, 再转到Start处 ; 子程序返回
三、调用和返回指令(4条)
主程序
第一次调用
断点A
第二次调用
断点B
第一次返回 第二次返回
子程序
两个问题:
1)调用时,如何将当 前PC值改为子程序首 地址。
RET
2)返回时,如何将当 前PC值改为断点处地 址。
先(PC)+3 → PC,再将目的操作数与源操作数相比较。 (1)若相等,则顺序执行,且0 →Cy; (2)若不相等,则(PC)+ rel→PC,同时,若目的操作数 > 源操作数,则 0 →Cy; 否则, 1 →Cy。
二、循环转移指令(2条)
它属于条件转移类指令。
1. DJNZ Rn, rel 2. DJNZ direct, rel
注意:采用该指令可在64KB范围内调用子程序。
三、调用和返回指令(4条)
3、返回指令
(1)子程序调用返回指令:RET (2)中断服务程序返回指令:RETI
注释: ① ((SP)) → PC8~15,弹出断点高 8 位; ② (SP) - 1 → SP; ③ ((SP)) → PC0~7,弹出断点低 8 位; ④ (SP) - 1 → SP。
跳转过程为:
先(PC)+2 → PC,再(PC)+ rel → PC 。
Βιβλιοθήκη Baidu
四、位操作指令
4、位条件转移类指令
② CLR bit ; bit 0
(2)位置“1”指令 ① SETB C ; C 1
② SETB bit
(3)位取反指令 ① CPL C
; bit 1 ; C (/C)
② CPL bit ; bit (/bit)
四、位操作指令
3、位逻辑运算指令(4 条)
(1)位逻辑“与”指令 ① ANL C,bit ; C (C)∧(bit) ② ANL C,/bit ; C (C)∧(/bit)
四、位操作指令
1、位传送指令(2条) (1)MOV C, bit ;C (bit)
(2)MOV bit, C ;bit (C) 注:
① C 即 Cy; ② bit 表示位地址。
即:可位寻址区(00H~7FH)及11个特殊功能寄存器。
四、位操作指令
2、位修正指令(6 条)
(1)位清零指令
① CLR C ; C 0
主程序调用子程序及返回示意图
三、调用和返回指令(4条)
1、短调用指令 (2字节)
ACALL addr11
; 先(PC)+2 → PC,断点值
;(SP)+1 → SP
;(PC0~7)→(SP) ;(SP)+1 → SP
压入断点
;(PC8~15)→(SP) ; addr110~10→ PC0~10,PC11~15不变
注意:子程序首地址须与该指令后第一字节地址在同一 2KB范围内。
三、调用和返回指令(4条)
2、长调用指令 (3字节)
LCALL addr16
; 先(PC)+3 → PC,断点值
;(SP)+1 → SP
;(PC0~7)→(SP) ;(SP)+1 → SP
压入断点
;(PC8~15)→(SP)
; addr160~15→ PC0~15
一、知识回顾 无条件转移指令(4条)
3、相对转移指令 SJMP rel ; 先 (PC)+2 → PC, ; 再 (PC)+ rel → PC 。
注:目标地址须在SJMP指令后第一字节开始的前 128字节至后127字节范围内。
4、间接转移指令 JMP @A+DPTR ;(DPTR)+(A)→PC 。
或 DJNZ 20H,LOOP。
二、循环转移指令
例1:请编出将RAM内 20H ~ 2FH 中的数据传到 60H ~ 6FH 的程序。
ORG 1000H
Start: MOV R2, #16 ; 16 → R2
MOV R0, #20H ; 20H → R0
MOV R1, #60H ; 60H → R1
注释:(PC)+2 → PC;(Rn)-1→Rn [或(direct)-1→direct]; ① 若(Rn)≠0 [或(direct)≠0] ,则(PC)+ rel→PC ; ② 否则,结束循环,程序顺序往下执行。
(1) rel为一个字节的带符号二进制补码。 (2)地址偏移可用标号代替,如:DJNZ R0, LOOP;
(2)位逻辑“或”指令 ① ORL C,bit ; C (C)∨(bit) ② ORL C,/bit ; C (C)∨(/bit)
四、位操作指令
4、位条件转移类指令(5 条)
(1)判C转移指令 JC rel ;(Cy)=“1”就跳转;否则不跳转。 JNC rel ;(Cy)“1”就跳转;否则不跳转。
注:目标地址64KB范围内,该指令具有散转功能。
一、知识回顾 空操作指令(1条)
NOP ;(PC)+1 → PC。
注:常用于产生一个机器周期的延时。
条件转移指令(6条) 1、判零转移指令 (1) JZ rel ; 先(PC)+2 → PC,
注:当A=0时,(PC)+ rel→PC ;当A≠0时,则顺序执行。