8051单片机中DPTR的扩展设计

2008-01-24 09:36:41来源: 单片机及嵌入式系统应用

  摘要首先对比分析在执行大规模数据转移时,传统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  系列

编辑:吕海英 引用地址:http://www.eeworld.com.cn/designarticles/mcu/200801/article_17655.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
机器周期
置位
datal
MUC
状态寄存器
Oregano
DPTRO
系列

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved