MOVC A,@A+DPTR 本指令是将ROM中的数送入A中。本指令也被称为单片机查表指令,常用此指令来查一个已做好在ROM中的表格 说明:
此条指令引出一个新的寻址办法:变址寻址。本指令是要在ROM的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起为,就成为要查找的单元的地址。
查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。
例:有一个数在R0中,要求用查表的办法确定它的平方值(此数的取值范围是0-5)
MOV DPTR,#TABLE
MOV A,R0
MOVC A,@A+DPTR
TABLE: DB 0,1,4,9,16,25
设R0中的值为2,送入A中,而DPTR中的值则为TABLE,则最终确定的ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4,显然它正是2的平方。其它数据也能类推。
标号的真实含义:从这个地方也能看到另一个问题,我们使用了标号来替代具体的单元地址。事实上,标号的真实含义就是地址数值。在这里它代表了,0,1,4,9,16,25这几个数据在ROM中存放的起点位置。而在以前我们学过的如LCALL DELAY单片机指令中,DELAY 则代表了以DELAY为标号的那段程序在ROM中存放的起始地址。事实上,CPU正是通过这个地址才找到这段程序的。
能通过以下的例程再来看一看标号的含义:
MOV DPTR,#100H
MOV A,R0
MOVC A,@A+DPTR
ORG 0100H.
DB 0,1,4,9,16,25
如果R0中的值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。这个能看懂了吧?
那为什么不这样写程序,要用标号呢?不是增加疑惑吗?
如果这样写程序的话,在写程序时,我们就必须确定这张表格在ROM中的具体的位置,如果写完程序后,又想在这段程序前插入一段程序,那么这张表格的位置就又要变了,要改ORG 100H这句话了,我们是经常需要修改程序的,那多麻烦,所以就用标号来替代,只要一编译程序,位置就自动发生变化,我们把这个麻烦事交给计算机指我们用的电脑去做了。
关键字:程序存储器 累加器 传送指令 MOVC
引用地址:
程序存储器向累加器A传送指令MOVC 举例说明
推荐阅读最新更新时间:2024-03-16 15:41
控件在智能勘验仪器装置的运用
当频率设置数据为K,参考频率为fr,相位累加器位数为N时,DDS输出的信号频率为fout=(frK)/2N.虽然理论上DDS的输出频率可从直流一直到fr/2,但考虑到滤波器的边缘陡度及输出信号的频谱纯度,实际的输出频率一般从直流到0.4fr 1 . 相位舍位条件下DDS输出频谱分析在DDS设计中,由于受到体积和成本的限制,同时也为了节省ROM的容量,人们希望在不引入过多杂散的前提下,尽可能地截去相位累加器的低有效位。对于位数为N的相位累加器,ROM的容量远小于2N,因X此寻址ROM时,累加器输出的低B位被舍去,而只用其输出的高N-B位去寻址ROM,这样就产生了DDS中的相位误差 1 . 假定数模转换器具有理想性能,并且不考虑幅
[测试测量]
PLC数据传送指令的作用和应用举例
数据传送指令可以实现各存储单元之间数据的传送和复制。 三菱PLC(FX2N为例)有6种左右传送指令供用户使用,西门子PLC(S7-1200为例)有4种左右(主要看是否严格区分)。 本文以例题的形式详解三菱PLC的MOV和西门子1200的MOVE。 一、传送指令作用 传送指令可以将数据传送到指定目标。 它作用广泛:可以用传送指令完成对存储单元的清零,对电动机等设备的启动和停止,把数据传送给数据寄存器用来进行数据处理(比如加减乘除计算等),把数据传给数码显示器进行数码显示等等。 二、应用举例 (一)三菱FX2N PLC为例 例:有4台电动机,分别由Y0,Y1,Y2,Y3驱动,启动信号为X4,停止信号为X5,请使用MOV指令完成
[嵌入式]
三菱PLC传送与比较应用指令
系列PLC 的数据传送、比较类指令共10条,指令功能编号为FNC10~FNC19。它们是数据处理类程序中使用十分频繁的指令。 一、比较指令
比较指令包括比较CMP(Compare)和区间比较ZCP(Zone Compare),比较结果用目的元件的状态来表示。
二、传送指令
传送指令包括传送MOV(Move)、BCD码移位传送SMOV(Shift Move)、取反传送CML(Complement Move)、数据块传送BMOV(Block Move)、多点传送FMOV(Fill Move)以及数据交换XCH(Exchange)指令。
三、数据变换指令
数据变换
[嵌入式]
单片机数据传送类指令和控制转移指令讲解
一、传送类指令 (1)片内数据传送指令 (16条) 此类指令参入的源操作数和目的操作数有 #data/A/Rn/@Ri/direct 五个,其不同组合,共有 15 条指令 (2)片外数据传送指令 (4条) 当你想把一个数送到单片机外部扩展 RAM 的某个单元或外部扩展 I/O 口某个端口,或者你想从该 单元、端口将数据取回到单片机内部的时候,就要用到片外数据传送指令。 MOVX A , @Ri ; A ((Ri)) 片外 MOVX @Ri , A ; (Ri) 片外 A MOVX A , @DPTR ; A ((DPTR)) 片外 MOVX @DPTR , A ; (DPTR) 片外 A
[单片机]
ATmega128 Flash程序存储器
ATmega128具有128K字节的在线编程Flash。因为所有的AVR指令为16位或32位,故尔 FLASH 组织成64K x 16 的形式。考虑到软件安全性, Flash 程序存储器分为两个区:引 导程序区和应用程序区。 Flash存储器至少可以擦写10,000 次。ATmega128的程序计数器PC为16位,因此可以寻 址64K 的程序存储器。引导程序区以及软件安全引导锁定位在 P 255“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 有详细说明。而 P 267“ 存储器编程” 则介绍了利用SPI 或JTAG 接口实现对Flash 的串行下载。 常数可以保存
[单片机]
ATmega168 Flash程序存储器
系统内可编程的Flash 程序存储器 ATmega168具有16K 字节的在线编程 Flash,用于存放程序指令代码。因为所有的AVR指令为16 位或32 位,故而 Flash 组织成8K x 16。 对于 ATmega168,用户程序的安全性要根据Flash程序存储器的两个区:引导(Boot)程序区和应用程序区分开来考虑。 ATmega48中没有分为引导程序区和应用程序区,SPM 指令可在整个Flash中执行。详见P235“存贮程序存储器(SPM)控制和状态寄存器 – SPMCSR” 与 P243 中 SPMEN 部分的描述。。 Flash存储器至少可以擦写10,000次。ATmega168的程序计数器(PC)为12位,因此可以
[单片机]
AT89C51程序存储器不用I/O口的扩展技术
简介:介绍一种采用分页式管理思想,在不增加地址线的前提下,将AT89C51单片机程序存储器进行超大规模扩展的方法;给出在超大规模程序存储空间中执行顺序程序,执行长跳转、子程序长调用或中断服务时的通用编程模式。 1 扩展方法 1.1 扩展思想 AT89系列单片机对程序存储器的基本寻址能力最大为64 KB。若要进行超大规模的存储空间扩展,最直接的方法是增加地址线(每增加1条,存储空间扩大1倍);但是由于单片机的I/O资源有限,靠增加地址线来扩展存储空间,势必会削弱单片机的I/O功能。下面以AT89C51单片机为例,介绍一种在不增加地址线的前提下,通过向单片机的内部Flash存储器写入几条简单的转换指令,来实现程序存储器大规
[单片机]