微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机的寻址方式

51单片机的寻址方式

时间:11-19 来源:互联网 点击:

是始终跟踪着程序的执行的。也就是说,PC的值是随程序的执行情况自动改变的,我们不可以随便的给PC赋值。而DPTR是一个数据指针,我们就可以给空上数据指针DPTR进行赋值。我们再看指令MOVC A,@A+PC这条指令的意思是将PC的值与累加器A的值相加作为一个地址,而PC是固定的,累加器A是一个8位的寄存器,它的寻址范围是256个地址单元。讲到这里,大家应可明白,MOVC A,@A+PC这条指令的寻址范围其实就是只能在当前指令下256个地址单元。所在,这在我们实际应用中,可能就会有一个问题,如果我们需要查询的数据表在256个地址单元之内,则可以用MOVC A,@A+PC这条指令进行查表操作,如果超过了256个单元,则不能用这条指令进行查表操作。刚才我们已说到,DPTR是一个数据指针,这个数据指针我们可以给它赋值操作的。通过赋值操作。我们可以使MOVC A,@A+DPTR这条指令的寻址范围达到64K。这就是这两条指令在实际应用当中要注意的问题。

变址寻址方式是MCS-51单片机所独有的一种寻址方式。

六、位寻址

80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0。

位寻址的范围,也就是哪些部份可以进行位寻址:

1、我们在学习51单片机的存储器结构时,我们已知道在单片机的内部数据存储器RAM的低128单元中有一个区域叫位寻址区。它的单元地址是20H-2FH。共有16个单元,一个单元是8位,所以位寻址区共有128位。这128位都单独有一个位地址,其位地址的名字就是00H-7FH。

这里就有一个比较麻烦的问题需要大家理解清楚了。我们在前面的学习中00H、01H。。。。7FH等等,所表示的都是一个字节(或者叫单元地址),而在这里,这些数据都变成了位地址。我们在指令中,或者在程序中如何来区分它是一个单元地址还是一个位地址呢?这个问题,也就是我们现在正在研究的位寻址的一个重要问题。其实,区分这些数据是位地址还是单元地址,我们都有相应的指令形式的。这个问题我们在后面的指令系统学习中再加以论述。

2、对专用寄存器位寻址。这里要说明一下,不是所有的专用寄存器都可以位寻址的。具体哪些专用寄存器可以哪些专用寄存器不可以,请大家回头去看看我们前面关于专用寄存器的相关文章。一般来说,地址单元可以被8整除的专用寄存器,通常都可以进行位寻址,当然并不是全部,大家在应用当中应引起注意。

七、相对寻址

把指令中给定的地址偏移量与本指令所在单元地址(PC内容)相加得到真正有效的操作数所存放的地址。

举“李同学20岁,张同学比李同学大3岁”的例子。

JC 60H ;设(PC) = 2000H,

则当C = 1时,

转移的目的地址 = (PC)+ 2 + 60H

专用寄存器的位寻址表示方法:

下面我们以程序状态字PSW来进行说明

1、直接使用位地址表示:看上表,PSW的第五位地址是D5,所以可以表示为D5H

MOV C,D5H

2、位名称表示:表示该位的名称,例如PSW的位5是F0,所以可以用F0表示

MOV C,F0

3、单元(字节)地址加位表示:D0H单元位5,表示为DOH.5

MOV C,D0H.5

4、专用寄存器符号加位表示:例如PSW.5

MOV C,PSW.5

这四种方法实现的功能都是相同的,只是表述的方式不同而已。

例题:

1. 说明下列指令中源操作数采用的寻址方式。

MOV R5,R7 答案:寄存器寻址方式

MOV A,55H 直接寻址方式

MOV A,#55H 立即寻址方式

JMP @A+DPTR 变址寻址方式

MOV 30H,C 位寻址方式

MOV A,@R0 间接寻址方式

MOVX A,@R0 间接寻址方式

改错题

请判断下列的MCS-51单片机指令的书写格式是否有错,若有,请说明错误原因。

MOV R0,@R3 答案: 间址寄存器不能使用R2~R7。

MOVC A,@R0+DPTR 变址寻址方式中的间址寄存器不可使用R0,只可使用A。

ADD R0,R1 运算指令中目的操作数必须为累加器A,不可为R0。

MUL AR0 乘法指令中的乘数应在B寄存器中,即乘法指令只可使用AB寄存器组合。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top