51基址偏址的间接寻址方式详解

发布者:温馨的家庭最新更新时间:2017-11-30 来源: eefocus关键字:基址偏址  间接寻址 手机看文章 扫描二维码
随时随地手机看文章

MCS-51中的查表指令中有寻址方式是采用基址偏址的间接寻址方式
MOVC A, @A+DPTR
   我对这个命令一直不理解,@DPTR中应该是数据吧,@A中也是数据,他们相加怎么能是地址呢?

DPTR是程序地址,A是偏移量,A+DPTR仍是程序地址,@A+DPTR是该地址中的数据值。

内容 地址
… 
25 TABLE+5
16 TABLE+4
9 TABLE+3
4 TABLE+2
1 TABLE+1
0 TABLE
… 
ROM印象图

例子:根据累加器A中的数(0-5),用查表的方法求平方值。
将0-5的平方值利用DB伪指令将其存放在程序存储器的平方值表中,将表的首地址送到DPTR中,将待查的数(设在R0中)送到A中,程序如下:

MOV DPTR,#TABLE ;(1)
MOV A,R0 ;(2)
MOVC A,@A+DPTR ;(3)
……
TABLE:DB 0,4,9,16,25

要理解这个程序,要从后面看起。
DB是一条伪指令,它的用途是将其后面的数,这里也就是0,4,9,16和25放在ROM中,注意,这里的“放”不是在程序执行时,而是在程序被编译时就完成了。上面的图是存储器的映象图,其中有就有这些数,并且这些数在ROM中是顺序存放的,而0所在单元的地址就是TABLE。TABLE在这里只是一个符号,到了最终变成代码的时候(汇编时),TABLE就是一个确定的值,如1FFH或23FH等等。但在这里,用符号来表示更方便,所以就以TABLE称呼之。
来看一下程序的执行情况。
首先执行第一行,即将TABLE送入DPTR中。然后执行第二行,取出欲查表x的值,如果设这个值是2,来看一看会有什么情况。
在执行第三行时,将DPTR中的值(现在是TABLE)和A中的值相加,即得到结果TABLE+2,然后以这个值为地址,到ROM中相应单元中去取数,看一下图3-10中这个单元中的值是多少,是4,正是2的平方,所以就获得了正确的结果。
为什么这个例子要用TABLE来作说明,好像很别扭,如果我们将数据存放在1000H单元开始的5位地址中,即1000H单元放入0,1001H单元放1,1002单元放4……依此类推,不是更好理解吗?先把1000H送到DPTR,即DPTR的值是1000H,然后A获得的值是2,然后再执行第三行时,就是从1000+2=1002H单元中找数,即找到4。这样更直观些。
的确,这样更直观些,也可以这样做,但是好多时候这样做并不方便。因为在编程时并不知道哪些ROM单元是可以空出来放这些数据,如果随意定一个值可能会造成浪费或不能够放下程序。即便精确地计算好放置的位置,一旦表格前面的程序有所改动又会变得不恰当。总之,如果直接给出数值,则表格在ROM中的位置是由人为固定的,使用不方便,而比较好的方法是表格的位置是浮动的,也就是说根据表格前面的程序量的不同其位置可以发生变化。因而在程序中给出一个标号,由汇编程序根据前面所需放的程序的量来算出存放的位置。很多时候,不直接给出具体的数值,而是用标号来表示。


关键字:基址偏址  间接寻址 引用地址:51基址偏址的间接寻址方式详解

上一篇:定时器应用例子源码
下一篇:MCS-51单片机地址指针详细剖析

推荐阅读最新更新时间:2024-03-16 15:47

X25165芯片在8051系统中的应用
    摘要: C25165是美国Xicor公司生产的集看门狗、电压监控和串行EEPROM于一体的专用集成电路,文中介绍了X25165的结构,功能及工作原理,并以其在8051系统中的应用实例,给出了X25165与8051单片机的硬件接口电路和软件接口程序。      关键词: 单片机  看门狗  X25165  接口  软件      美国Xicor公司生产的Z25165芯片是集看门狗、电压监控和串行EEPROM三项功能于一体的集成电路产品。该芯片的应用将有利于简化单片机系统的结构,降低系统的成本,减少对电路板的空间需求,增加系统的可靠性。 1 芯片简介     X25
[应用]
3AT89C51单片机引脚说明及引脚图
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 引脚说明: VCC:供电电压。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行
[单片机]
3AT89C<font color='red'>51</font>单片机引脚说明及引脚图
51单片机:串口向电脑发送数据
单片机的串口配置可以使用SCT-ISP软件,方法如下,我的单片机晶振频率是11.0592Hz 试验程序如下: #include regx52.h #include intrins.h unsigned int num; //建立全局变量 void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } void
[单片机]
<font color='red'>51</font>单片机:串口向电脑发送数据
STM8L051单片机,外部时钟初始化
STM8L051单片机,外部时钟初始化,程序如下 void SYSCLK_Init(void) { CLK_HSEConfig(CLK_HSE_ON);//打开外部时钟 CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//配置分频系数 CLK_SYSCLKSourceSwitchCmd(ENABLE); //外部时钟使能 CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);//选择外部时钟 while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE) //等待外部时钟初始化完成 { } } 大致步骤如
[单片机]
STM32L051上使用RT-Threa (三、I2C通讯)
前言 经过前面两篇文章的准备,我们终于可以开始写应用代码了,在添加我们自己的驱动文件之前,本文会说明一下 RT-Thread Studio 如何添加自己的.c 和 .h文件。 然后在此基础上,完成 SHT21 温湿度传感器的 I2C 驱动移植。 ❤️ 本 RT-Thread 专栏记录的开发环境: RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手) RT-Thread记录(二、RT-Thread内核启动流程 — 启动文件和源码分析) ❤️ RT-Thread 内核篇系列博文链接: RT-Thread记录(三、RT-Thread 线程操作函数及线程管理与F
[单片机]
STM32L0<font color='red'>51</font>上使用RT-Threa (三、I2C通讯)
Nokia 5110_DS18B20显示程序
/**********Nokia 5110 LCD 显示程序***************/ /**********作者:郑文 ***************/ /**********芯片:AT89S52 **************/ /*功能:支持中文显示、字符显示、图片显示********/ #include reg52.h #include intrins.h #include english_6x8_pixel.h #include picture84x48.h #include Nokia_5110.h #include 18b20.h #define uchar unsigned
[单片机]
Nokia <font color='red'>51</font>10_DS18B20显示程序
8051单片机架构_封装及原理图
  在1976年时,英特尔首次生产了名称为MCS-48的单片机,即8位单片机。1980年晚些时候,发布了名称为MCS-51的改进版本(也是8位单片机),目前国内广泛使用的8051单片机就是属于Intel的MCS-51单片机家族,而且现在已经过了知识产权期限。   继8051单片机成功之后,许多其他半导体制造商纷纷以自己的品牌发布了使用MCS-51内核的单片机。比如Microchip、Zilog、Atmel、Philips、Siemens等公司。它们的共同点是所有这些单片机都可以使用相同的MCS-51指令集进行编程。它们在支持设备配置(例如改进的内存,是否存在ADC或DAC等)方面基本上有所不同。随后,英特尔于1982年发布了其首
[单片机]
80<font color='red'>51</font>单片机架构_封装及原理图
以C8051F020单片机为控制核心的人机交互系统设计
在现代各类仪器的开发中,人机交互功能正起着无可替代的作用。人机交互界面友好的仪器将更容易操作和使用,从而提高工作效率。液晶显示器(LCD)具有功耗低、价格低、寿命长、接口控制方便等特点,在科研与设计领域正发挥着越来越大的作用。FPGA 作为单片机外设的接口芯片,可以大大简化接口电路,通过对FPGA 进行编程,可以实现常用的译码、地址选通等功能。 本文以C8051F020 单片机与FPGA 互连系统为控制核心,以液晶显示控制器T6963C 为例,结合行扫描键盘,简述了一种人机交互功能的设计。 1 系统设计方案: FPGA 可在很大程度上扩展单片机的资源,然而人机交互功能仍应尽量减少对单片机及FPGA 的资源消耗, 以便将更多
[单片机]
以C80<font color='red'>51</font>F020单片机为控制核心的人机交互系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved