8051单片机中DPTR的扩展设计

发布者:电子思维最新更新时间:2008-01-24 来源: 单片机及嵌入式系统应用关键字:机器周期  置位  datal  MUC  状态寄存器  Oregano  DPTRO  系列单片机  单片机应用 手机看文章 扫描二维码
随时随地手机看文章

  摘要首先对比分析在执行大规模数据转移时,传统805l单片机和进行DPTR扩展后的805l单片机在数据转移执行效率上的差别。通过详细分析DPTR操作所涉及的因素,具体实现对DPTR的扩展,并进行实际仿真测试。

  单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位MUC架构。北界许多技术人员在其基础上不断进行性能扩展,使得805l系列芯片不断完善,从而形成一个庞大的体系。在传统的8051系列单片机中,设置了一组双字节寄存器(数据指针DPTR),用于访问外接的64 KB数据存储器和I/O接口电路;但在现今的8051单片机应用中,特别是在嵌入式系统中,往往涉及大规模的数据转移操作,而传统805l的一组数据指针使用起来则显得捉襟见肘,因此若在8051设计中将数据指针设计为两组或多组,则在执行大规模数据转移操作时会相当简便、迅速。在这种背景下,本文首先以数据转移执行效率为衡量标准,分析了DPTR扩展的意义,并在Oregano公司的MCS8051核上实现了DPTR扩展。

  1 DPTR扩展意义

  为描述8051中的DPTR扩展的意义,我们针对实现大规模数据转移,分别对DPTR扩展前后作了对比。为使对比更加清晰明了,提出了数据转移执行效率的概念。

  数据转移执行效率v定义为进行单字节数据转移所耗费的机器周期数,即XXXX其中,n表示所转移数据字节数;t表示所耗费的机器周期,可设定其单位为字节/机器周期。

  在未进行DPTR扩展的8051中,可通过设置地址缓冲区的方法来实现大规模的数据转移。具体的例程如下:

  

  

  

  在此例程中,50H、5lH用于存放数据源地址s_adr(s_adrh为高字节,s_adrl为低字节),52H、53H用于存放数据目的地址t_adr(t_adrh为高字节,t_adr1为低字节),实现将源地址起始64字节数据转移至目的地址。在8051中,执行”字节数据移位操作耗费(14+28n+2)个机器周期,数据转移执行效率为v=n/(14+28n+2)。在本例程中,n为64,计算得出共需耗费1 808个机器周期,执行效率v约为O.0354字节/机器周期,而且在此实现方法中需占用8051的4个片内存储器(RAM)单元。

  如8051中拥有两组DPTR,并可通过特殊指令来实现DPTR选取。可设定SETDPTR0指令表示选取DPTR0,SETDPTRl指令表示选取DPTRl,#s_adr表示数据源地址,#t_adr表示数据目的地址,则程序可设计为:

  

  

  

  程序中,对于特殊指令SETDPTR0和SETDPTRl,可通过设置特殊功能寄存器(SFR)以表示DPTR状态,并对此SFR进行操作,以实现DPTR选取。因此DPTR选取指令可由3字节指令实现,则在两组DPTR情况下执行大规模数据转移需耗费(14+12n+2)个机器周期,数据转移执行效率为v=n/(14+12n+2)。在本例程中,执行64字节数据转移需耗费784个机器周期,执行效率约为0.085 64字节/机器周期。

  通过以上对比发现,拥用两组DPTR的8051比传统8051在大规模数据传输时的数据转移执行效率比为(14+28n+2)/(14+12n+2)。由图1可知,随着所转移数据量的不断加大,即n值增大时,执行效率比也不断增大,且最后趋近于2.33。

  

  

  经过以上分析得出:在805l中设置两组DPTR将会使其在数据转移执行效率上有很大提高。从资源占用方面考虑,使用扩展DPTR的方式来实现数据转移,仅需在8051中添加一个SFR,因此在805l中实现DPTR扩展,可在资源占用很少的条件下,明显加快数据转移速率。这对于在嵌入式系统应用中,进行大规模数据转移意义重大。

  2 具体设计实现

  在8051中对DPTR实现扩展,首先需要对DPTR的相关指令进行分析,再确定对其进行扩展会影响到哪些指令操作;并根据其所涉及的指令,分析相应的模块,最后针对各模块分别进行设计修改。

  2.1 相关指令分析

  在8051标准指令集的111条指令中,与DPTR有关的指令共有5类,分别为:

  ①程序存储器查表指令,“MOVC A,@A+DPTR”;

  ②片外RAM传送指令,“MOVX A,@DPTR”和“MOVX@DPTR,A”;

  ③寄存器数据传送指令,即可对DPTR进行读写操作,在8051中DPTR由DPFI(DPTR高8位字节)和DPL(DPTR低8位字节)构成,且DPH和DPL与一般的SFR一样,都可作为寄存器进行读写、压栈等操作;

  ④程序转移指令,“JMP@A+DPTR”; ⑤运算指令,可分别对DPH和DPL进行运算操作。

  通过对以上与DPTR相关的5类指令分析可知:第③类指令和第⑤类指令是将DPTR作为SFR进行操作的。第①类指令和第④类指令都是DPTR与PC指针进行的数据传送操作;第②类指令是对片外RAM地址寄存器进行的数据传送操作。因此,DPTR的操作具体涉及8051中以下3个模块:SFR读写模块、PC指针模块及片外RAM地址模块,故对DPTR的扩展也在这3个模块中进行。

  2.2 具体模块设计

  对于DPTR状态寄存器可设为dptr_sel,通过对DPTR状态标志位dps操作,实现DPTR选取。当dps=0时,选取DPTR0当dps=1时,选取DPTRl。在805l中,DPTR分别由DPH和DPL组成,因此对DPTR的选取实际上是对特殊功能寄存器DPH0、DPLO和DPHl、DPLl的选取。

  基于以上的设计思路,笔者分别在涉及DPTR操作的3个模块中进行了相应的修改。本设计所选用MCS8051核由VHDL语言设计,完全兼容标准8051指令集。

  在SFR读写模块中,应针对读、写模块分别进行修改。通过分析MCS8051设计代码可知,对于DPTR的读操作,是通过将DPTR中数据传送给数据暂存寄存器S_REGDATA,再通过对S_REGDATA进行读操作来实现的,因此可在进行DPTR数据暂存前,利用选择位dps来对DPTR进行选取。具体示意如图2所示。

  

  

  在对DPTR进行写操作时,实际上是对DPH和DPL进行操作(DPH地址为83H,DPL地址为82H),因此对DPTR进行写操作时需对DPH和DPL分别进行操作。在MCS8051中对SFR的写操作,实际上是先将要写入的数据暂存在S_DATA寄存器中,再通过将S_DATA数据分别写入DPH和DPL来实现的。因此可在S_DATA数据写入前对DPTR0和DPTRl进行选择判断,来实现对DPTR0和DPTRl的写操作,即dps=l时,将S_DATA数据写入DPHl和DPLl;dps=0时,将S_DATA数据写入DPH0和DPLO,具体结构如图3所示。

  在PC指针模块和片外RAM地址模块中,由于也是涉及DPTR的读操作,因此该模块的修改与SFR读模块中的修改类似,也是利用dps来实现DPTR0、DPTRl的选取。

  3 仿真测试

  在MCS8051中,针对以上3个模块分别作了修改,将DPTR扩展为两组,通过对DPTR_SEK(设定为SFR的E1H)中DPTR状态标志位dps进行操作,来实现对DPTR0和DPTRl的选取,并利用仿真软件Modelsim6.0进行了仿真测试。由于在实现DPTR扩展时主要针对SFR读写模块、PC指针模块和片外RAM地址模块这3个模块进行了修改,因此对于DPTR扩展的仿真测试也分3个模块进行。

  3.1 针对SFR读写模块的测试

  该模块的测试主要为测试DPTR0和DPTRl的数据传输。首先对DPTR状态标志dps位进行操作,分别选取DPTR0和DPTRl;其次分别对其进行写操作;最后将DPTR0和DPTRl中数据值依次输出寄存器A中。具体波形如图4所示。

  

  

  由图4可知,在执行指令75E100前后(即将dps复位,选取DPTR0),DPH和DPL输出(执行指令E583,E582)到寄存器A中的值不同。指令75E100执行前DPH输出为55,DPL输出为66,执行后输出分别为11和22,因此表明通过dps进行DPTR选取,读写操作无误,即对SFR读写模块的修改无误。

  3.2 针对PC指针的数据查表测试

  针对此模块,进行了一个查表测试,即向DPTR0和DPTRl中分别写入datal和data2两个数据表的地址;而后利用dps选取DPTR0和DPTRl,再分别对其进行数据查表输出。具体波形如图5所示。

  

  

  选取DPTRl(已存入data2地址,执行指令75E180)后,将寄存器A清零(执行指令7400),并将查表数据输出(执行指令93),输出数据为11H;而后选取DPTR0,再次将寄存器A清零,并进行查表输出,输出数据为44H。对比可发现输出数据与表中数据一致。由此表明,通过dps选取DPTR0和DPTRl,进行数据查表操作无误,即对PC指针模块的修改无误。

  3.3 片外RAM数据读写测试

  对于片外RAM数据读写测试,即大规模数据转移,测试方案为:首先将DPTR0和DPTRl中分别写入地址actr0和adrl,再分别对这两个地址写人数据,最后将这两个地址的数据通过DPTRO和DPTRl读出,将读出的结果与写入结果对比,具体测试波形如图6所示。

  

  

  将dps置位(执行指令75E180)选取DPR1后,将片外RAM中adrl数据读出,输出数据为77H;将dps复位(执行指令75E100)选取DPTR0后,将adr0数据读出,输出数据为44H。经对比可发现与所写入的数据一致。由此可表明,通过dps选择DPTR0和DPTRl对片外RAM进行数据读写无误,即表明对片外RAM地址模块的修改无误。

  3.4 FPGA仿真测试

  基于MCS805l这款8051微控制器,我们还进行了实际的FPGA仿真测试。首先利用RS232接口,在从计算机上将太规模数据接收并写入到MCS8051片外RAM的地址adr0中;再利用例程2所给方法,进行大规模数据转移,将数据转移写入到地址adrl中;最后通过RS232接口将adrl中数据发送到计算机。通过对比发送和接收的数据发现,笔者对于DPTR的扩展无误。

  结语

   通过扩展DPTR可使8051在大规模数据转移时的执行效率大大提高,这使得采用扩展805l作为微控制器的嵌入式系统,在大规模数据转移时,其处理速度将大大提高。利用文中所阐述的方法也可将DPTR扩展为多组,但其具体应用意义尚需进一步探讨。

 

