8051单片机中DPTR的扩展设计
时间:11-03
来源:互联网
点击:
单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以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的选取。
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的选取。
单片机 电路 51单片机 嵌入式 VHDL 仿真 FPGA 相关文章:
- 单片机智能频率信号装置(11-25)
- 单片机在医学信号检测仪中的应用(02-07)
- 单片机应用编程技巧(02-25)
- DSP与单片机通信的多种方案设计(03-08)
- 单片机与PC机串行通信的实现方法 (02-25)
- 单片机与PC通信的简化接口 (05-11)