单片机原理.docx

上传人:b****5 文档编号:7472349 上传时间:2023-01-24 格式:DOCX 页数:41 大小:40.19KB
下载 相关 举报
单片机原理.docx_第1页
第1页 / 共41页
单片机原理.docx_第2页
第2页 / 共41页
单片机原理.docx_第3页
第3页 / 共41页
单片机原理.docx_第4页
第4页 / 共41页
单片机原理.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

单片机原理.docx

《单片机原理.docx》由会员分享,可在线阅读,更多相关《单片机原理.docx(41页珍藏版)》请在冰豆网上搜索。

单片机原理.docx

单片机原理

寻址方式

寻址的“址”是指操作数所在的单元地址。

绝大多数指令执行时都需要使用操作数,因此也

俄存在着到那里去取得操作数的问题。

因为在计算中只要给出单元地址,就能得到所需要的操

作数。

因此所谓寻址,其实质就是如何确定操作数单元地址的问题。

根据指令操作的需要,计算机总是提供多种寻址方式。

一般来说,寻址方式越多计算机的

筹址能力就越强,但是指令系统也就愈加复杂。

因此在设定寻址方式时应考虑到实际的需要和

可能。

单片机共有七种寻址方式,下面分别介绍。

a.寄存器寻址方式

‘-”寄存器寻址就是操作数在寄存器中,因此指定了寄存器就能得到操作数。

寄存器寻址方式

勺指令中以符号名称来表示寄存器。

例如指令:

MOVA,RO

其功能是把寄存器RO的内容传送到累加器A中。

由于操作数在RO中,因此在指令中指

起了RO,也就得到了操作数,所以是寄存器寻址方式。

寄存器寻址方式的寻址范围包括:

D四个寄存器组共32个通用寄存器。

但在指令中只能使用当前寄存器组,因此在使用前常

需通过对PSW中RS;、RS。

位的状态设置,来进行当前寄存器组的选择。

开部分专用寄存器。

例如累加器A、AB寄存器对以及数据指针DPTR等。

2.直接寻址方式

指令中操作数直接以单元地址的形式给出,就称之为直接寻址。

例如指令:

MOVA,3AH

其功能是把内部RAM3AH单元中的数据传送给累加器A。

因为直接寻址方式只能使用8位二进制地址,因此这种寻址方式的寻址范围只限于内部

RAM,具体说就是:

①低128单元。

在指令中直接以单元地址形式给出。

②专用寄存器。

专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。

应当指出,直接寻址是访间专用寄存器的唯一方法。

S.守有器间接寻址方式

寄存器寻址方式,寄存器中存放的是操作数。

而寄存器间接寻址方式,寄存器中存放的则

是操作数的地址,即操作数是通过寄存器间接得到的,因此称之为寄存器间接寻址。

寄存器间接寻址也需以寄存器符号的形式表示。

为了区别寄存器寻址和寄存器间接寻址,

在寄存器间接寻址方式中,应在寄存器的名称前面加前缀标志“@”。

假定RO寄存器的内容是3AH,则指令

MOVA,@RO

为功能是以RO寄存器内容3AH为地址,把该地址单元的内容送累加器A。

其功能示意请参

rp.@2-1。

寄存器间接寻址方式的寻址范围:

①内部RAM低128单元

对内部RAM低128单元的间接寻址,应使

用RO或RI作间址寄存器,其通用形式为

@Ri(i—0或1)。

②外部RAM64KB

对外部RAM64KB的间接寻址应使用

DPTR作间址寄存器,其形式为@DPTR。

如。

MOVXA,@DPTR,其功能是把

—。

_。

,__._-_一___、。

_。

_图2-1寄存器间接寻址示意图

DPTR指定的外部RAM单元的内容运累加一’——’””—’”—”一”一

器A。

外部RAM的低256单元是一个特殊的寻址区,除可以使用DPTR作间址寄存器寻址外,

还可使用RO或RI作间址寄存器寻址。

例如MOVXA,@RO,即把RO指定的外部RAM单

元的内容送累加器A。

此外对于堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针(SP)

作间址寄存器的间接寻址方式。

4.立即寻址方式

所谓立即寻址就是操作数在指令中直接给出。

通常把出现在指令中的操作数称之为立即

数,因此就把这种寻址方式称之为立即寻址。

为了与直接寻址指令中的直接地址相区别,在立

即数前面加“#”标志。

例如:

MOVA,#3AH

其中3AH就是立即数,指令功能是把数据3AH送累加器A。

除8位立即数外,MCS-51指令系统中还有一条16位立即寻址指令,即:

MOVDPTR,#data16

其功能是把16位立即数送数据指针DPTR。

5.位寻址方式

MCS-sl有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。

例如:

ANLC,30H

指令功能是累加位C的状态和地址为3OH的位状态进行逻辑与操作,并把结果保存在C中。

位寻址的寻址范围:

①内部RAM中的位寻址区。

单元地址为20H~ZFH,共16个单元128位,位地址是00H~

7FH(详见表1-2)。

对这128个位的寻址使用直接位地址表示。

例如:

MOVC,ZBH指令

功能是把位寻址区的ZBH位状态送累加位。

②专用寄存器的可寻址位。

可供位寻址的专用寄存器共有11个,实有寻址位83位。

对这些

寻址位在指令中有如下四种表示方法:

·直接使用位地址。

这些位地址在表1-4中已列出。

例如PSW寄存器位5地址为DSH。

·位名称表示方法。

专用寄存器中的一些寻址位是有符号名称的,例如PSW寄存器位5

是F。

标志位,则可使用F。

表示该位。

·单元地址加位的表示方法。

例如DOH单元(即PSW寄存器)位5,表示为DOH.5。

·专用寄存器符号加位的表示方法。

例如PSW寄存器的位5,表示为PSW.5。

一个寻址位有多种表示方法,初看起来有些乱,但实际上这将为程序设计带来方便。

.6.变址寻址方式

、MCS-51的变址寻址是以DPTR或PC作基址寄存器,以累加器A作变址寄存器,并以两

者内容相加形成的16位地址作为操作数地址。

例如指令:

MOVCA,@A+DPTR

其功能是把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A。

定指令执行前(A)=54H,(DPTR)一3F21H,则该指令的操作示意请参见图2-2。

变址寻址形成的操作数地址为3F21H+54H=3F75H,而3F75H单元的内容为7FH,故

该指令执行结果是A的内容为7FH。

对MCS-51指令系统的变址寻址方式作如下说明:

①变址寻址方式只能对程序存储器进行寻址,或者说它是专门针对程序存储器的寻址方式。

②变址寻址的指令只有三条:

MOVCA,@A+DPTR

MOVCA,@A+PC

JMP@A+DPTR

其中前两条是程序存储器读指令,后一条是无条件转移指令。

③尽管变址寻址方式较为复杂,但变址寻址的指令却都是一字节指令。

7.相对寻址方式

相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所采用。

在相对寻址的转移指令中,给出了地址偏移量(在MCS-51指令系统中以“rel”表示),把

PC的当前值加上偏移量就构成了程序转移的目的地址。

但这里的PC当前值是指执行完该转

移指令后的PC值,即转移指令的PC值加上它的字节数。

因此转移的目的地址可用如下公式

表示:

目的地址一转移指令地址十转移指令字节数一一I--rel

在MCS-51指令系统中,有多条相对转移指令,这些指令多数为二字节指令,但也有个别

为三字节的。

偏移量rel是一个带符号的8位H进制补码数。

所能表示的数的范围是一128~+127,因

此相对转移是以转移指令所在地址为基点,向前最大可转移(127十转移指令字节数)个单元地

址,向后最大可转移(128一转移指令字节数)个单元地址。

最后还应说明,因为在指令操作中有从右向左传送数据的约定,所以常把左边操作数称之

为目的操作数,而右边操作数称之为源操作数。

上面所讲各种寻址方式的举例中都是针对源操

作数的。

但实际上源操作数和目的操作数都有寻址的问题,例如指令:

MOV45H,RI

其源操作数是寄存器寻址方式,而目的操作数则是直接寻址方式,因此指令的功能是把按

寄存器寻址取出的RI内容再以直接寻址方式存放于内部RAM的45H单元中。

总的来说,源操作数的寻址方式多,而目的操作数的寻址方式较少,MCS一引中国的操作

数据的寻址只有寄存器寻址、直接寻址、寄存器间接寻址和位寻址共四种方式。

因此知道了源

操作数的寻址方式也就不难了解目的操作数的寻址问题了。

2.1.3单片机执行指令的过程

