原创 8051单片机中DPTR的扩展设计

2009-8-13 23:00 1957 5 5 分类: MCU/ 嵌入式
单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位MCU架构。业界许多技术人员在其基础上不断进行性能扩展,使得 8051系列芯片不断完善,从而形成一个庞大的体系。在传统的8051系列单片机中,设置了一组双字节寄存器(数据指针DPTR),用于访问外接的64 KB数据存储器和I/O接口电路;但在现今的8051单片机应用中,特别是在嵌入式系统中,往往涉及大规模的数据转移操作,而传统8051的一组数据指针使用起来则显得捉襟见肘,因此若在8051设计中将数据指针设计为

两组或多组,则在执行大规模数据转移操作时会相当简便、迅速。在这种背景下,本文首先以数据转移执行效率为衡量标准,分析了DPTR扩展的意义,并在Oregano公司的MCS8051核[1]上实现了DPTR扩展。

V.Zd aXc44606  1 DPTR扩展意义电子园51单片机学习网[-E.\\ Z


8[N0sB^x!i*c6H"E44606  为描述8051中的DPTR扩展的意义,我们针对实现大规模数据转移,分别对DPTR扩展前后作了对比。为使对比更加清晰明了,提出了数据转移执行效率的概念。电子园51单片机学习网'I9a(LY2bx.D/{


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

})]E k#\44606

