第3章 单片机原理及接口技术讲稿第三版李朝青.docx

上传人:b****6 文档编号:6680208 上传时间:2023-01-08 格式:DOCX 页数:39 大小:123.90KB
下载 相关 举报
第3章 单片机原理及接口技术讲稿第三版李朝青.docx_第1页
第1页 / 共39页
第3章 单片机原理及接口技术讲稿第三版李朝青.docx_第2页
第2页 / 共39页
第3章 单片机原理及接口技术讲稿第三版李朝青.docx_第3页
第3页 / 共39页
第3章 单片机原理及接口技术讲稿第三版李朝青.docx_第4页
第4页 / 共39页
第3章 单片机原理及接口技术讲稿第三版李朝青.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

第3章 单片机原理及接口技术讲稿第三版李朝青.docx

《第3章 单片机原理及接口技术讲稿第三版李朝青.docx》由会员分享,可在线阅读,更多相关《第3章 单片机原理及接口技术讲稿第三版李朝青.docx(39页珍藏版)》请在冰豆网上搜索。

第3章 单片机原理及接口技术讲稿第三版李朝青.docx

第3章单片机原理及接口技术讲稿第三版李朝青

第3章指令系统及程序设计举

§3.1汇编语言

§3.1.1指令和程序设计语言

指令:

是CPU根据人的意图来执行某种操作的命令。

程序设计语言:

是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。

机器语言:

用二进制编码表示每条指令,是计算机能直接识别和执行的语言。

汇编语言:

是用助记符、符号和数字等来表示指令的程序设计语言。

它与机器语言指令是一一对应的。

§3.1.2指令格式

89C51汇编语言指令格式

操作码[目的操作数][,源操作数][;注释]

汇编语言指令对应的二进制代码格式

单字节指令

1、指令码中隐含着对某一种寄存器的操作

如:

指令“INCDPTR”的指令代码格式为:

A3H=10100011

2、由指令中的rrr三位的不同编码指定某一寄存器

如:

指令“MOVA,Rn”的指令代码格式为:

11101rrr

双字节指令

用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址。

格式为:

操作码立即数或地址

三字节指令

一个字节操作码,两个字节操作数。

格式为:

操作码立即数或地址立即数或地址

§3.2寻址方式

一、什么是寻址方式:

如何找到存放操作数的地址,把操作数提取出来的方法。

二、寻址方式的种类:

1、寄存器寻址

寄存器寻址:

由指令指出寄存器组R0~R7中的某一个或其他寄存器(A,B,DPTR等)的内容作为操作数。

例如:

MOVA,R0;(R0)→A

MOVP1,A;(A)→P1口

ADDA,R0;(A)+(R0)→A

2、直接寻址

直接寻址方式:

在指令中直接给出操作数所在存储单元的地址。

指令中操作数部分是操作数所在地址。

直接寻址方式可访问片内RAM的128个单元以及所有的SFR。

对于SFR,既可以使用它们的地址,也可以使用它们的名字。

例如:

MOVA,3AH;(3A)→A

MOVA,P1;(P1口)→A

或:

MOVA,90H;90H是P1口的地址

3、立即数寻址

立即数寻址:

指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。

例如:

MOVA,3AH;(3AH)→A

MOVA,#3AH;3AH→A

MOVDPTR,#2000H;2000H→DPTR

;(DPH)=20H

;(DPL)=00H

4、寄存器间接寻址

寄存器间接寻址:

操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。

89C51规定R0或R1为间接寻址寄存器,它可寻址内部地址RAM低位的128B单元内容。

还可采用DPTR作为间接寻址寄存器,寻址外部数据存储器的64KB空间。

例如:

将片内RAM65H单元内容47H送A,可执行指令“MOVA,@R0”。

其中R0内容为65H。

如图所示:

5、变址寻址(基址寄存器+变址寄存器间接寻址)

变址寻址:

以某个寄存器的内容为基地址,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。

89C51中采用DPTR或PC为变址寄存器,A的内容为地址偏移量。

变址寻址只能访问程序存储器,访问范围为64KB。

例如:

MOVCA,@A+DPTR;((A)+(DPTR))→A

如图所示

6、相对寻址