单片机的工作过程就是执行程序的过程。

而程序是由指令组成的,因此执行程序的过程,

就是执行指令的过程。

而指令的执行又分为取指令和执行指令两项基本内容,所以单片机的工

作过程,实际上就是周而复始地取指令和执行指令的过程。

在取指阶段中,单片机从程序存储器中取出指令操作码,送指令寄存器,再经指令译码器

译码,产生一系列的控制信号,然后进入指令执行阶段。

在指令执行阶段。

就是利用指令译码产

生的控制信号,进行本指令规定的数据操作。

为进一步说明单片机的工作过程,下面举一个程序实例进行说明。

例如为了使单片机进行

5+3的操作,需编写如下程序:

MOVA,#05H

ADDA,#03H

MOVRO,A

执行上述程序,就可以完成5十3的操作,并把相加结果8送RO寄存器中存放。

但是单片机并不能直接使用助记符式的汇编指令,因此需把助记符指令转换为二进制指

令代码。

上述程序表示如下:

┌─────┬─────────┬───────┬──────────────┐

│指令名称│助记符形式│指令代码│注释│

├─────┼─────────┼─────┬─┼──────────────┤

│立即数传送│MOVA,#05H│0ill0100│74│一个加数送累加器A│

│││00000101│05││

├─────┼─────────┼─────┼─┼──────────────┤

│加立即数│ADDA,#03H│00100100│24│累加器A内容(05)与立即数│

│││00000011│03│(03)相加,其和在A中│

├─────┼─────────┼─────┼─┼──────────────┤

│数据传送│MOVRO,A│1111正00O│FS│相加结果送寄存器RO│

└─────┴─────────┴─────┴─┴──────────────┘

2.1.4指令中符号意义说明

在分类介绍指令之前,先把指令中使用的一些符号意义作简单说明。

Rn——当前寄存器组的8个通用寄存器RO~R7,所以n—0~7。

Ri——可用作间接寻址的寄存器,只能是RO、RI两个寄存器,所以i=0,1。

direct——内部RAM的8位地址。

既可以是内部RAM的低128个单元地址,也可t

用寄存器的单元地址或符号。

因此在指令中dire。

t表示直接寻址方式。

#data——8位立即数。

#data16——16位立即数。

addrl6——16位目的地址,只限于在LCALL和LJMP指令中使用。

addrll——11位目的地址,只限于在ACALL和AJMP指令中使用。

rel——相对转移指令中的偏移量,为8位带符号补码数。

DPTR——数据指针。

bit——内部RAM(包括专用寄存器)中的直接寻址位。

A——累加器。

(直接寻址方式的累加器表示为ACC)。

B——B寄存器。

C——进位标志位,它是布尔处理机的累加器,也称之为累加位。

@——间址寄存器的前缀标志。

/——加在位地址的前面,表示对该位状态取反。

(X)——某寄存器或某单元的内容。

《X》——由X间接寻址的单元中的内容。

———箭头左边的内容被箭头右边的内容所取代。

2.2数据传送类指令

MCS-51指令系统中,各类数据传送指令共有29条,分述如下。

2.2.l内部RAM数据传送指令组

单片机芯片内部是数据传送最为频繁的部分,有关的传送指令也最多,包括寄存器

器、RAM单元以及专用寄存器之间的相互数据传送。

1.立即教传进指令

8位立即数传送指令共四条:

MOVA,#data;A←data

MOVdirect,#data;direct←data

MOVRn,#dsts;Rn ← data

MOV@Ri,#data;(Ri)←data

这四条指令的功能都是实现8位立即数的传送,把立即数传送到不同寻址方式的内部

RAM单元中。

此外还有16位立即数传送指令一条:

MOVDPTR,#data16;DPTR←data16

这条指令的功能是将立即数的高8位送DPH,立即数的低8位送DPL。

这条指令是三字

节指令,即操作码占一个字节,16位立即数占两个字节,其排列顺序为:

这种高位在前低位在后的存放顺序与Z-80指令系统规定的顺序正好相反。

请学习过Z-

90的读者注意。

.内部RAM单元之间的数据传送指令

内部RAM单元之间的数据传送指令共有五条:

MOVdirect2,directl;directZ←(directl)

MOVdirect,Rn;direct←(Rn)

MOVRn,directl;Rn←(direct)