关键字:机器周期  置位  datal  MUC  状态寄存器  Oregano  DPTRO  系列单片机  单片机应用 引用地址:8051单片机中DPTR的扩展设计

上一篇:从LCD电极读数的单片机接口技术
下一篇:8051单片机中DPTR的扩展设计

推荐阅读最新更新时间:2024-03-16 12:22

EM78系列单片机--D/A变换程序的设计
EM78系列 单片机 --D/A变换程序的设计 PORT6的输出接有一个数模转换器(D/A convert)。写一程序产生一个鋸此波。 本例的D/A Convert所采用的方式为R – 2R的方式,所使用的电阻为20K的同一品牌的排阻。因PORT6有8个位,所以在0V-VCC一共有256个阶层。 PORT6 == 6;定义。 MOV A, @0 ;將A设成0。 IOW PORT6 ;將PORT6设成OUTPUT口。 MOV PORT6, A ;PORT6输出内容为0。 AGAIN: INC PORT6 ;PORT6的值依序递增1。 JMP AGAIN
[单片机]
MCS-51单片机的程序状态寄存器PSW有什么用?
PSW是一个8位寄存器,用于设定CPU的状态和指示指令执行后的状态。 CY(PSW.7):进位标志。在执行加减运算指令时,如果运算结果的最高位(D7)发生了进位或借位,则CY由硬件自动置1。 AC(PSW.6):半进位标志位,也称为辅助标志位。在执行加减运算指令时,如果运算结果的低半字节(D3)发生了向高半字节进位或借位,则AC由硬件自动置1。 F0、F1(PSW.5 和PSW.1):用户标志位。用户可以根据需要对F0、F1赋予一定的含义,由用户置1和清0,作为软件标志。 RS1、RS0(PSW.4 和PSW.3):工作寄存器组选择控制位。通过对这两位设定,可以从4个工作寄存器组中选择一组作为当前工作寄存器。
[单片机]
MCS-51<font color='red'>单片机</font>的程序<font color='red'>状态</font><font color='red'>寄存器</font>PSW有什么用?
单片机测控技术在平板导热系数仪研制中的应用
  引言   平板导热系数仪是根据GB 10294~10295-88《绝热材料稳态热阻及有关特性的测定防护热板法和热流计法》研制的。基于如下原理:在稳定条件下,防护热板装置的中心计量区域内,在具有平行表面的均匀板状试件中,建立类似于以两个平行匀温平板为界的无限大平板中存在一维恒定热流,通过测定稳定状态下流过计量单元的一维恒定热力量Q、计量单元的面积A、试件冷、热表面的温度差△T,可计算出试件的热阻R或导热系数λ。   热阻计算公式:R=A(T1-T2)/Q   其中: A――计量面积,m2   T1、T2――试件热面、冷面的温度平均值,K   Q――加热单元计量部分的平均热流量,W   导热系数计算公式: λ=Qd/[
[单片机]
<font color='red'>单片机</font>测控技术在平板导热系数仪研制中的<font color='red'>应用</font>
意法半导体STM32U5系列MCU上新 提高物联网和嵌入式应用性能和能效
意法半导体STM32U5系列MCU上新 提高物联网和嵌入式应用性能和能效 • Ajax Systems已使用 新STM32U5 MCU开发下一代无线安保和智能家居解决方案 • 新STM32U5系列MCU是首款获得NIST嵌入式随机数熵源认证的通用MCU 2023年3月3日,中国 - 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)意法半导体近日宣布,其市场前沿的STM32 微控制器(MCU)产品家族再扩阵容,推出新款STM32U5芯片,在降低功耗的同时提高了性能,并延长了续航时间,提升了能效。 STM32U5产品已获得NIST嵌入式随机数熵源认证,
[单片机]
意法半导体STM32U5系列<font color='red'>MCU</font>上新  提高物联网和嵌入式<font color='red'>应用</font>性能和能效
STC单片机扩展P4口的应用
对于PQFP-44和PLCC-44封装的STC89系列单片机增加了4个I/O口P4口,P4口在特殊功能寄存器中的地址为E8H,可以进行位寻址,用户在使用P4口之前需要先定义地址,然后就像操作其它I/O口一样操作P4口了。 另外,P4口的P4.2和P4.3新增加了两个外部中断作为它们的第二功能,使用这两个外部中断时和使用P3.2和P3.3外部中断方法相同,P4.2(INT2)的中断向量入口地址为33H,中断序号为6,P4.3(INT3)的中断向量地址为3BH,中断序号为7,P4口的外部中断由另一个新增加的扩展中断控制寄存器来设置,请看下一个知识点。 知识点:扩展中断控制寄存器(XICON) STC89系列单片机扩展中断
[工业控制]
网络单片机PIC18F97J60的开发与应用
Microchip公司生产的PICl8F97J60单片机将PIC18系列高端8位单片机与完整的以太网控制器集成在一起,并且包括了MAC、PHY和RAM收发缓冲器。利用这一64或100引脚封装的系列器件享有的完善网络连接功能,可以实现成本低、简单易用的以太网应用方案。此外,利用Microchip公司免费提供的TCP/IP软件栈,能够大大缩短开发时间。 1 PICl8F97J60网络单片机 1.1 网络特性 PICl8F97J60系列器件具有嵌入式以太网控制器模块。这是一个完整的连接解决方案,完全实现了介质访问控制(Media Access Control,MAC)和物理层收发器(Physical Layer Tr
[单片机]
网络<font color='red'>单片机</font>PIC18F97J60的开发与<font color='red'>应用</font>
KEIL v3添加STC系列单片机库文件 方法+头文件库
增加一个单片机数据库,既可以选择STC单片机,又不影响原来数据库的使用。 操作步骤: 1.下载用于keil的STC数据库更名为STC.CDB。将文件夹中的文件放到相应的文件夹下,若没有STC文件夹,自己新建一个。或者拷贝到Keil/UV2目录下。(如果是Kile3则是UV3,Kile4则是UV4)。STC文件夹里包含各类的单片机型号有STC10 11 12 15 90 等···· 2.打开Keil文件夹下的TOOLS.ini文件,添加TOOLS.INI文件,添加STC.CDB路径。在 下面(也就是 上方)键入CDB0=UV2STC.CDB( STC ),然后保存退出即添加完毕。(如果是Kile3则是UV3,Kile4则是UV4
[单片机]
KEIL v3添加STC<font color='red'>系列单片机</font>库文件 方法+头文件库
采用8051系列单片机实现分布式静力测量系统的设计
本文介绍了一种基于单片机AT89C52的CAN总线分布式测控系统,主要阐述了系统的总体设计方案,以及控制模块和采集模块的软硬件设计,重点是系统中以单片机为核心的带有CAN总线接口的设计,解决现场各传感器得到的测量信号利用单片机进行存储和处理,然后通过与CAN控制器的通讯将信息发送到CAN总线上。 1、 CAN总线网络的技术特点 用通讯数据块编码,可实现多主工作方式,数据收发方式灵活,可实现点对点、一点对多点及全局广播等多种传输方式;可将DCS结构中主机的常规测试与控制功能分散到各个智能节点,节点控制器把采集到的数据通过CAN适配器发送到总线,或者向总线申请数据,主机便从原来繁重的底层设备监控任务中解放出来,进行更高层次的控制和
[单片机]
采用8051<font color='red'>系列单片机</font>实现分布式静力测量系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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