单片机课件第三章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
① 操作码用助记符表示, 它代表了指令的操作功能。 ② 操作码是指令的必需部分, 是指令的核心,不可缺少。
⑶ 操作数:参加操作的数据或数据地址。
① 操作数可以是数据,也可以是数据的地址、 数据地址的地址或操作数的其他信息。 ② 操作数可分为目的操作数和源操作数。 ③ 操作数可用二进制数、十进制数或十六进制 数表示。 ④ 操作数的个数可以是0~3个。 ⑤ 操作数与操作码之间用空格分隔,操作数与 操作数之间用逗号“,”分隔。
⑵ 半字节交换指令
⑶ 累加器高低四位互换 SWAP A
例:将片内RAM 30H单元与40H单元中的内容互换。
方法1(直接地址传送法): MOV 31H,30H MOV 30H,40H MOV 40H,31H SJMP $
方法2(间接地址传送法): MOV R0,#40H MOV R1,#30H MOV A,@R0 MOV B,@R1 MOV @R1,A MOV @R0,B SJMP $
⑵ POP为出栈指令 例 POP 40H ;(40H)=4CH,具体操作是:
① 先将SP所指单元0FH(栈顶地址)中的数据(4CH) 弹出,送到指定的内RAM单元40H,(40H)=4CH; ② 然后SP-1→SP,SP=0EH,SP仍指向栈顶地址。
例如:片内RAM50H单元数据压入栈,再弹 出到40H单元,设栈指针为30H。
A,Rn
例 1:
MOV A,#0AEH ADD A,#81H 则执行完本条指令后,A中的值为2FH; C=1,AC=0,OV=1,P=1。 对无符号数:结果为12FH; 带符号数运算:OV=1,有错。
注意: 1)位地址里的数据只可能是一个 0 或 1 2 )有的位地址十分明确 , 如 P1.0, ACC.7 等 , 有 的位地址则“不太明确”,如: MOV A,17H ; (A)←(17H),17H是字节地址 MOV ACC.0 , 17H ;(ACC.0)←(17H), 这 里 ACC.0 是位地址所以该指令中的 17H 是 22H 单元的 第7位
⒎ 位寻址
位寻址是对内RAM和特殊功能寄存器中的 可寻址位进行操作的寻址方式。 指令中直接给出了操作数所在的位地址。 例: CLR P1.0 ;(P1.0) ← 0 SETB ACC.7 ;(ACC.7)← 1 CPL C ;( C )← NOT( C ) ;将位地址 07H( 字节 MOV C,07H 地 址 20H 中 最 高位)中的数据传 送至进位位Cy。
பைடு நூலகம்
相对寻址
位寻址
⒈ 立即寻址 立即寻址是直接给出操作数,操作数 前有立即数符“ # ”。
【例】
MOV MOV
A,#30H DPTR,#5678H
ADD A,#05H 注意:符号“#”表明其后跟的是立即数,
⒉ 直接寻址 直接寻址是给出操作数的直接地址。直 接寻址范围为内RAM128B和特殊功能寄存器。
运算速度
数据传送类(29条) 算术运算类(24条) 功能 逻辑运算及移位类(24条) 控制转移类(17条) 位操作类(17条)
§3-1
指令格式及常用符号
机器指令是二进制编码指令,计算机能直接识别和执行; 符号指令是采用便于记忆的符号来表示机器指令
3.1.1 指令基本格式 标号:操作码 操作数;注释
【例】
MOV
A,@R0
MOVX
MOV
A,@DPTR
05H, @R1
⒌ 变址寻址
在变址寻址中,操作数地址=基址+变址
用于读ROM数据操作或跳转指令。
以16位的地址指针寄存器DPTR或 16位的PC寄存 器为基址寄存器,以累加器 A 为变址寄存器,两者 中的“内容”形成一个16位的“地址”,该“地址” 所指的存储单元中的内容才是操作数。
例:2000H:SJMP 08H
;
原PC值为2000H;执行这条指令后的当前PC 值为2002H,rel为08H。2002H+08H=200AH,转 移目的地址为200AH,程序就跳转至200AH去执行 了。
右图为SJMP 08H相对 寻址示意图。
在实际编程中,“rel” 通常用标号代替 例:SJMP LOOP1
⒌ 堆栈操作指令(2条)
① PUSH ② POP direct ;SP+1→SP , (direct)→(SP) direct ;(SP)→(direct),SP-1→SP
⑴ PUSH为入栈指令 例PUSH 30H;(30H)=2BH,具体操作是: ① 先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一 个空单元,此时SP=10H; ② 然后将指令指定的直接寻址单元30H中的数据(2BH) 送到该空单元中。
[标号:] 操作码 [目的操作数][,源操作数][;注释]
START:MOV A,#30H MOV DPTR,#5678H
⑴ 标号:指令的符号地址。
① 用于一段功能程序的识别标记或控制 转移地址。 ② 一般用1-8个字母/数字组成。 ③ 标号必须用冒号“ :”与操作码分隔。
⑵ 操作码:表示指令的操作功能。
使用时应注意判断各种结果对哪些标志位(CY、 OV、AC、P)产生影响。
⒈ 加法指令
⑴ 不带Cy加法指令(4条)
① ADD
② ADD ③ ADD
④ ADD
;A+Rn→A(n=0~7) 有进位,Cy=1;无进位,Cy=0 A,@Ri ;A+(Ri)→A(i=0、1) 有进位,Cy=1;无进位,Cy=0 A,direct ;A+(direct)→A 有进位,Cy=1;无进位,Cy=0 A,#data ;A+data→A 有进位,Cy=1;无进位,Cy=0
例:将R2与R0内容交换。 例:将片外RAM中01H 单元清零。
例:将片外RAM2000H单元数据送给P1口。
例:将片内RAM6AH 单元数据送片外RAM3000H单元。
⒋ 读ROM指令(MOVC)
① MOVC ② MOVC A,@A+DPTR A,@A+PC ;(A+DPTR)→A ;PC+1→PC,(A+PC)→A
⒍ 交换指令(5条)
⑴ 字节交换指令 ① XCH ② XCH ③ XCH XCHD A,Rn A,@Ri ; A←→Rn,n=0~7 ; A←→(Ri),i=0、1
A,direct ; A←→(direct) A,@Ri ; A3~0←→(Ri)3~0 高4位不变。i=0、1 ; A7~4←→A3~0
⑤ MOV
direct,#data ;data→(direct)
⑷ 以寄存器间址为目的字节的传送指令(3条)
① MOV @Ri,A ;A→(Ri),i=0、1
② MOV
③ MOV
@Ri,direct;(direct)→(Ri),i=0、1
@Ri,#data ;data→(Ri),i=0、1
⒉ 16位数据传送指令
MOV 【例】 MOV DPTR,#1234H DPTR,#data16 ;data16→DPTR
该指令也可以用两条8位数据传送指令实现: MOV DPH,#12H ;DPH=12H MOV DPL,#34H ;DPL=34H,DPTR=1234H
⒊ 外RAM传送指令(MOVX)
① ② ③ ④ MOVX MOVX MOVX MOVX A,@Ri A,@DPTR @Ri,A @DATR,A ;(Ri)→A,i=0、1 ;(DPTR)→A ;A→(Ri),i=0、1 ;A→(DATR)
方法3(字节交换传送法): MOV A,30H XCH A,40H MOV 30H,A SJMP $
方法4(堆栈传送法): PUSH 30H PUSH 40H POP 30H POP 40H SJMP $
3.2.2 算术运算类指令 包括:加、减、乘、除法指令,增1和减1 指令,十进制调整指令,共24条,
【例】 MOVC A,@A+DPTR MOVC A,@A+PC
⒍ 相对寻址
当前PC值加上指令中规定的偏移量 rel,构成 实际的操作数地址 例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel 注意: 1 )“当前 PC 值”指程序中下一条指令所在的首 地址,是一个16位数; 2)符号“rel”表示“偏移量”, 是一个带符号的 单字节数,范围是:-128—+127(80H—7FH) 在实际编程中,“rel” 通常用标号代替
第3 章
本章要点
80C51的指令系统
80C51指令的基本格式 指令系统中的常用符号 80C51指令系统的七种寻址方式
80C51指令功能分类
指令是CPU按照人们的意图完成某种操作的命令。
指令系统是CPU所能执行的全部指令的集合。
分类
字节数
单字节指令:49条 双字节指令:45条 三字节指令:17条 单周期指令:64条 双周期指令:45条 四周期指令: 2条
⑷ 注释:指令功能说明。
① 注释属于非必需项,是为便于阅读, 对指令功能作的说明和注解。 ② 注释必须以“;”开始。
3.1.2
指令系统中的常用符号
⑴ #:立即数符。 MOV A,#30H #data:8位立即数;#data16:16位立即数。 ⑵ direct:8位直接地址 MOV A,3AH 代表内RAM 00H~7FH或SFR的80H~FFH 。 ⑶ @:间接寻址符。 MOV A,@R0 如@Ri,@DPTR,@A+PC,@A+DPTR。 ⑷ addr11:11位目的地址。 addr16:16位目的地址。 ⑸ rel:带符号的8位偏移地址。 SJMP rel 用于转移指令,其范围是相对于下一条指令第1字节地址 的-128~+127个字节。
【例3-1】若R0=40H,(30H)=60H,(40H)=50H MOV A,R0 MOV A,@R0 MOV A,30H MOV A,#30H
⑵ 以工作寄存器Rn为目的字节 的传送指令(3条)
① MOV ② MOV ③ MOV Rn,A ;A→Rn,n=0~7
Rn,direct;(direct)→Rn,n=0~7 Rn,#data ;data→Rn,n=0~7
§3-2
指令系统
功能分五类,共111条指令
数据传送类指令 算术运算类指令 逻辑运算及移位指令 位操作类指令 控制转移类指令
3.2.1 数据传送类指令
⒈ 内RAM数据传送指令(MOV) ⑴ 以累加器A为目的字节的传送指令(4条) ① ② ③ ④ MOV MOV MOV MOV A,Rn A,@Ri A,direct A,#data ;Rn→A ,n=0~7 ;(Ri)→A,i=0、1 ;(direct)→A ;data→A
三个不同的存储空间用三种不同的指令传送:
内RAM(包括特殊功能寄存器): 外RAM: ROM: 用MOV指令传送; 用MOVX指令传送; 用MOVC指令传送。
例 :按下列要求传送数据:设ROM(2000H)=ABH (1)ROM 2000H单元数据送内RAM 10H单元; (2)R0M 2000H单元数据送外RAM 80H单元; (3)ROM 2000H单元数据送外RAM 1000H单元;
【例】
MOV MOV A,3AH A,P0
⒊ 寄存器寻址
操作数存放在寄存器中,指令中直接给出寄存器名 规定的寄存器有:① 工作寄存器R0~R7
② 累加器A(使用ACC时为直接寻址) ③ 双字节AB ④ 数据指针DPTR
【例】 MOV A,R0
INC A MUL AB
⒋ 寄存器间接寻址
寄存器中的内容是一个地址,由该地址单元寻址 到所需的操作数。间接寻址用间址符“@”作为前缀。
⑹ bit:位地址。 SETB ACC.7 代表片内RAM中的可寻址位00H~7FH及SFR中的可寻址位。 (7)(x):x地址单元或寄存器的内容。 (8)((x)): 以x单元或寄存器内容为地址所指定单元 的内容。
3.1.3 寻址方式
七种寻址方式:
立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 ( 基址寄存器 + 变址寄存器间接寻址 )
⑶ 以直接地址为目的字节的传送指令(5条)
① MOV ② MOV ③ MOV ④ MOV direct,A direct,Rn direct,@Ri ;A→(direct) ;Rn→(direct),n=0~7 ;(Ri)→(direct),i=0、1
direct1,direct2;(direct2)→(direct1)
⑶ 操作数:参加操作的数据或数据地址。
① 操作数可以是数据,也可以是数据的地址、 数据地址的地址或操作数的其他信息。 ② 操作数可分为目的操作数和源操作数。 ③ 操作数可用二进制数、十进制数或十六进制 数表示。 ④ 操作数的个数可以是0~3个。 ⑤ 操作数与操作码之间用空格分隔,操作数与 操作数之间用逗号“,”分隔。
⑵ 半字节交换指令
⑶ 累加器高低四位互换 SWAP A
例:将片内RAM 30H单元与40H单元中的内容互换。
方法1(直接地址传送法): MOV 31H,30H MOV 30H,40H MOV 40H,31H SJMP $
方法2(间接地址传送法): MOV R0,#40H MOV R1,#30H MOV A,@R0 MOV B,@R1 MOV @R1,A MOV @R0,B SJMP $
⑵ POP为出栈指令 例 POP 40H ;(40H)=4CH,具体操作是:
① 先将SP所指单元0FH(栈顶地址)中的数据(4CH) 弹出,送到指定的内RAM单元40H,(40H)=4CH; ② 然后SP-1→SP,SP=0EH,SP仍指向栈顶地址。
例如:片内RAM50H单元数据压入栈,再弹 出到40H单元,设栈指针为30H。
A,Rn
例 1:
MOV A,#0AEH ADD A,#81H 则执行完本条指令后,A中的值为2FH; C=1,AC=0,OV=1,P=1。 对无符号数:结果为12FH; 带符号数运算:OV=1,有错。
注意: 1)位地址里的数据只可能是一个 0 或 1 2 )有的位地址十分明确 , 如 P1.0, ACC.7 等 , 有 的位地址则“不太明确”,如: MOV A,17H ; (A)←(17H),17H是字节地址 MOV ACC.0 , 17H ;(ACC.0)←(17H), 这 里 ACC.0 是位地址所以该指令中的 17H 是 22H 单元的 第7位
⒎ 位寻址
位寻址是对内RAM和特殊功能寄存器中的 可寻址位进行操作的寻址方式。 指令中直接给出了操作数所在的位地址。 例: CLR P1.0 ;(P1.0) ← 0 SETB ACC.7 ;(ACC.7)← 1 CPL C ;( C )← NOT( C ) ;将位地址 07H( 字节 MOV C,07H 地 址 20H 中 最 高位)中的数据传 送至进位位Cy。
பைடு நூலகம்
相对寻址
位寻址
⒈ 立即寻址 立即寻址是直接给出操作数,操作数 前有立即数符“ # ”。
【例】
MOV MOV
A,#30H DPTR,#5678H
ADD A,#05H 注意:符号“#”表明其后跟的是立即数,
⒉ 直接寻址 直接寻址是给出操作数的直接地址。直 接寻址范围为内RAM128B和特殊功能寄存器。
运算速度
数据传送类(29条) 算术运算类(24条) 功能 逻辑运算及移位类(24条) 控制转移类(17条) 位操作类(17条)
§3-1
指令格式及常用符号
机器指令是二进制编码指令,计算机能直接识别和执行; 符号指令是采用便于记忆的符号来表示机器指令
3.1.1 指令基本格式 标号:操作码 操作数;注释
【例】
MOV
A,@R0
MOVX
MOV
A,@DPTR
05H, @R1
⒌ 变址寻址
在变址寻址中,操作数地址=基址+变址
用于读ROM数据操作或跳转指令。
以16位的地址指针寄存器DPTR或 16位的PC寄存 器为基址寄存器,以累加器 A 为变址寄存器,两者 中的“内容”形成一个16位的“地址”,该“地址” 所指的存储单元中的内容才是操作数。
例:2000H:SJMP 08H
;
原PC值为2000H;执行这条指令后的当前PC 值为2002H,rel为08H。2002H+08H=200AH,转 移目的地址为200AH,程序就跳转至200AH去执行 了。
右图为SJMP 08H相对 寻址示意图。
在实际编程中,“rel” 通常用标号代替 例:SJMP LOOP1
⒌ 堆栈操作指令(2条)
① PUSH ② POP direct ;SP+1→SP , (direct)→(SP) direct ;(SP)→(direct),SP-1→SP
⑴ PUSH为入栈指令 例PUSH 30H;(30H)=2BH,具体操作是: ① 先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一 个空单元,此时SP=10H; ② 然后将指令指定的直接寻址单元30H中的数据(2BH) 送到该空单元中。
[标号:] 操作码 [目的操作数][,源操作数][;注释]
START:MOV A,#30H MOV DPTR,#5678H
⑴ 标号:指令的符号地址。
① 用于一段功能程序的识别标记或控制 转移地址。 ② 一般用1-8个字母/数字组成。 ③ 标号必须用冒号“ :”与操作码分隔。
⑵ 操作码:表示指令的操作功能。
使用时应注意判断各种结果对哪些标志位(CY、 OV、AC、P)产生影响。
⒈ 加法指令
⑴ 不带Cy加法指令(4条)
① ADD
② ADD ③ ADD
④ ADD
;A+Rn→A(n=0~7) 有进位,Cy=1;无进位,Cy=0 A,@Ri ;A+(Ri)→A(i=0、1) 有进位,Cy=1;无进位,Cy=0 A,direct ;A+(direct)→A 有进位,Cy=1;无进位,Cy=0 A,#data ;A+data→A 有进位,Cy=1;无进位,Cy=0
例:将R2与R0内容交换。 例:将片外RAM中01H 单元清零。
例:将片外RAM2000H单元数据送给P1口。
例:将片内RAM6AH 单元数据送片外RAM3000H单元。
⒋ 读ROM指令(MOVC)
① MOVC ② MOVC A,@A+DPTR A,@A+PC ;(A+DPTR)→A ;PC+1→PC,(A+PC)→A
⒍ 交换指令(5条)
⑴ 字节交换指令 ① XCH ② XCH ③ XCH XCHD A,Rn A,@Ri ; A←→Rn,n=0~7 ; A←→(Ri),i=0、1
A,direct ; A←→(direct) A,@Ri ; A3~0←→(Ri)3~0 高4位不变。i=0、1 ; A7~4←→A3~0
⑤ MOV
direct,#data ;data→(direct)
⑷ 以寄存器间址为目的字节的传送指令(3条)
① MOV @Ri,A ;A→(Ri),i=0、1
② MOV
③ MOV
@Ri,direct;(direct)→(Ri),i=0、1
@Ri,#data ;data→(Ri),i=0、1
⒉ 16位数据传送指令
MOV 【例】 MOV DPTR,#1234H DPTR,#data16 ;data16→DPTR
该指令也可以用两条8位数据传送指令实现: MOV DPH,#12H ;DPH=12H MOV DPL,#34H ;DPL=34H,DPTR=1234H
⒊ 外RAM传送指令(MOVX)
① ② ③ ④ MOVX MOVX MOVX MOVX A,@Ri A,@DPTR @Ri,A @DATR,A ;(Ri)→A,i=0、1 ;(DPTR)→A ;A→(Ri),i=0、1 ;A→(DATR)
方法3(字节交换传送法): MOV A,30H XCH A,40H MOV 30H,A SJMP $
方法4(堆栈传送法): PUSH 30H PUSH 40H POP 30H POP 40H SJMP $
3.2.2 算术运算类指令 包括:加、减、乘、除法指令,增1和减1 指令,十进制调整指令,共24条,
【例】 MOVC A,@A+DPTR MOVC A,@A+PC
⒍ 相对寻址
当前PC值加上指令中规定的偏移量 rel,构成 实际的操作数地址 例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel 注意: 1 )“当前 PC 值”指程序中下一条指令所在的首 地址,是一个16位数; 2)符号“rel”表示“偏移量”, 是一个带符号的 单字节数,范围是:-128—+127(80H—7FH) 在实际编程中,“rel” 通常用标号代替
第3 章
本章要点
80C51的指令系统
80C51指令的基本格式 指令系统中的常用符号 80C51指令系统的七种寻址方式
80C51指令功能分类
指令是CPU按照人们的意图完成某种操作的命令。
指令系统是CPU所能执行的全部指令的集合。
分类
字节数
单字节指令:49条 双字节指令:45条 三字节指令:17条 单周期指令:64条 双周期指令:45条 四周期指令: 2条
⑷ 注释:指令功能说明。
① 注释属于非必需项,是为便于阅读, 对指令功能作的说明和注解。 ② 注释必须以“;”开始。
3.1.2
指令系统中的常用符号
⑴ #:立即数符。 MOV A,#30H #data:8位立即数;#data16:16位立即数。 ⑵ direct:8位直接地址 MOV A,3AH 代表内RAM 00H~7FH或SFR的80H~FFH 。 ⑶ @:间接寻址符。 MOV A,@R0 如@Ri,@DPTR,@A+PC,@A+DPTR。 ⑷ addr11:11位目的地址。 addr16:16位目的地址。 ⑸ rel:带符号的8位偏移地址。 SJMP rel 用于转移指令,其范围是相对于下一条指令第1字节地址 的-128~+127个字节。
【例3-1】若R0=40H,(30H)=60H,(40H)=50H MOV A,R0 MOV A,@R0 MOV A,30H MOV A,#30H
⑵ 以工作寄存器Rn为目的字节 的传送指令(3条)
① MOV ② MOV ③ MOV Rn,A ;A→Rn,n=0~7
Rn,direct;(direct)→Rn,n=0~7 Rn,#data ;data→Rn,n=0~7
§3-2
指令系统
功能分五类,共111条指令
数据传送类指令 算术运算类指令 逻辑运算及移位指令 位操作类指令 控制转移类指令
3.2.1 数据传送类指令
⒈ 内RAM数据传送指令(MOV) ⑴ 以累加器A为目的字节的传送指令(4条) ① ② ③ ④ MOV MOV MOV MOV A,Rn A,@Ri A,direct A,#data ;Rn→A ,n=0~7 ;(Ri)→A,i=0、1 ;(direct)→A ;data→A
三个不同的存储空间用三种不同的指令传送:
内RAM(包括特殊功能寄存器): 外RAM: ROM: 用MOV指令传送; 用MOVX指令传送; 用MOVC指令传送。
例 :按下列要求传送数据:设ROM(2000H)=ABH (1)ROM 2000H单元数据送内RAM 10H单元; (2)R0M 2000H单元数据送外RAM 80H单元; (3)ROM 2000H单元数据送外RAM 1000H单元;
【例】
MOV MOV A,3AH A,P0
⒊ 寄存器寻址
操作数存放在寄存器中,指令中直接给出寄存器名 规定的寄存器有:① 工作寄存器R0~R7
② 累加器A(使用ACC时为直接寻址) ③ 双字节AB ④ 数据指针DPTR
【例】 MOV A,R0
INC A MUL AB
⒋ 寄存器间接寻址
寄存器中的内容是一个地址,由该地址单元寻址 到所需的操作数。间接寻址用间址符“@”作为前缀。
⑹ bit:位地址。 SETB ACC.7 代表片内RAM中的可寻址位00H~7FH及SFR中的可寻址位。 (7)(x):x地址单元或寄存器的内容。 (8)((x)): 以x单元或寄存器内容为地址所指定单元 的内容。
3.1.3 寻址方式
七种寻址方式:
立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 ( 基址寄存器 + 变址寄存器间接寻址 )
⑶ 以直接地址为目的字节的传送指令(5条)
① MOV ② MOV ③ MOV ④ MOV direct,A direct,Rn direct,@Ri ;A→(direct) ;Rn→(direct),n=0~7 ;(Ri)→(direct),i=0、1
direct1,direct2;(direct2)→(direct1)