MOVdirect,@Ri;direct←((Ri))

MOV@Ri,directl;(Ri)←(direct)

内部RAM单元之间的数据传送可以使用直接寻址、寄存器寻址以及寄存器间接寻址方

式。

例如下列指令均属于内部RAM单元之间的数据传送指令:

MOVP2,R2;寄存器RZ内容送P2口

MOVA0H,R2;寄存器RZ内容送P2口,AOH是P2口的地址。

MOVDOH,@R1;RI内容所指定的内部RAM单元的内容送PSW

寄存器,DOH是PSW的单元地址。

MOVR5,70H;内部RAM70H单元的内容送R5

3.累加器的数据传送指令

与累加器有关的数据传送指令共有六条:

MOVA,Rn;A←(Rn)

MOVRn,A;Rn←(A)

MOVA,direct;A←(direct)

MOVdirect,A;direct←(A)

MOVA,@Ri;A←((Ri))

MOV@Ri,A;(Ri)←(A)

这六条指令用于实现累加器与不同寻址方式的内部RAM单元之间的数据传送。

2.2.2外部RAM数据传进指令组

对外部RAM单元只能使用间接寻址方法,但可以分别使用DPTR和Ri作间址寄存器,

因此相应地就有两组指令:

1.使用DPTR进行间接寻址

MOVXA,@DPTR;A←《DPTR))

MOVX@DPTR,A;(DPTR)←(A)

由于DPTR是16位地址指针,因此指令的寻址范围为64KB。

2.使用Ri进行间接寻址

MOVXA,@Ri;A←((Ri))

MOVX@Ri,A;(Ri)←(A)

i—(0,1),由于RO和RI是8位地址指针,因此指令的寻址范围只限于外部RAM的低

256个单元。

对外部RAM数据传送指令作如下说明:

①MCS-51指令系统中没有专用的存储器读写指令,实际上外部数据存储器数据传送指令

就是外部RAM的读写指令。

②外部RAM数据传送指令与内部RAM数据传送指令相比,在指令助记符中增加了“X”,

“X”是代表外部之意。

③外部RAM的数据传送,只能通过累加器A进行。

2.2.3程序存储器数据传送指令组

这里所说的程序存储器既包括内部程序存储器,也包括外部程序存储器。

由于对程序存储器只能读而不能写,因此其数据传送都是单向的,即从程序存储器读出数

据,并且只能向累加器A传送。

这类指令共两条:

MOVCA,@A+DPTR;A←((A)十(DPTR))

MOVCA,@A+PC;A←((A)+(PC))

这两条指令都是一字节指令,并且都为变址寻址方式,其寻址范围为64KB。

这两条指令通常用于查表操作,因此可以看成是查表专用指令。

虽然这两条指令的功能完

”全相同,但在具体使用中却有一点差异。

前一条指令的基址寄存器DPTR能提供16位基址,

而且还能在使用前给DPTR赋值,因此查表范围可达整个程序存储器的64KB空间。

使用起来

比较方便;而后一条指令是以PC作为基址寄存器,虽然也能提供16位基址,但其基址值是固

定的,由于A的内容为8位无符号数,因此只能在当前指令下面的256个地址单元范围内进

行查表。

例如以查表方法把累加器中的十六进制数转换为ASCll码,并送回累加器中。

其查表程

序如下:

2000HBA:

INCA

2001MOVCA,@A+PC

2002RET

20C3DB30H;以下是十六进制数ASCll码表

2004DB31H

2005DB32H

...

...

...

200CDB39H

200DDB41H

200EDB42H

200FDB43H

2010DB44H

2011DB45H

2012DB46H

’由于数据表紧跟MOVC指令之后,因此以PC作为基址寄存器比较方便。

假定A中的十

,六进制数为00H,加1后为01H,取出MOVC指令后,(PC)一2002H,(A)+(PC)一2003H,从

2Q03H单元取得数据送A,则(A)=30H,此即为十六进制数0的ASCll码值。

查表之前A加1

是因为MOVC指令与数据表之间有一个地址单元的间隔(RET指令)。

2·2·4数据交换指令组。

数据交换主要是在内部RAM单元与累加器A之间进行,有整字节和半字节两种交换。

1.医字节交换指令

;地址单元与累加器A进行8位数据交换,共有如下三条指令:

XCHA,Rn;(A)←→(Rn)

