《单片机原理与实用技术》第3章

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

„例3-7‟ 以查表方式求出片内RAM中20H单元数的平方值,存 入片内21H单元中。
„解法一‟ 以DPTR为基址寄存器,平方表首址可灵活安排在适 当的位置如2000H,即平方表的内容从2000H单元放起。程序如 下: ORG 1800H MOV DPTR ,#2000H MOV A,20H MOVC A,@A+DPTR MOV 21H,A ORG DB DB 2000H 00H, 01H , 04H , 10H, 19H , 24H 31H, 40H , 51H ,64H,„„
3.3 数据传送指令
3.3.1内部RAM数据传送指令
1.通用传送指令MOV 指令格式:MOV <目的操作数> ,<源操作数> 功能:把源操作数所表示的数据传送到目的地址 指定的存贮单元之中,而不改变源操作数。即该指令 是“复制”,不是“搬家”。
通用指令
1)以累加器A为目的地址的指令
MOV MOV MOV MOV A,Rn A,direct A,@Ri A,#data ;A ← (Rn) ;A ← (direct) ;A ← ((Ri)) ;A ← data
SWAP A ;(A)低4位←→ (A)高4位 功能:A中高4位与低4位互换。 例:(A)=80H ,执行SWAP A结果为:(A)=08H.
„例3-4‟ 试用交换指令使片内20H单元的高4位与21H单 元的低4位交换。
„解‟ XCH A,20H SWAP A MOV R1,21H XCHD A,@R1 SWAP A XCH A,20H
偏移量rel是一带符号8位二进数的补码数,范围 为-128~+127。实际书写程序时往往先用地址标号代 替,在汇编为机器指令时再计算出来。
„例3-1‟ 指出下列每一条指令的寻址方式。 ①MOV 2FH,#40H ②MOV A,@R0 ③MOV DPTR,#2020H ④MOV 45H,P0
①中的源操作数为立即寻址,目的 操作数为直接寻址。
2)半字节交换XCHD
XCHD A, @Ri ;(A)低4位←→( (Ri))低4位 功能:累加器A中内容与源操作数低4位交换,高4位不变。 例:(A)=80H,(R0)=30H,(30H)=0FH,执行指令 XCHD A, @R 结果为:(A)=8FH, (30H)=00H
3)累加器高低数字节交换指令SWAP A
3.2.1 立即寻址方式
所谓立即寻址就是操作数在指令中直接给出。立即寻 址方式的操作数称立即数,立即数只能是源操作数,不能 作为目的操作数。立即数有8位立即数和16位立即数。使 用时在立即数前加“#”标志。 例:MOV MOV A, #20H DPTR, #20D8H
3.2.2 直接寻址方式
直接寻址就是操作数直接以单元地址的形式给出。直 接地址以存贮单元形式出现。 例如指令: MOV A, 20H RM A
2H 1 08 AH
A
08 AH
2H 0 1H F
3.2.3 寄存器寻址方式
寄存器寻址就是操作数在寄存器中。 例如指令:MOV A, R2
A
3.2.4 寄存器间接寻址方式
寄存器间接寻址是以寄存器 中的内容为地址取得操作数的 方法。和寄存器寻址相比,寄 存器寻址时,寄存器中存放的 是操作数,而寄存器间接寻址 中时,寄存器中存放的是操作 数的地址。 寄存器间接寻址使用的寄存器 为Ri 和DPTR,使用时寄存器 前面加“@“标志。即以下形 式: MOV A,@Ri MOVX A,@DPTR 例如:(R1)=80H、(80H )=33H,则执行指令MOV A ,@Ri后,累加器A的内容为 33H而不是80H。
②中的源操作数为寄存器间接寻址, 目的操作数为寄存器寻址。 ③中的源操作数为16位立即寻址, 目的操作数为寄存器寻址。
④中的源操作数和目的操作数都是 直接寻址。
⑤中的源操作数和目的操作数都为 寄存器寻址。
⑤MOV A,R1
⑥MOVC A,@A+PC ⑦JC LOOP
⑥中的源操作数为基址加变址寻址, 目的操作数为寄存器寻址。 ⑦中的操作数为相对寻址。
„例3-2‟ 判断下列指令是否正确,若不正确请指 出错误: ①MOV A,DPTR ②MOV DPTR,#03H ③MOV #80H,R7 ④MOV B,C
„解‟①不正确。A是8位寄存器,DPTR为16位寄 存器,不匹配。作为目的地址。
④不正确。B为8位字节寄存器,C为1位位累加器, 不匹配。