相对寻址:

是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。

相对寻址只出现在相对转移指令中。

当前的PC值是指执行完相对指令后的PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。

目的地址=源地址+相对转移指令字节数+rel

rel为补码表示的有符号数。

例如:

7、位寻址

位寻址:

采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。

位地址在指令中用bit表示。

例如:

CLRbit;

位地址的两种表示方法:

直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。

位寻址区域:

片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。

三、寻址空间及符号注释

1、寻址空间:

见表3-2。

表3-2操作数寻址方式和有关空间

寻址方式

寻址空间

立即数寻址

程序存储器ROM

直接寻址

片内RAM低128B、特殊功能寄存器

寄存器寻址

工作寄存器R0-R7、A、B、C、DPTR

寄存器间接寻址

片内RAM低128B、片外RAM

变址寻址

程序存储器(@A+PC,@A+DPTR)

相对寻址

程序存储器256B范围(PC+偏移量)

位寻址

片内RAM的20H-2FH字节地址、部分SFR

2、符号注释:

Rn(n=0-7):

当前选中的工作寄存器组R0-R7。

Ri(I=0,1):

作为地址指针的两个工作寄存器R0,R1。

#data:

8位立即数。

#data16:

16位立即数。

direct:

8位片内RAM单元(包括SFR)的直接地址。

addr11:

11位目的地址,用于ACALL和AJMP指令中。

addr16:

16位目的地址。

用于LCALL和LJMP指令中。

rel:

补码表示的8位地址偏移量。

范围:

-128-+127D。

bit:

片内RAM或SFR的直接寻址位地址。

@:

间接寄存器的符号。

/:

位操作指令中对该位先取反再参与操作,不影响原值。

(×):

×中的内容。

((×)):

×指出的地址单元中的内容。

→:

指令操作流程方向。

§3.3MCS-51指令系统

概述:

MCS-51指令系统由111条指令组成。

单字节指令49条

双字节指令45条

三字节指令17条。

从指令执行时间看,

单周期指令64条

双周期45条

只有乘、除指令为4个周期。

MCS-51指令系统可分为五大类

[1]数据传送指令:

28条

[2]算术运算指令:

24条

[3]逻辑运算及移位指令:

25条

[4]控制转移指令:

17条

[5]位操作指令(布尔操作):

17条

§3.3.1数据传送指令

1.以累加器A为目的操作数的指令(4条,即4种寻址方式)

汇编指令格式

机器码格式

操作

注释

MOVA,Rn;

11101rrr

(Rn)→A

将工作寄存器Rn(即R0~R7)内容传送到累加器A中

MOVA,direct;

11100101

direct

(direct)→A

将直接寻址所得的片内RAM单元内容或特殊功能寄存器中的内容传送到累加器A中

MOVA,@Ri;

1110011i

((Ri))→A

将间接寻址(Ri为R0或R1)所得的片内RAM单元内容或特殊功能积存器中的内容传送到累加器A中

MOVA,#data;

01110100

data

#data→A

将立即数传送到累加器A中

例:

MOVA,#30H;(A)=30H

MOVA,30H;(A)=11H

MOVA,@R1;(A)=11H

MOVA,R1;(A)=30H

MOVA,#30H;(A)=30H

MOVA,30H;(A)=11H

MOVA,@R1;(A)=11H

MOVA,R1;(A)=30H

2、以寄存器Rn为目的操作数的指令(3条)

汇编指令格式

机器码格式

操作

注释

MOVRn,A;

11111rrr

A→Rn

将累加器A中内容传送到工作寄存器Rn(即R0-R7)中

MOVRn,direct;

10101rrr

direct

(direct)→Rn

将直接寻址所得片内RAM单元内容或特殊功能寄存器中内容传送到工作寄存器Rn(即R0-R7)中

MOVRn,#data;

01111rrr

data

#data→Rn

将立即数传送到工作寄存器Rn(即R0-R7)中

直接寻址和立这组指令的功能是把源操作数所指定的内容送到当前工作寄存器组R0~R7中的某个寄存器。

源操作数有寄存器寻址,即数寻址三种方式。

如:

(A)=78H,(R5)=47H,(70H)=F2H,执行指令:

MOVR5,A;(A)→R5,(R5)=78H

MOVR5,70H;(70H)→R5,(R5)=F2H

MOVR5,#A3H;A3H→R5,(R5)=A3H

注意,在89C51指令系统中没有“MOVRn,Rn”传送指令。

3、以直接地址为目的操作数的指令(5条)

汇编指令格式

机器码格式

操作

注释

MOVdirect,A;

11110101

direct

(A)→direct

将累加器A中内容传送到直接地址direct所指出的片内存储单元中。

MOVdirect,Rn;

1rrr

direct

(Rn)→direct

将工作寄存器Rn(即R0-R7)中内容传送到直接地址direct所指出的片内存储单元中

MOVdirect,direct;

10000101

源direct

目的direct

(源direct)→

目的direct

将直接地址源direct所指出的片内存储单元中内容传送到直接地址目的direct所指出的片内存储单元中

MOVdirect,@Ri;

1000011i

direct

((Ri))→direct

将间接寻址(Ri为R0或R1)所得的片内RAM单元内容传送到直接地址direct所指出的片内存储单元中

MOVdirect,#data;

01110101

direct

data

#data→direct

将立即数传送到直接地址direct所指出的片内存储单元中

这组指令的功能是把源操作数所指定的内容送入由直接地址direct所指出的片内存储单元中。

源操作数有寄存器寻址,直接寻址,寄存器间接寻址和立即寻址等方式。

4、以间接地址为目的操作数的指令(3条)

汇编指令格式

机器码格式

操作

注释

MOV@Ri,A;

1111011i

(A)→(Ri)

将累加器A中内容传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中。

MOV@Ri,direct;

0101011i

direct

(direct)→(Ri)

将直接寻址所得的片内RAM单元内容或特殊功能寄存器中的内容传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中

MOV@Ri,#data;

0111011I

data

#data→(Ri)

将立即数传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中

(Ri)表示Ri中的内容为指定的RAM单元。

MOV指令在片内存储器的操作功能如图3-6示。

图3-6传送指令在片内存储器的操作功能

5、十六位数据传送指令(1条)

汇编指令格式

机器码格式

操作

注释

MOVDPTR,#data16;

0000

高位字节

低位字节

dataH→DPH

dataL→DPL

将高8位立即数dataH送入DPH,低8位立即数dataL送入DPL。

这条指令的功能是把16位常数送入DPTR。

DPTR由DPH和DPL组成。

例:

MOVDPTR#1000H;

(DPTR)=1000H,

(DPH)=10H,

(DPL)=00H

6、查表指令(2条)

汇编指令格式

机器码格式

操作

注释

MOVCA,@A+DPTR;

10010011

先(PC)+1→PC,

后((A)+(DPTR))→A

(远程查表)

MOVCA,@A+PC;

10000011

先(PC)+1→PC,

