7单片机第七讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理及应用
自动化专业适用
字节地址
位地址
30H 2FH
通用RAM 7F 78
用户使用空间 不可位寻址
20
0F
08 00
3组 2组 1组 工作寄存器0组
位地址空间
20H 18H~1FH 10H~17H 08H~0FH 00H~07H
07
寄存器组 不可位寻址
• •
保留的存储单元 单元
ROM空间的分配 •
•
0003H
• •
002AH 0030H
5.4数据传输指令
数据传输指令共有28条,分为内部数据传输指令、外部数据传 输指令、堆栈操作指令和数据交换指令
一、内部数据传输指令(15条)
指令通式为: MOV <dest> , <src> 其中 <src> -------为源字节; <dest> -------为目的字节
N
四、堆栈操作指令(2条)
堆栈操作指令是一种特殊的数据传送指令,其特点是根据 堆栈寄存器SP中栈顶地址进行数据传送操作。 PUSH POP direct ; SP direct ; (SP) SP+1,(SP) direct, SP (direct) SP-1
举例:设(30H)=X、(40H)=Y,试利用堆栈作为媒体 编出30H和40H单元中内容交换的程序。 MOV PUSH PUSH POP POP SP, #70H 30H ; 40H ; 30H ; 40H ; ; 令栈底地址为70H SP SP+1, 71H X SP SP+1, 72H Y 30H Y,SP SP-1=71H 40H X,SP SP-1=70H 片内RAM SP 70H 71H 72H 栈底 X Y
二、外部数据传送指令(7条)
1. 十六位数据传送指令(1) MOV DPTR, #data16 ; DPTR data16
高8位送 DPH,低8位送 DPL
2. 外部ROM的字节传送指令(2) MOVC A, @A+DPTR ;A MOVC A, @A+PC ;PC A (A+DPTR) PC+1, (A+PC)
按照寻址方式分为:立即型、直接型、寄存器型、寄存 器间接型 1.立即寻址型传送指令
MOV A , #data ; A MOV Rn , #data ; Rn MOV @Ri , #data ; (Ri) MOV direct ,# data ; direct data data data data
举例:若R0=20H ,执行下列指令后A、R7、20H和 21H单元的内容是什么?
基地址寄存器+变址寄存器间接寻址 @A+DPTR (程序存储器0KB---64KB)
3. 外部的RAM的字节传送指令(4)
MOVX MOVX MOVX MOVX A, @Ri @Ri, A A, @DPTR @DPTR, A ;A ;A ;A ;A (Ri) (Ri) (DPTR) (DPTR)
举例:外部RAM 88H单元中有一数X,试编成能把X传送 到外部RAM的1818H 单元的程序。 解:外部RAM 88H单元中有一数X是不能直接传送到外部 的RAM 的1818H中,必须经过累加器A进行传送,相应的程序 为: ORG MOV MOV MOVX MOVX SJMP END 2000H R0, #88H DPTR, #1818H A, @R0 @DPTR, A $
1FFBH 1FFDH 1FFEH 2000H 2001H 2002H --2009H
; A ; A ; 停机
A+data (A+PC)
查阅存放在程序存储器中的数据表格
• 近程查表指令 MOVC
A, @A+PC
• 远程查表指令 MOVC
A, @A+DPTR
程序存储器传送(查表)
A寄存器
基地址寄存器+变址寄存器间接寻址 @A+PC (程序存储器0KB---64KB)
片内RAM SP 70H 71H 72H 栈底 X Y
举例:在程序存储器中,数据的表格为: 7010H 7011H 7012H 7013H 7014H 执行下列程序 1000H 1002H 1004H 1006H 1009H 100AH 100CH 结果为 A= 02H PC= 100EH DPTR=原值 02H 04H 06H 08H 0AH
4.寄存器间址型传送指令 这类指令共有三条: MOV MOV MOV A, @Ri ;A @Ri, A ;A direct, @Ri ;(Ri) (Ri) (Ri) direct
传送指令在片内存储器的操作功能
@Ri
direct
Rn
#data
ACC
举例:已知 (40H)=11H、(41H)=22H、R0=40H、
; R0 88H ; DPTR 1818H ; A X ; X 1818H ; 停机
外部数据存储器传送
A寄存器
寄存器间接寻址 @R1 , @R0 (外部RAM 0B~255B)
寄存器间接寻址 @DPTR (外部RAM 0kB~ 64kB)
MOVX、MOVC操作
•
片外RAM或 片外I/O芯片
MOVX
A
MOVC
程序存储器
•
• MOVX • •
@Ri,A @DPTR,A A,@Ri A, @DPTR
A,@A+PC MOVC A+@A+DPTR
三、数据交换指令(4)
数据交换指令共四条,其中字节交换指令三条,半字节 交换指令一条。 XCH A, XCH A, XCH A, XCHD A, Rn direct @Ri @Ri ; ; ; ; A A A A3~0 Rn (direct) (Ri) (Ri)3~0
举例:已知:R1=32H、(30H)=AAH、(31H)=BBH、 (32H)=CCH,试问执行下列指令后A、50H、R6、 32H、和P1口中的内容是什么?
MOV MOV MOV MOV MOV
A, 50H, R6, @R1, P1,
30H A 31H 30H 32H
3.寄存器寻址型传送指令 • 这类指令共有三条: MOV MOV MOV A, Rn ;A Rn, A ;A direct, Rn ;Rn Rn Rn direct
使用时注意以下三点:
1)参加运算的两个操作数必须是8位二进制数,并且对 PSW中的所有标志位都产生影响; 2)用户可以根据编成需要把参加的两个操作数看成是无 符号数(0~255),也可以看成是带符号的数。若看成是带符 号的数,则通常采用补码的形式(-128~+127); 例如:无符号 有符号 11010011 11010011 十进制 十进制 211 -45
R1=41H,试问下列程序执行后,累加器A、 40H 41H 42H 单元的内容是什么?
MOV MOV MOV
A, @R0 @R1, A 42H, @R1
举例:20H和30H中各装有数X和Y ,要把他们的内容进行交换。 MOV MOV MOV A, 20H, 30H, 20H ; (20H) 30H ; (30H) A , 30H A 20H A
(1)采用DPTR作为基址寄存器 MOV DPTR, #2000H MOVC A, @A+DPTR ;DPTR ;PC A 表始值 PC+1, (A+DPTR)
(2)采用PC作为基址寄存器 ORG 1FFBH 24data ADD A, #data 83H MOVC A, @A+PC 80FEH SJMP $ 00H DB 0 01H DB 1 04H DB 4 ----81H DB 81 END
MOV A, #10H ; PUSH DPH ; PUSH DPL ; MOV DPTR, #7000H ; MOVC A, @A+DPTR ; POP DPL ; POP DPH ;
A 10H DPH入栈 DPL入栈 DPTR 7000H A (10H+7000H) DPL出栈 DPH出栈
5.5 算逻运算和移位指令(49条) 此指令大多数要用到累加器A来存放一个源操作数,另 一个源操作数可以存放在任何一个工作寄存器Rn中或片内的 RAM中,也可以是指令码中的一个操作数, 分为算术运算、逻辑运算、环移指令三类。 一、算术运算指令(24) 加法、减法、十进制调整、乘除法。 1. 加法指令(13) 13 不带CY加法指令(4) ADD ADD ADD ADD A, A, A, A, Rn direct @Ri #data ; A ; A ; A ; A A+Rn A+(direct) A+(Ri) A+data
0 0 CP CS CP-----最高位进位位,CS------次高位的进位位。 OV=CP⊕CS=0⊕0=0
举例:试分析在执行下列指令后,累加器A和PSW中个 标志位的变化情况。 MOV ADD 解: 90 A= 0 1 0 1 1 0 1 0 B +) 107 data= 0 1 1 0 1 0 1 1 B ___Biblioteka Baidu_________________________________________ 197 0 1 1 0 0 0 1 0 1 B A, A, #5AH #6BH
MOV MOV MOV MOV 结果: A=18H R7=28H (20H)=38H (21H)=48H A , R7 , @R0 , 21H , #18H #28H #38H #48H
2.直接寻址型传输指令
指令的特点是指令码中至少含有一个操作数 的直接地址,直接地址处在指令的第二字节或第 三字节位置上。
MOV MOV MOV MOV MOV A , direct ; A direct , A ; A Rn , direct ; Rn @Ri ,direct ; (Ri) direct2 , direct1 ; direct2 (direct) direct (direct) (direct) (direct1)
3)无论看成是有符号的还是无符号的操作数,计算机总 是按照带符号的法则运算并产生PSW中标志位。
举例:试分析在执行下列指令后,累加器A和PSW中个 标志位的变化情况。 MOV ADD 解: 25 A= 0 0 0 1 1 0 0 1 B +) 102 data= 0 1 1 0 0 1 1 0 B _____________________________________________ 127 0 0 1 1 1 1 1 1 1 B A, A, #19H #66H
保留目的
复位后初始化引导程序地址 外部中断0 定时器0溢出中断 外部中断1 定时器1溢出中断 串行口中断 定时器2中断(80C52)
ROM
•
0000H
0000H~0002H 0003H~000AH 000BH~0012H 0013H~001AH 001BH~0022H 0023H~002AH 002B
MOV R1, #30H MOVX A, @R1 XCH A, @R1 MOVX @R1, A
; ; ; ;
R1 30H A X X 30H, A Y Y 30H(片外RAM)
举例:已知片内RAM 的50H中有0~9一个数,是把它变成 相应的ASCII码。 解:0~9的ASCII码为30H~39H,进行比较后可知,0~9和 它的ASCII码仅相差30H,故可以用半字节交换指令把0~9的 数变成相应的ASCII码,其程序为: MOV R0, #50H ; R0 50H MOV A, # 30H ; A 30H XCHD A, @R0 ; A中形成相应的ASCII码 MOV @R0, A ; ASCII码送回50H的单元
举例:已知累加器A中有一个数0~9,试用查表指令编出能找 出该数平方值得程序。 • 为了进行查表,必须确定 一张0~9的平方值得表, 该表的始地址为2000H 2000H 2001H 2002H 2003H 2004H 2005H 2006H 2007H 2008H 2009H
0 1 4 9 16 25 36 49 64 81
第四条指令是半字节交换指令,用于把累加器A中 的低四位和Ri为间址寻址单元中的低四位相互交换,各自的 高四位保持不变。
举例:外部RAM的 30H单元中有一数X和内部RAM30H 单元中有一个数Y,试编成能把他们进行交换的程序。 解:本题是一个字节交换的问题,故可以采用字节交换 的任意一条指令,若采用第三条,则
ASCII(美国标准信息交换码)表
b6b5b4 b3b2b1b0
011 0 1 2 3 4 5 6 7 8 9 : ; < = >
100
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110
A B
w x y z
自动化专业适用
字节地址
位地址
30H 2FH
通用RAM 7F 78
用户使用空间 不可位寻址
20
0F
08 00
3组 2组 1组 工作寄存器0组
位地址空间
20H 18H~1FH 10H~17H 08H~0FH 00H~07H
07
寄存器组 不可位寻址
• •
保留的存储单元 单元
ROM空间的分配 •
•
0003H
• •
002AH 0030H
5.4数据传输指令
数据传输指令共有28条,分为内部数据传输指令、外部数据传 输指令、堆栈操作指令和数据交换指令
一、内部数据传输指令(15条)
指令通式为: MOV <dest> , <src> 其中 <src> -------为源字节; <dest> -------为目的字节
N
四、堆栈操作指令(2条)
堆栈操作指令是一种特殊的数据传送指令,其特点是根据 堆栈寄存器SP中栈顶地址进行数据传送操作。 PUSH POP direct ; SP direct ; (SP) SP+1,(SP) direct, SP (direct) SP-1
举例:设(30H)=X、(40H)=Y,试利用堆栈作为媒体 编出30H和40H单元中内容交换的程序。 MOV PUSH PUSH POP POP SP, #70H 30H ; 40H ; 30H ; 40H ; ; 令栈底地址为70H SP SP+1, 71H X SP SP+1, 72H Y 30H Y,SP SP-1=71H 40H X,SP SP-1=70H 片内RAM SP 70H 71H 72H 栈底 X Y
二、外部数据传送指令(7条)
1. 十六位数据传送指令(1) MOV DPTR, #data16 ; DPTR data16
高8位送 DPH,低8位送 DPL
2. 外部ROM的字节传送指令(2) MOVC A, @A+DPTR ;A MOVC A, @A+PC ;PC A (A+DPTR) PC+1, (A+PC)
按照寻址方式分为:立即型、直接型、寄存器型、寄存 器间接型 1.立即寻址型传送指令
MOV A , #data ; A MOV Rn , #data ; Rn MOV @Ri , #data ; (Ri) MOV direct ,# data ; direct data data data data
举例:若R0=20H ,执行下列指令后A、R7、20H和 21H单元的内容是什么?
基地址寄存器+变址寄存器间接寻址 @A+DPTR (程序存储器0KB---64KB)
3. 外部的RAM的字节传送指令(4)
MOVX MOVX MOVX MOVX A, @Ri @Ri, A A, @DPTR @DPTR, A ;A ;A ;A ;A (Ri) (Ri) (DPTR) (DPTR)
举例:外部RAM 88H单元中有一数X,试编成能把X传送 到外部RAM的1818H 单元的程序。 解:外部RAM 88H单元中有一数X是不能直接传送到外部 的RAM 的1818H中,必须经过累加器A进行传送,相应的程序 为: ORG MOV MOV MOVX MOVX SJMP END 2000H R0, #88H DPTR, #1818H A, @R0 @DPTR, A $
1FFBH 1FFDH 1FFEH 2000H 2001H 2002H --2009H
; A ; A ; 停机
A+data (A+PC)
查阅存放在程序存储器中的数据表格
• 近程查表指令 MOVC
A, @A+PC
• 远程查表指令 MOVC
A, @A+DPTR
程序存储器传送(查表)
A寄存器
基地址寄存器+变址寄存器间接寻址 @A+PC (程序存储器0KB---64KB)
片内RAM SP 70H 71H 72H 栈底 X Y
举例:在程序存储器中,数据的表格为: 7010H 7011H 7012H 7013H 7014H 执行下列程序 1000H 1002H 1004H 1006H 1009H 100AH 100CH 结果为 A= 02H PC= 100EH DPTR=原值 02H 04H 06H 08H 0AH
4.寄存器间址型传送指令 这类指令共有三条: MOV MOV MOV A, @Ri ;A @Ri, A ;A direct, @Ri ;(Ri) (Ri) (Ri) direct
传送指令在片内存储器的操作功能
@Ri
direct
Rn
#data
ACC
举例:已知 (40H)=11H、(41H)=22H、R0=40H、
; R0 88H ; DPTR 1818H ; A X ; X 1818H ; 停机
外部数据存储器传送
A寄存器
寄存器间接寻址 @R1 , @R0 (外部RAM 0B~255B)
寄存器间接寻址 @DPTR (外部RAM 0kB~ 64kB)
MOVX、MOVC操作
•
片外RAM或 片外I/O芯片
MOVX
A
MOVC
程序存储器
•
• MOVX • •
@Ri,A @DPTR,A A,@Ri A, @DPTR
A,@A+PC MOVC A+@A+DPTR
三、数据交换指令(4)
数据交换指令共四条,其中字节交换指令三条,半字节 交换指令一条。 XCH A, XCH A, XCH A, XCHD A, Rn direct @Ri @Ri ; ; ; ; A A A A3~0 Rn (direct) (Ri) (Ri)3~0
举例:已知:R1=32H、(30H)=AAH、(31H)=BBH、 (32H)=CCH,试问执行下列指令后A、50H、R6、 32H、和P1口中的内容是什么?
MOV MOV MOV MOV MOV
A, 50H, R6, @R1, P1,
30H A 31H 30H 32H
3.寄存器寻址型传送指令 • 这类指令共有三条: MOV MOV MOV A, Rn ;A Rn, A ;A direct, Rn ;Rn Rn Rn direct
使用时注意以下三点:
1)参加运算的两个操作数必须是8位二进制数,并且对 PSW中的所有标志位都产生影响; 2)用户可以根据编成需要把参加的两个操作数看成是无 符号数(0~255),也可以看成是带符号的数。若看成是带符 号的数,则通常采用补码的形式(-128~+127); 例如:无符号 有符号 11010011 11010011 十进制 十进制 211 -45
R1=41H,试问下列程序执行后,累加器A、 40H 41H 42H 单元的内容是什么?
MOV MOV MOV
A, @R0 @R1, A 42H, @R1
举例:20H和30H中各装有数X和Y ,要把他们的内容进行交换。 MOV MOV MOV A, 20H, 30H, 20H ; (20H) 30H ; (30H) A , 30H A 20H A
(1)采用DPTR作为基址寄存器 MOV DPTR, #2000H MOVC A, @A+DPTR ;DPTR ;PC A 表始值 PC+1, (A+DPTR)
(2)采用PC作为基址寄存器 ORG 1FFBH 24data ADD A, #data 83H MOVC A, @A+PC 80FEH SJMP $ 00H DB 0 01H DB 1 04H DB 4 ----81H DB 81 END
MOV A, #10H ; PUSH DPH ; PUSH DPL ; MOV DPTR, #7000H ; MOVC A, @A+DPTR ; POP DPL ; POP DPH ;
A 10H DPH入栈 DPL入栈 DPTR 7000H A (10H+7000H) DPL出栈 DPH出栈
5.5 算逻运算和移位指令(49条) 此指令大多数要用到累加器A来存放一个源操作数,另 一个源操作数可以存放在任何一个工作寄存器Rn中或片内的 RAM中,也可以是指令码中的一个操作数, 分为算术运算、逻辑运算、环移指令三类。 一、算术运算指令(24) 加法、减法、十进制调整、乘除法。 1. 加法指令(13) 13 不带CY加法指令(4) ADD ADD ADD ADD A, A, A, A, Rn direct @Ri #data ; A ; A ; A ; A A+Rn A+(direct) A+(Ri) A+data
0 0 CP CS CP-----最高位进位位,CS------次高位的进位位。 OV=CP⊕CS=0⊕0=0
举例:试分析在执行下列指令后,累加器A和PSW中个 标志位的变化情况。 MOV ADD 解: 90 A= 0 1 0 1 1 0 1 0 B +) 107 data= 0 1 1 0 1 0 1 1 B ___Biblioteka Baidu_________________________________________ 197 0 1 1 0 0 0 1 0 1 B A, A, #5AH #6BH
MOV MOV MOV MOV 结果: A=18H R7=28H (20H)=38H (21H)=48H A , R7 , @R0 , 21H , #18H #28H #38H #48H
2.直接寻址型传输指令
指令的特点是指令码中至少含有一个操作数 的直接地址,直接地址处在指令的第二字节或第 三字节位置上。
MOV MOV MOV MOV MOV A , direct ; A direct , A ; A Rn , direct ; Rn @Ri ,direct ; (Ri) direct2 , direct1 ; direct2 (direct) direct (direct) (direct) (direct1)
3)无论看成是有符号的还是无符号的操作数,计算机总 是按照带符号的法则运算并产生PSW中标志位。
举例:试分析在执行下列指令后,累加器A和PSW中个 标志位的变化情况。 MOV ADD 解: 25 A= 0 0 0 1 1 0 0 1 B +) 102 data= 0 1 1 0 0 1 1 0 B _____________________________________________ 127 0 0 1 1 1 1 1 1 1 B A, A, #19H #66H
保留目的
复位后初始化引导程序地址 外部中断0 定时器0溢出中断 外部中断1 定时器1溢出中断 串行口中断 定时器2中断(80C52)
ROM
•
0000H
0000H~0002H 0003H~000AH 000BH~0012H 0013H~001AH 001BH~0022H 0023H~002AH 002B
MOV R1, #30H MOVX A, @R1 XCH A, @R1 MOVX @R1, A
; ; ; ;
R1 30H A X X 30H, A Y Y 30H(片外RAM)
举例:已知片内RAM 的50H中有0~9一个数,是把它变成 相应的ASCII码。 解:0~9的ASCII码为30H~39H,进行比较后可知,0~9和 它的ASCII码仅相差30H,故可以用半字节交换指令把0~9的 数变成相应的ASCII码,其程序为: MOV R0, #50H ; R0 50H MOV A, # 30H ; A 30H XCHD A, @R0 ; A中形成相应的ASCII码 MOV @R0, A ; ASCII码送回50H的单元
举例:已知累加器A中有一个数0~9,试用查表指令编出能找 出该数平方值得程序。 • 为了进行查表,必须确定 一张0~9的平方值得表, 该表的始地址为2000H 2000H 2001H 2002H 2003H 2004H 2005H 2006H 2007H 2008H 2009H
0 1 4 9 16 25 36 49 64 81
第四条指令是半字节交换指令,用于把累加器A中 的低四位和Ri为间址寻址单元中的低四位相互交换,各自的 高四位保持不变。
举例:外部RAM的 30H单元中有一数X和内部RAM30H 单元中有一个数Y,试编成能把他们进行交换的程序。 解:本题是一个字节交换的问题,故可以采用字节交换 的任意一条指令,若采用第三条,则
ASCII(美国标准信息交换码)表
b6b5b4 b3b2b1b0
011 0 1 2 3 4 5 6 7 8 9 : ; < = >
100
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110
A B
w x y z