51单片机中直接寻址和位寻址的映射对象不一样什么意思?



8051 的内核寻址方式有:立即寻址、直接寻址、间接寻址、寄存器寻址、相对寻址、变址寻址和位寻址。

立即寻址是在指令操作数中直接给出参与运算的操作数,指令举例如下:

直接寻址指令操作数给出的是参与运算操作数的地址。直接寻址方式只能用于特殊功能寄存器、内部数据区和位地址空间,而特殊功能寄存器和位地址空间只能用直接寻址方式访问。指令举例如下:

相“与”,结果存放在 50H 单元中,其中 50H 为内部 RAM的地址)

间接寻址采用 R0 R1 前添加”@”符号来表示。假设 R1 中的数据是 40H,内部数据存储器 40H 单元的数据为

寄存器寻址对选定的工作寄存器 R7-R0、累加器 A、通用寄存器 B、地址寄存器和进位 C 中的数进行操作,其中寄存器 R7-R0 由指令码的低 3 位表示,ACCBDPTR 及进位 C 隐含在指令码中。因此,寄存器寻址也包含一种隐含寻址方式。工作寄存器工作区由状态寄存器 PSW RS1RS0 决定。指令操作数***的寄存器均指当前工作区的寄存器。 INC R0 R0 中的数据+1 写回

相对寻址是将程序计数器 PC 中的当前值与指令***字节给出的数相加,其结果作为转移指令的转移地址。转移地址也成为转移目的地址,PC 中的当前值成为基地址,指令***字节给出的数成为偏移量。由于目的地址是相对于 PC 中的基地址而言,所以这种寻址方式成为相对寻址。偏移量为带符号的数,所能表示的范围为+127--128。这种寻址方式主要用于转移指令。JC $+50H (表示若进位位 C 0,则程序计数器 PC 中的内容不改变,即不转移。若进位位 C 1,则以 PC 中的当前值及基地址,加上偏移量 50H 后得到的结果作为该转移指令的目的地址)

在变址寻址方式中,指令操作数制定一个存放变址基址的变址寄存器。变址寻址时,偏移量与变址基值相加,其结果作为操作数的地址。变址寄存器有程序计数器 PC 和地址寄存器 DPTRMOVC A @A+DPTR (表示累加器 A 为偏移量寄存器,其内容与地址寄存器 DPTR 中的内容相加,其结果作为操作数的地址,取出该单元中的数送入累加器

位寻址是指对一些可进行位操作的内部 RAM 和特殊功能寄存器进行位操作时的寻址方式。在进行位操作时,借助于进位位 C 作为位操作累加器,指令操作数直接给出该位的地址,然后根据操作码对该位进行位操作。MOV C 20H (将地址为 20H 的位操作寄存器值送入进位位 C

程序计数器 PC 寄存器为 16 位,是***用来控制指令执行顺序的寄存器,它没有寄存器地址。单片机上电或复位后,PC 值为 0,单片机从零地址开始执行程序。

累加器 ACC 是一个常用的***寄存器,指令系统中采用 A 作为累加器的助记符,常用于存放算术或逻辑运算的操作数及运算结果。

B 在乘除法运算中需要和 ACC 配合使用。MUL AB 指令把 ACC B 8 位无符号数相乘,所得的 16 位乘积的低字节存放在 A 中,高字节存放在 B 中。DIV AB 指令用 B 除以 A,整数商存放在 A 中,余数存放在 B 中。寄存器 B 还可以用作通用暂存寄存器。

堆栈指针 SP 是一个 8 位***寄存器。它指示出堆栈顶部在内部 RAM 块中的位置。系统复位后,SP 初始化位 07H,使得堆栈事实上由 08H 单元开始,考虑 08H-1FH 单元分别属于工作寄存器组 1-3,若在程序设计中用到这些区,则 SP 改变为 80H 或更大的为宜。在程序调试中,经常出现堆栈溢出的情况,为了方便找到程序故障,设置了一个记录堆栈的寄存器 SPMAX可以通过 Debug 接口读出,地址 0x1A

状态寄存器 PSW CPU 的状态寄存器。在 CPU 做算术运算或者逻辑运算时,对应的 PSW 状态位会发生改变。

ROM,存储器地址分配如下:

l 特殊功能寄存器(SFR)(地址:80H - FFH)可直接寻址

l 128B EEPROM 用于存储数据,不需要擦除操作,直接改写即可

l 2KB NVR 包含 16 个扇区,主要用于系统配置数据

沈阳芯硕科技有限公司(Shenyang IC Information Technologies Co.,Ltd.)成立于2020年,公司总部位于沈阳。随着公司业务的扩大,在深圳,广州,宁波,青岛等均设有销售分支,团队成立至今一直致力于集成电路产品的市场推广。 公司集销售,技术服务,技术开发于一体,为客户提供***解决方案与技术服务。目前,公司涉足的主要领域包括消防,家电,汽车电子,电力系统,仪器仪表等。

辽宁省沈阳市铁西区建设西路5号(14B13)
沈阳市铁西区市场监督管理局
电子产品、计算机软硬件技术开发、技术咨询、技术服务;电子元器件、电子产品、仪器仪表、计算机软硬件及外辅设备销售。(依法须经批准的项目,经相关部门批准后方可开展经营活动。)
}
 MCS-51单片机的指令系统有七种寻址方式,分别是:一、立即寻址立即寻址就是将操作数紧跟在操作码后面,与操作码一起放在指令代码段中,在程序运行时,程序直接调用该操作数,而不需要到其他地址单元中去取相应的操作数,上述的写在指令中的操作数也称作立即数。
二、直接寻址直接寻址在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。三、寄存器寻址寄存器寻址是指操作数在寄存器中,由指令操作码中的rrr三位的值和PSW中RS1及RS0的状态,选中某个工作寄存器区的某个寄存器,然后进行相应的指令操作。
四、寄存器间接寻址寄存器间接寻址是将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数。MCS-51规定R0或R1为间接寻址寄存器,它可寻址内部RAM低位地址的128个字节单元内容。还可采用数据指针(DPTR)作为间接寻址寄存器,寻址外部数据存储器的64K字节空间,但不能用本寻址方法寻址特殊功能寄存器。
五、相对寻址相对寻址以程序计数器PC的当前值(R15中的值)为基地址,指令中的地址标号作为偏移量,将两者相加后得到操作数的有效地址。六、变址寻址把变址寄存器的内容(通常是位移量)与指令地址码部分给出的地址(通常是首地址)之和作为操作数的地址来获得所需要的操作数就称为变址寻址。
七、位寻址对位地址中的内容进行位操作的寻址方式称为位寻址。由于单片机中只有内部RAM和 特殊功能寄存器的部分单元有位地址,因此位寻址只能对有位地址的这两个空间进行寻址操作。
扩展资料:MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
}