&lxqg{&uK ae44606  在未进行DPTR扩展的8051中,可通过设置地址缓冲区的方法来实现大规模的数据转移。具体的例程如下:电子园51单片机学习网&^&t wa-Ube5x!q

电子园51单片机学习网#C {(l7i6B^yjW-j

MOVPRE:电子园51单片机学习网fLLv ~-Gb#b%o2KG
    MOV50H, #s_adrh
Y,j p.BQ1S"o44606    MOV51H, #s_adrl电子园51单片机学习网n c/C*yW S5j9?
    MOV52H,#t_adrh电子园51单片机学习网J"Xm.m^!K
    MOV53H,#t_adrl
^#_gS|'}44606    MOVR2, #64
E^ en)i T {+y3u44606  REMOVE:MOV DPH, 50H
8VD"j_P|Y44606    MOV DPL, 51H
I5S+Eg"bUD44606    MOVX A, @DPTR
!e/PH!x#Aj(RvG3H44606    INC DPTR电子园51单片机学习网 X%y e@_%J!r'd
    MOV 50H, DPH
St b(b;p5q8[44606    MOV 51H, DPL电子园51单片机学习网6J0nGH$] [4C
    MOV DPH, 52H
q { X4pld4{44606    MOV DPL, 53H电子园51单片机学习网'x}bg7cA$T$nP)E
    MOVX @DPTR,A
3~N,R.g`;CQ;^AR44606    INC DPTR电子园51单片机学习网w4U5o`vvL^+o[
    MOV 52H, DPH电子园51单片机学习网;\vp4["[
    MOV 53H, DPL电子园51单片机学习网H&jqt5T:g.w/im&}9N
    DJNZ R2, REMOVE电子园51单片机学习网]i xg*` `0G.o#E

电子园51单片机学习网@5hF%rc\N&x

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

vjw,O(q4] `"M)dx_44606

(JU {_ L%s:K44606  如8051中拥有两组DPTR,并可通过特殊指令来实现DPTR选取。可设定SETDPTR0指令表示选取DPTR0,SETDPTR1指令表示选取DPTR1,#s_adr表示数据源地址,#t_adr表示数据目的地址,则程序可设计为:电子园51单片机学习网%ATTJIzF&l{8E9gV%}

电子园51单片机学习网/h&jwl#o%x

MOVPRE:电子园51单片机学习网T~#x{7V!e+v
    SETDPTR0
5|Cd6E9W]7W*} N5|| H44606    MOVDPTR,#s_adr电子园51单片机学习网"r ~-z9O'[H/G
    SETDPTR1电子园51单片机学习网2szg!dCO+pI
    MOV DPTR,#t_adr
|,w cj}N44606    MOV R2,#64电子园51单片机学习网 mb'|;PB~.R
  REMOVE2:
$v N8u ``5H Y44606    SETDPTR0
P I9V%L%h3f44606    MOVX A,@DPTR
,b w+T*}*uG44606    INC DPTR
gOeN^4sf1K44606    SETDPTR1
eKWqj\dmw44606    MOVX @DPTR,A
{sIw|$|} p44606    INC DPTR
rw;B,Z+j5[8?%vGB44606    DJNZ R2,REMOVE2电子园51单片机学习网0mGWW*H#G


`u#aQqx44606  程序中,对于特殊指令SETDPTR0和SETDPTR1,可通过设置特殊功能寄存器(SFR)以表示DPTR状态,并对此SFR进行操作,以实现DPTR选取。因此DPTR选取指令可由3字节指令实现,则在两组DPTR情况下执行大规模数据转移需耗费(14+12×n+2)个机器周期,数据转移执行效率为v= n/(14+12×n+2)。在本例程中,执行64字节数据转移需耗费784个机器周期,执行效率约为0.085 64字节/机器周期。电子园51单片机学习网.Z.o5e7I*R0C&A7?8qJ

电子园51单片机学习网J C jpHB

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

.p Hf e8q z:[44606

数据转移执行效率对比图电子园51单片机学习网4sbX$KVI7loUE


图1  数据转移执行效率对比图

;OQ:Z xL6@5e44606 电子园51单片机学习网!ut6]'b3NH&de

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

电子园51单片机学习网j8W d ?f0E/a.?/b

 电子园51单片机学习网;y9Io3KJ,`\


0y?kU9~%P44606 2 具体设计实现电子园51单片机学习网&D ~0z)k@'F

电子园51单片机学习网{&dO JPL%WuC

  在8051中对DPTR实现扩展,首先需要对DPTR的相关指令进行分析,再确定对其进行扩展会影响到哪些指令操作;并根据其所涉及的指令,分析相应的模块,最后针对各模块分别进行设计修改。电子园51单片机学习网I(x\q)D

电子园51单片机学习网8wi ]h6fm;n PR}

  2.1  相关指令分析

I7dCq d1G44606 电子园51单片机学习网%G?v8h"Y

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

"?O@8Ya x6@44606 电子园51单片机学习网T1Bkj8Mn1~x

  ①  程序存储器查表指令,“MOVC A,@A+DPTR”;电子园51单片机学习网8@Do:E5@6N ?F


S.G3mk'v*v44606  ②  片外RAM传送指令,“MOVX A, @DPTR”和“MOVX @ DPTR , A”;电子园51单片机学习网nci`?6cW Q

电子园51单片机学习网:`\6s~$x[

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

'sm8iI2^#^k44606

c!rF0R-t:xE*l44606  ④  程序转移指令,“JMP @A+DPTR”;

8H(xI]u;G44606 电子园51单片机学习网0QC.qz2d#gRQ,j-Z

  ⑤  运算指令,可分别对DPH和DPL进行运算操作。

h G#a;pJN.TT44606 电子园51单片机学习网V]9t5Y8B,AV

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

bO5i^8n[v44606 电子园51单片机学习网)mW^2wcr%m#K{E+T[

  2.2  具体模块设计电子园51单片机学习网F.PYz-D&MO.Gk]*Z


P m:e5F8YF'C2L:ro}F44606  对于DPTR状态寄存器可设为dptr_sel,通过对DPTR状态标志位dps操作,实现DPTR选取。当dps=0时,选取DPTR0;当 dps=1时,选取DPTR1。在8051中,DPTR分别由DPH和DPL组成,因此对DPTR的选取实际上是对特殊功能寄存器DPH0、DPL0和 DPH1、DPL1的选取。

:h\GFP~3s44606

r$K;gA,dQ?5w5Z44606


电子园51单片机学习网&E ^8tlhL(f电子园51单片机学习网7hLgp.K_ k

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

Ee2t@$c*n44606 电子园51单片机学习网sl'o9M3w IG2p(vL

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

_`g+e#?*q(D%f S44606 电子园51单片机学习网5{v+f6e-b ]4r0WDd

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

_yt%D"Nr44606

图2  DPTR读模块示意图    图3  DPTR写模块结构图电子园51单片机学习网 [y1O!@9Zl


图2  DPTR读模块示意图    图3  DPTR写模块结构图

m8j0W.C I8O"j?a44606 电子园51单片机学习网?0@^5hp

  在PC指针模块和片外RAM地址模块中,由于也是涉及DPTR的读操作,因此该模块的修改与SFR读模块中的修改类似,也是利用dps来实现DPTR0、DPTR1的选取。电子园51单片机学习网#ba.[7`[H,w


n)vT7V K.Y7M44606  3  仿真测试电子园51单片机学习网0q ku9U S

电子园51单片机学习网i;X+n:flu*q

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

)u-XoX{ J.~iI44606 电子园51单片机学习网,f4VY6E#cvLt

  3.1  针对SFR读写模块的测试

t:k%~ J IM44606

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

D;c V!}:MW e44606

SFR读写测试波形电子园51单片机学习网 Jb0X X*?


图4  SFR读写测试波形电子园51单片机学习网k4zp!QR.Nq9M


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

B c&Fy6Y:b IC6{44606

5SI7\ E}e-[ ~44606 

4h ^6[1N1Ohy)N i44606

;zq)e]%Qx b$}44606 3.2 针对PC指针的数据查表测试电子园51单片机学习网VO Q^h"O

电子园51单片机学习网hWE3E0j T }%S2aO

  针对此模块,进行了一个查表测试,即向DPTR0和DPTR1中分别写入data1和data2两个数据表的地址;而后利用dps选取DPTR0和DPTR1,再分别对其进行数据查表输出。具体波形如图5所示。电子园51单片机学习网/B?!sAII


PC指针的数据查表波形

yi2?$f,mT#o44606

图5  PC指针的数据查表波形

3c*E2^2w&M!Y*s4b44606

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

7gI+ael1B(Ryr44606

@ ` ]'o:xIo XL%V44606  3.3  片外RAM数据读写测试

[ F7m#@,y ~0z44606 电子园51单片机学习网zu8RT#Q

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

HUqWV)cy8{;NR44606

片外RAM数据读写波形电子园51单片机学习网 G,zI'XIm@m


图6  片外RAM数据读写波形电子园51单片机学习网:O%_Af|%LD"@:A

电子园51单片机学习网 f M.U"qWs]

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

&HM ] x"sl#k44606

h ?q%tu!l44606


5m_"d)@K44606

3y/f1FL i%R4TY v44606  3.4  FPGA仿真测试

:J:sXk/_(P44606 电子园51单片机学习网w {6Aoo+^

  基于MCS8051这款8051微控制器,我们还进行了实际的FPGA仿真测试。首先利用RS232接口,在从计算机上将大规模数据接收并写入到MCS8051片外RAM的地址adr0中;再利用例程2所给方法,进行大规模数据转移,将数据转移写入到地址adr1中;最后通过RS232接口将 adr1中数据发送到计算机。通过对比发送和接收的数据发现,笔者对于DPTR的扩展无误。电子园51单片机学习网\'w]}'J8s7RN/Z(x6fp


Dwi3mfW,U1]+\a^S44606  结语电子园51单片机学习网"k!a8~-iT\*G

电子园51单片机学习网)AP0\ g9Q[u9W,m

  通过扩展DPTR可使8051在大规模数据转移时的执行效率大大提高,这使得采用扩展8051作为微控制器的嵌入式系统,在大规模数据转移时,其处理速度将大大提高。利用文中所阐述的方法也可将DPTR扩展为多组,但其具体应用意义尚需进一步探讨。电子园51单片机学习网Xd$|1W6Bf0e]

电子园51单片机学习网}Xrf C y;X

  参考文献

m`8n6G-o,}6Le:S44606

iM"G/V0WW44606  [1]  http://oregano.at/ip/ip12.htm.

0F5y,b-mX"rB6Cbj44606 电子园51单片机学习网z` FA/kC%Q1qw

  [2]  卢毅,赖杰. VHDL与数字电路设计[M]. 北京:科学出版社,2001:99139.电子园51单片机学习网6]PQ"W8W*GH4o


;Wr3am4R.kT3I gFj44606  [3]  吴炳胜,王桂梅.  80C51单片机原理与应用[M]. 北京:冶金工业出版社,2001.电子园51单片机学习网sMmr)x&S

电子园51单片机学习网hJx)O4a$V ]

  [4]  王春玲. VHDL设计中电路优化问题探讨[J]. 单片机与嵌入式系统应用,2006(1):6971.

u y&i*T+W)OP;t7h#a44606 电子园51单片机学习网EP p-ZS/W3axY

  [5]  关华深,罗春,罗明清. 一款SoC的功能测试系统的设计[J]. 电子工程师,2005(4):1618电子园51单片机学习网2kc |+yHfE [

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条