3.3.3程序存贮器向累加器A传送指令
MOVC A,@A+PC MOVC A,@A+DPTR ;A ← ((A)+(PC)) ;A ← ((A)+(DPTR))
说明: ①程序存贮器只能读出,不能写入,所以其数据传送都是单 向的,即从程序存贮器读出数据,并且只能向累加器A传送。 ②ROM片内、片外是统一编址,该指令既可访问片内,又可访 问片外程序存贮器。 ③该类指令主要用于查表,又称查表指令。应用时,一般以 PC或DPTR确定表格的首址,查表时,根据A中不同的内容查 找到表格中的相应项,故此时称PC或DPTR为基址寄存器,A 为变址寄存器,寻址方式为基址加变址寻址。 ④使用DPTR作基址寄存器比较灵活,且不易出错。建议尽可 能使用MOVC A,@DPTR指令。
2.数据交换指令
1)字节交换指令XCH XCH A,Rn ;(A)←→ (Rn) XCH A,direct ;(A)←→ (direct) XCH A,@Ri ;(A)←→( (Ri)) 功能:将累加器A中内容与源操作数互换。 例:设(A)=08H,(R7)=0DCH, 执行指令 XCH A, R7 结果为:(A)=0DCH, (R7)=08H
内 RAM 部 80H 80H 33H
A
33H
3.2.5 基址加变址寻址方式
基址加变址寻址就是以DPTR或PC为基址寄存器,以A为变址 寄存器,以两者内容相加形成16位地址作为操作数地址。 例如指令: MOVC A,@A+DPTR
DT PR 1 0H 00
RM A
„ „
10H 0A 10H 09 10H 08
+
1 0H 09
8H 8
„ „
A
0H 9
3.2.6 位寻址方式
位寻址方式就是以位为操作数。MCS-51单片机有 相当强的位处理功能,可以对位进行直接操作。 例如指令: MOV C, 4AH 位寻址范围 1)内部RAM的位寻址区 2)可供位寻址的11个专用寄存器
3.2.7 相对寻址方式
相对寻址是在相对转移指令中,根据地址相对当前 PC的偏移量得到操作数的方式。如: JZ rel
第3章
MCS-51指令系统
3.1单片机指令系统概述
3.1.1指令
指令是指挥计算机工作的命令,一种计算机所能 执行的指令集合称之为该种计算机的指令系统。 机器指令 0010 0100 0000 1010B (二进制数表示) 24 0A(十六进制数表示) 汇编指令 ADD A,#0AH
指 令
3.1.2 指令格式
4)以寄存器间接地址为目的的地址的指令
MOV @Ri,A MOV @Ri,direct MOV @Ri,#data
5)16位数据传送指令
MOV DPTR,#data16 ;DPTR ← data16 ;DPL ← data7~0 ;DPH ← data15~8
Direct(直接寻址)
@Ri(间接寻址)
说明:
①片外数据存贮单元与片内RAM之间的数据传送以及片外数据存贮 单 元 之间的 数 据传送 不 能直接 进 行 , 必 须 通过累 加 器 A中 转 。 MOVX 20H, 2000H及MOVX 3000H, 2000H等都是错误的。 ②寻址方式只能是寄存器间接寻址。参与间接寻址的寄存器只有Ri 和DPTR两种(3个)。DPTR为16位寄数器,寻址范围为000H~ 0FFFFH共64KB空间。而Ri是8位寄数器,只能寻址00~0FFH低256 单元。
„例3-6‟ ①将片外数据存贮器2000H单元的内容传送 到片内的20H单元中;②将片外数据存贮器2000H单元 的内容传送到片外0FAH单元。
„解‟① MOV MOVX MOV MOV MOVX MOV MOVX DPTR ,#2000H A,@DPTR 20H, A DPTR ,#2000H A,@DPTR R0,#0FAH @R0,A
3.栈操作指令
数据写入堆栈称入栈,数据从堆栈中读出称出栈。
栈顶
SP←SP+1 SP
栈顶
SP SP← SP-1
栈底 a)入栈
栈底 b)出栈
图3-6
堆栈示意图
1)入栈指令PUSH PUSH direct ;SP ← (SP)+1, (SP) ← (direct) 功能:将堆栈指针加1后,片内RAM单元内容送进 栈顶单元,原RAM单元内容不变。 说明: ①PUSH指令常用于保护CPU现场。 ②栈操作是字节指令,每次只能压入或弹出1个字 节的内容。 如PUSH DPTR是错误的,但可以用以下两条指 令完成DPTR的入栈。 PUSH DPH PUSH DPL
A(累加器)
Rn(寄存器寻址)
Data(立即数寻址)
图3-5 MOV指令8位数据传送路线示意图
„例3-3‟ 设RAM 40H单元的内容为80H,80H单元 内容为47H,P1口的输入状态为0FFH,试判断下列程 序执行结果。 MOV R0,#40H ; R0 ← 40H MOV A,@R0 ; A ← ( 40H)=80H MOV R1,A ; R1 ← 80H MOV B,@R1 ; B ← ( 80H)=47H MOV @R1,P1 ;( 80H) ← 0FFH MOV P2,P1 ; P2 ← 0FFH „解‟执行结果为:(A)=80H,(B)=47H,(R0) =40H,(R1)=80H,(P1)=0FFH,(P2)=0FFH, (80H)=0FFH。
指令的表示形式称指令格式。编写程序时必须严格按 指令格式书写。 MCS-51指令由操作码和操作数组成。汇编语言指令 格式如下: 操作码助记符 „操作数1‟„,操作数2‟„,操作数3‟ 1.操作码助记符 2.操作数
3.2寻址方式
指令中,操作数可能是具体的数据,也可能是具 体的存放数据的地址或符号,无论何种情况,都可由 操作数取得参与指令运行的二进制数据。这个过程叫 作寻址。 立即寻址方式 直接寻址方式 寻 寄存器寻址方式 指 寄存器间接寻址方式 方 基址加变寻址方式 式 位寻址方式 相对寻址方式
POP direct ; direct ← ((SP)), SP ← (SP)-1 功能:将(SP)内容传送给片内RAM单元,SP内容减1。 说明: ①栈操作要注意先入后出的原则。 ②POP指令常用于恢复CPU现场
„例3-5‟ 试用栈操作指令完成P0和P1内容的互换。 „解‟ PUSH P0 D0 D0 P P PUSH P1 D1 D1 P P POP P0 POP P1 D0 ← SP
例:设(A)=30H,(B)=80H ,(SP)=50H .则执行指令: PUSH A PUSH B 结果为:(51H)=30H,(52H)=80H,(SP)=52H
52H 51H 50H 4AH 80H 30H „ „
50H 4AH
„ „
←SP
51H 50H 4AH
30H „ „
←SP
← SP
2)出栈指令POP
2)以Rn为目的地址的指令
MOV Rn,A MOV Rn,direct MOV Rn,#data
;Rn ← (A) ;Rn ← (direct) ;Rn ← data
3)以直接地址为目的地址的指令
MOV MOV MOV MOV MOV direct,A direct,Rn direct,direct direct ,@Ri direct ,#data ;direct ← (A) ;direct ← (Rn) ;direct ← (direct) ;direct ← ((Ri)) ;direct ← data ;(Ri)←(A) ;(Ri)←(direct) ;(Ri)←data
0
0
1
1
„ „
← SP
„ „
P0 P1
D0 D1 D1 D0 „ „
P0 P1
D1 D1
P0 P1
D1 D0
← SP
D0 „ „
← SP
„ „
← SP
3.3.2 片外数据存贮器与累加器A 之间的传送指令
MOVX A,@DPTR ;A ← ((DPTR)) MOVX A,@Ri ;A ← ((Ri)) MOVX @ DPTR,A ;(DPTR) ← (A) MOVX @ Ri ,A ;(Ri) ← (A)
相关文档
最新文档