后((A)+(PC)→A

(近程查表)

上述两条指令的操作过程如图3-7所示。

图3-7程序存贮器传送(查表)

 

例:

若:

初始

ROM内容

2000H

00H

2001H

01H

2002H

09H

2003H

04H

2004H

06H

2005H

08H

2006H

FFH

2007H

66H

2008H

45H

2009H

ABH

200AH

11HH

执行下面程序段后结果如何?

MOVDPTR,#2000H;(DPTR)=2000H

MOVA,#0AH;(A)=0AH

MOVCA,@A+DPTR;(A)=((A)+(DPTR))=(200AH)

则:

(A)=(200AH)=11H

例:

若:

初始ROM内容为:

100FH

01H

1010H

02H

1011H

03H

1012H

04H

1000H

740D

MOV A,#0DH;

(A)=0DH

1002H

83

MOVCA,@A+PC;

(PC)=1002+1=1003H,

(A)=((A)+(PC))=(0D+1003)=(1010H)

(A)=02H

1003H

F8

MOVR0,A;

(R0)=(A)=02H

所以,最后结果为:

(A)=02(R0)=02(PC)=1004

7、累加器A与片外RAM传送指令(4条)

在8051指令系统中,CPU对片外RAM的访问只能用寄存器间接寻址的方式,且仅有四条指令:

汇编指令格式

机器码格式

操作

注释

MOVXA,@Ri;

1110001i

((Ri))→A

MOVXA,@DPTR;

11100000

((DPTR))→A

MOVX@Ri,A;

1111001i

(A)→(Ri)

MOVX@DPTR,A;

11110000

(A)→(DPTR)

第2,4两条指令以DPTR为片外数据存储器16位地址指针,寻址范围达64KB。

其功能是DPTR所指定的片外数据存储器与累加器A之间传送数据。

第1,3两条指令是用R0或R1作低8位地址指针,由P0口送出,寻址范围是256字节。

这两条指令完成以R0或R1为地址指针的片外数据存储器与累加器A之间的传送数据。

上述四条指令的操作如图3-8所示:

图3-8外部数据存储器传送操作

例:

若:

片内RAM(30H)=01H,片外RAM(30H)=02H,执行下面程序段后的结果如何。

MOVR1,#30H;(R1)=30H

MOVXA,@R1;(A)=02H

MOVR0,A;(R0)=(A)=02H

MOVA,@R1;(A)=((R1))=01H

MOVR2,A;(R2)=(A)=01H

8、栈操作指令(二条)

堆栈:

先进后出,后进先出。

汇编指令格式

机器码格式

操作

注释

PUSHdirect;

0000

direct

先(SP)+1→SP,

后(direct→(SP)

PUSH(入栈)指令

PUSHdirect;

0000

direct

先((SP))→direct,

后(SP)-1→SP

POP(出栈)指令

例:

MOVSP,#18H;(SP)=18H

MOVA,#30H;(A)=30H

MOVDPTR,#1000H;(DPTR)=1000H

PUSHA;(SP)=19H(19H)=30H

PUSHDPH;(SP)=1AH(1AH)=10H

PUSHDPL;(SP)=1BH(1BH)=00H

继续上例:

POPDPL;(DPL)=00H(SP)=1AH

POPDPH;(DPH)=10H(SP)=19H

POPA;(A)=30H(SP)=18H

9、交换指令(4条)

(1)字节变换指令

汇编指令格式

机器码格式

操作

注释

XCHA,Rn;

11001rrr

(A)←→(Rn)

XCHA,direct;

0101direct

(A)←→(direct)

XCHA,@Ri;

1100011i

(A)←→((Ri))

将第二操作数所指定的工作寄存器Rn(R0~R7),直接寻址和间接寻址的单元内容与累加器A中内容互换。

其操作可表示为:

A一字节源操作数一字节

例:

初始时:

(A)=34H,(30H)=11H

XCHA,30H;(A)=11H,(30H)=34H

MOVR1,#30H;(R1)=30H

XCHA,@R1;(A)=34H,(30H)=11H

(2)半字节交换指令

汇编指令格式

机器码格式

操作

注释

XCHDA,@Ri;

1101011i

(A0~3)←→((Ri)0~3)

这条指令为低半字节交换指令。

该指令将累加器A的低4位与R0或R1所指出的片内RAM单元的低4位数据相互交换,各自的高4位不变,其操作表示为:

继续上例:

XCHDA,@R1;(A)=31H;(30H)=14H

§3.3.2算术运算指令

1、不带进位加法指令(四条)

汇编指令格式

机器码格式

操作

注释

ADDA,Rn;

00101rrr

(A)+(Rn)→A

将工作寄存器内容和累加器A中的数相加,“和”存放于累加器A中

ADDA,direct;

00100101

direct

(A)+(direct)→A

将内部RAM单元内容和累加器A中的数相加,“和”存放于累加器A中

ADDA,@Ri;

0010011i

(A)+((Ri))→A

将间接寻址(Ri为R0或R1)所得的片内RAM单元中内容和累加器A中的数相加,“和”存放于累加器A中

ADDA,#data;

00100100

data

(A)+#data→A

将立即数的8位无符号二进制数和累加器A中的数相加,“和”存放于累加器A中

上述指令的执行将影响标志位AC,Cy,OV,P。

当“和”的第3位或第7位有进位时,分别将AC,CY标志位置1,否则为0。

溢出标志位OV=C7C6(异或),该标志位只有带符号数运算时才有用。

例:

若:

(A)=78H,(R0)=64H

执行ADDA,R0后,结果及PSW=?

(A):

78H=01111000B

+(R0):

64H=01100100B

(A):

DCH=11011100B

标志位:

CY=0,AC=0,OV=1,P=1,即PSW=05H

结果:

(A)=DCH(R0)=64H

2、带进位加法指令(四条)

汇编指令格式

机器码格式

操作

注释

ADDCA,Rn;

00111rrr

(A)+CY+(Rn)→A

将工作寄存器内容、CY位和累加器A中的数相加,“和”存放于累加器A中

ADDCA,direct;

00110101

direct

(A)+(direct)+CY→A

将内部RAM单元内容、CY位和累加器A中的数相加,“和”存放于累加器A中

ADDCA,@Ri;

0011011i

(A)+((Ri))+CY→A

将间接寻址(Ri为R0或R1)所得的片内RAM单元中内容、CY位和累加器A中的数相加,“和”存放于累加器A中

ADDCA,#data;

00110100

data

(A)+#data+CY→A

将立即数的8位无符号二进制数、CY位和累加器A中的数相加,“和”存放于累加器A中

本组指令的功能是同时把源操作数所指出的内容和进位标志未CY都加到累加器A中,结果存放到A中,其余的功能和上面的ADD指令相同。

本组指令常用于多字节加法。

例:

设(A)=0C3H,(R0)=0AAH,(CY)=1。

执行指令“ADDCA,R0”后的结果及标志位如何?

解:

(A):

C3H=11000011

+(CY):

1=00000001

11000100

+(R0):

AAH=10101010

(A):

6EH=01101110

标志位:

CY=1,OV=1,AC=0,

结果:

(A)=6EH,(R0)=0AAH。

例:

编程,将(30H),(31H)单元中的数与(40H),(41H)单元中的数相加,结果存于(30H),(31H)单元中。

解:

MOVA,30H

ADDA,40H

MOV30H,A

MOVA,31H

ADDCA,41H

MOV31H,A

3、带借位减法指令(四条)

汇编指令格式

机器码格式

操作

注释

SUBBA,Rn;

10011rrr

(A)-CY-(Rn)→A

将累加器A中的数减去CY位及工作寄存器内容“差”存放于累加器A中

SUBBA,direct;

10010101

direct

(A)-CY-(direct)→A

将累加器A中的数减去CY位及内部RAM单元内容“差”存放于累加器A中

SUBBA,@Ri;

1001011i

(A)-CY-((Ri))→A

将累加器A中的数减去CY位及间接寻址(Ri为R0或R1)所得的片内RAM单元中内容,“差”存放于累加器A中

SUBBA,#data;

10010100

data

(A)-CY-#data→A

将累加器A中的数减去CY位及立即数的8位无符号二进制数,“差”存放于累加器A中

这组指令的功能是从累加器A中减去源操作数所指出的数及进位位CY的值,差保留在累加器A中。

由于89C51指令系统中没有不带借位的减法指令,如需要的话,可以在“SUBB”指令前用“CLRC”指令将Cy清0,这一点必须注意。

例:

设(A)=0C9H,(R2)=54H,Cy=1。

执行指令“SUBBA,R2”的结果如何?

解:

(A)=0C9H=11001001B

-)Cy=1=00000001B

11001000B

-)(R2)=54H=01010100B

(A)=74H=01110100B

结果为:

(A)=74H

标志位为:

Cy=0AC=0OV=1P=0

4、乘法指令(1条)

汇编指令格式

机器码格式

操作

注释

MULAB;

10100100

(A)×(B)→B15-8

A7-0

将累加器A和寄存器B中两个无符号数相乘,所得16位积的低字节存放在A中,高字节存放中B中。

该指令若乘积大于0FFH,则OV置1,否则OV清0。

Cy位总是被清0。

例:

(A)=4EH,(B)=5DH,

执行指令“MULAB”后结果如何?

解:

结果为:

(B)=1CH,

(A)=56H,

表示积(BA)=1C56H,OV=1。

5、除法指令(1条)

汇编指令格式

机器码格式

操作

注释

DIVAB;

10000100

(A)/(B)的商→A

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1