.XCHA,direct;(A)←→(direct)

,XCHA,@Ri;(A)←→((Ri))

2.半字节交换指令

地址单元与累加器A进行低4位的半字节数据交换。

只有一条指令:

XCHDA,@Ri;(A)3~0←→((RI))3~0

3.累加器高低半字节交换搭个

只有一条指令:

SWAPA;(A)3~0←→(A)3~0

由于十六进制数或BCD码都是以四位二进制数表示,因此XCHD和SWAP指令主要用

于实现十六进制数或BCD码的数位交换。

例如:

(RO)=20H,(A)=3FH,(20H)=75H,

执行指令XCHDA,@RO后,(RO)=20H,(A)=35H,(20H)=7FH。

2.2.5堆栈操作指令组

堆栈操作有进栈和出栈两种,因此相应有两条指令:

进栈指令:

PUSHdirect;SP←(SP)+1,(SP)←(direct)

其功能为内部RAM低128单元或专用寄存器内容送栈顶单元。

出栈指令:

POPdirect;direct←((SP)),SP←(SP)-1

其功能为栈顶单元内容送内部RAM低128单元或专用寄存器。

堆栈操作实际上是通过堆栈指示器SP进行的读写操作,是以SP为间址寄存器的间接寻

址方式。

但因为SP是唯一的,所以在指令中把通过SP的间接寻址的操作数项隐含了,只表示

出直接寻址的操作数项。

2.2.6数据传送类指令汇总及说明

数据传送类29条指令的简单情况汇总于表2-1。

表2-1#据传送类指令一览表

┌────────────┬──────────┬───┬───┐

│指令│功│字节数│机器│

││能简述││周期数│

├────────────┼──────────┼───┼───┤

│MOVA,Rn│寄存器送累加器│l│1│

├────────────┼──────────┼───┼───┤

│MOVRn.A│累加器送寄存器│1│1│

├────────────┼──────────┼───┼───┤

│MOVA,@Ri│内部RAM单元送累加器│l│l│

├────────────┼──────────┼───┼───┤

│MOV@Ri,A│累加器送内部RAM单元│l│1│

├────────────┼──────────┼───┼───┤

│MOVA,#data│立即数送累加器│2│且│

└────────────┴──────────┴───┴───┘

┌──────────────┬──────────────────┬───┬───┐

│指令│功能简述│字节数│机器│

││││周期数│

├──────────────┼──────────────────┼───┼───┤

│MOVA,direct│直接寻址单元送累加器│2,│1│

├──────────────┼──────────────────┼───┼───┤

│MOVdirect,A│累加器送直接寻址单元│2│1│

├──────────────┼──────────────────┼───┼───┤

│MOVRn,#data│立即数送寄存器│2│1│

├──────────────┼──────────────────┼───┼───┤

│MOVdirect.#data│立即数送直接寻址单元│3│2│

├──────────────┼──────────────────┼───┼───┤

│MOV@Xi,#data│立即数送内部RAM单元│2│且│

├──────────────┼──────────────────┼───┼───┤

│mVdirect,Rn│寄存器送直接寻址单元│2│2│

├──────────────┼──────────────────┼───┼───┤

│MOVRn,direct│直接寻址单元送寄存器│2│2│

├──────────────┼──────────────────┼───┼───┤

│MOVdirect,@Xi│内部RAM单元送直接寻址单元│2│2│

├──────────────┼──────────────────┼───┼───┤

│MOV@Ri,direct│直接寻址单元送内部RAM单元│2│2│

├──────────────┼──────────────────┼───┼───┤

│MUVdirectZ,directl│直接寻址单元送直接寻址单元│3│2│

├──────────────┼──────────────────┼───┼───┤

│MOVDPTR,#data16│16位立即数送数据指针│3│2│

├──────────────┼──────────────────┼───┼───┤

│MOVXA,@Ri│外部RAM单元送累加器(8位地址)│l│2│

├──────────────┼──────────────────┼───┼───┤

│MOVX@B,A│累加器送外部RAM单元(8位地址)│且│2│

├──────────────┼──────────────────┼───┼───┤

│MOVXA,@DPTR│外部RAM单元送累加器(16位地址)│且│2│

├──────────────┼──────────────────┼───┼───┤

│MO

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

当前位置:首页 > 农林牧渔 > 林学

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

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