51系列单片机内部主要有四大功能模块,分别是I/O口模块、中断模块、定时器模块和串口通信模块(串行I/O口),如其结构和功能如下图:

图151单片机结构和功能图

51单片机掌握的好坏,其实就是能否正确操作这四个功能模块,而其操作的实质则又是能否对每个模块所对应寄存器的正确操纵。所以下面重点介绍一下51系列单片机内部的特殊功能寄存器(简称SFR,以下说明以此代替)。(关于什么叫特殊功能寄存器,这里先不作介绍,不懂的请查阅51单片机相关资料。)

51单片机内部共有21个SFR,其布局如图2,从图中可以看出,每个SFR占1个字节,多数字节单元中的每一位又有专用的“位名称”。这21个SFR又按是否可以位寻址分为两大部分,ACC、IE、P1等11个可以位寻址,SP、TMOD等不可以位寻址。


下面以P1、IE寄存器(可位寻)和TMOD(不可位发)为例解释一下位寻址。

能位寻址是指能够对它的每一位都可以进行位操作,如图3,如P1口接8个灯,灯阳极接正极,阴极接单片机的P1口的8个脚。现在要让接P1口第1个引脚的灯亮,程序中可以写P1=0xfe,也可以先定义deng1=P1^0,即P1口的第1位,至于为什么写P1^0,是因为KEIL软件规定的,然后deng1=0。也就是P1=0xfe和deng1=0都是可以点亮第一个灯,后者deng1=0属于位操作,前者P1=0xfe属于总线操作,也就是8个引脚一起操作。图3



下面再以IE寄存器为例进行位操作的解释。IE寄存器为中断允许寄存器,如各位的作用如图4.其中第7位EA是51单片机5个中断的总开关,如要进入任何一个中断时,需先把EA打开,因为可以进行位操作,此时程序有两种写法:1)IE=0x80(假如其它位为0,即1000 0000),也可以直接写EA=1,后者EA=1即属于位操作。这里要注意和前面P1口第1个引脚操作不同的是,前面程序中需先定义deng1=P1^0,这里程序中则不需要定义EA=IE^7,因为KEIL软件中的REG52.H头文件中已经定义好了,这里需要特别注意。

图4 IE中断允许寄存器

至于什么叫不可寻址,则是指不能单独进行每一位的操作,如TMOD定时器工作模式及工作方式寄存器,在进行操作时,只能写TMOD=0xXX。

关于能否进行位操作,可以通过查相关资料知道,当然还有个技巧就是其字节地址换成10进制后能否被“8”整除,能被“8”整除的就能进行位操作,不能被“8”整除就不能,如P1地址为90H,10进制为144 144/8=18,能被整除,所以可以位操作。再如TMOD地址为89H, 10进制为137 137/8=17.125,不能被整除,所以不可以位操作。


3、具体编程中对寄存器的注意
以上解释了位操作的概念,下面接着说明这21个SFR在具体编程中需要注意的地方。

目前单片机开发过程中主要使用两种语言,一种是汇编语言,一种是C语言。如果是使用汇编语言则21个SFR都需要理解,并且其地址这些都需要记住。如果是C语言编程就相对简单些了,由于目前C语言的通用性,绝大部分单片机开发都使用C语言,这里说以C为语言进行编程需注意的地方。

在用C编程中我们只需要撑握IP、IE、SCON、TCON、P1、P2、P3、P4、PCON TMOD、TL0、TH0、TL1、TH1、SBUF15个寄存器,如图5所示,已用红线和蓝线标出,注意红线的能进行位操作,蓝线的不能进行位操作。

}

我要回帖

更多关于 单片机直接寻址方式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信