位置:51电子网 » 技术资料 » 单 片 机

80C51原始IP核内部RAM的扩展方案

发布时间:2008/8/16 0:00:00 访问次数:1323

  引言
  
  80c51系列单片机是一类经典的8位微处理器,其设计方法和体系结构一直是其他各类单片机设计的参考典范,自从20世纪80年代面世以后,得到了极大的发展与应用。

  直到今天,市场上还有一大部分单片机应用成品将其作为处理核心。基于80c51系列单片机无知识产权保护、市场应用广泛等优点,对其进行功能拓展,既有利于经济上节约成本,也有利于成果的推广使用。而随着单片机应用日趋复杂化,传统的51系列单片机在设计上的不足逐渐显现出来。如在现有128字节内部ram基础上,处理一些比较复杂的算法就显不足。鉴于此,本文在oregano公司设计的8051 ip核(即下述mc8051)基础上,进行了对其内部ram高128字节扩展。给出一种新的扩展设计方法,实现了对与一般ram区地址空间相连的高128字节的间接寻址操作,并以此为基础,对内部ram进行了可达64 kb的扩展实现,通过了相应的软硬件仿真测试。

  1 对mc8051高位128字节的扩展设计
 
  对mc8051高位128字节的扩展设计主要分3个方面加以说明:一是传统80c51系列的内部基本结构;二是高128字节的寻址方式;三是对ip核内部的ram地址选择控制。

  1.1 传统80c51系列的内部基本结构
  
  80c51是经典的单片机系列,具有典型的单片机体系结构,由cpu系统、rom、ram、i/o口以及特殊功能寄存器sfr、2个16位定时/计数器、5个中断源和1个串口组成。针对本文所要讨论的内容,这里介绍一下80c51存储结构和寻址方式:80c51系列单片机存储器结构采用哈佛型结构,物理上共分片内外程序存储器、片内外数据存储器4个存储空间。对于数据存储器,片内外数据存储器地址彼此独立,指令寻址各自不同,这里主要关注片内数据存储单元的结构。
 
  8051单片机共有7种寻址方式,这里只对其中3种作一下简要介绍:立即寻址,操作码后的一个字节就是实际操作数本身;寄存器寻址,操作码后为某一寄存器编号,寄存器的内容为操作数;寄存器间接寻址,其与寄存器寻址的区别在于前者寄存器中的内容就是操作数,而后者寄存器中的内容为操作数地址,此地址指向的寄存器中存入的数据才是实际操作数本身。

  1.2 高128字节的寻址方式
  
  由前面介绍内容可知,mc8051内部ram分为地址相连、功能不同的两部分:低128字节的内部用户ram区和高128字节的特殊功能寄存器区(sfr)。这两部分均可用寄存器直接、间接寻址方式进行寻址操作。经过设计修改的8051,低128字节的功能和操作方式完全不变,对其高128字节,分为地址重叠和功能不同的两部分,以不同的寻址方式加以区别,控制操作。高128字节如果作为内部用户ram使用,只可以通过寄存器r0、r1进行寻址,以地址为85h的寄存器单元为例,若此时85h作为sfr,则用命令“mov 85h, #33h”;若此时作为一般内部用户ram单元,则用命令:
  mov r0,# 85h
  mov @r0,#33h
  
  在mc8051中,寄存器r0、r1只应用于寄存器间接寻址使用,即r0、r1中存储的内容为间接寻址中操作数的地址。对高128地址空间,如果作为一般的ram寄存区使用,只采用间接寻址;如果作为特殊功能寄存器区(sfr),则采取除间接寻址外的其他寻址方式。这样就可以通过只对r0、r1中内容进行条件判定,确定是否触发对高128地址空间进行一般ram数据操作。

  1.3 ip核内部的ram地址选择控制
 
  在mc8051中,对低128字节用户ram区的读写有专门的地址输出ram_address_out。由于1个字节的寻址长度为256,所以ram_address_out只取内部地址s_adr低7位,即ram_address_out<=s_adr(6 downto 0),辅以ram写使能控制,实现对低128字节的读写。这里由于要对ram区扩展成为256字节,所以用户ram区的地址应该可以寻址256字节长度。这就要求对ip核中对ram区的地址传递有相应的修改,修改后地址的具体传递过程如图1所示。
  
  一个完整的执行过程如下所述:首先cpu从rom读取指令,然后到内部状态机进行指令解释,送入译码器执行具体的数据和地址的存取操作(译码器中通过地址多路选择器adr_mux和数据多路选择器data_mux来实现对地址和数据的控制)。如果此时命令不涉及寄存器间接寻址,由图1可知,取到的ram地址就是一般8051的执行结果。如果此时进行寄存器间接寻址,则可分为两种情况:一是对高128字节的间接寻址,此时的操作目的,是要对高128字节进行一般ram的数据操作;二是除第一种情况外的一般寄存器间接寻址操作。由于sfr不能使用寄存器间接寻址,所以这两种情况可以根据r0、r1中存储的地址的最高位进行判别。
  
  第一种情况:最高位为“1”时,说明高128字节(80h~ffh)作为一般ram来使用,此时把r0、r1中的地址赋给ram地址,同时置ram使能控制ram_write_en为“1”,实现对某一高位地址的写操作。还以85h为例,执行指令“mov r0, #85h”, r0中内容变为85h,然后执行“mov @ro,#33h”,此时r0用作间接寄存器,进行间接寻址,且寄存器中的字节最高位为“1”,对ram区操作的地址就是

  引言
  
  80c51系列单片机是一类经典的8位微处理器,其设计方法和体系结构一直是其他各类单片机设计的参考典范,自从20世纪80年代面世以后,得到了极大的发展与应用。

  直到今天,市场上还有一大部分单片机应用成品将其作为处理核心。基于80c51系列单片机无知识产权保护、市场应用广泛等优点,对其进行功能拓展,既有利于经济上节约成本,也有利于成果的推广使用。而随着单片机应用日趋复杂化,传统的51系列单片机在设计上的不足逐渐显现出来。如在现有128字节内部ram基础上,处理一些比较复杂的算法就显不足。鉴于此,本文在oregano公司设计的8051 ip核(即下述mc8051)基础上,进行了对其内部ram高128字节扩展。给出一种新的扩展设计方法,实现了对与一般ram区地址空间相连的高128字节的间接寻址操作,并以此为基础,对内部ram进行了可达64 kb的扩展实现,通过了相应的软硬件仿真测试。

  1 对mc8051高位128字节的扩展设计
 
  对mc8051高位128字节的扩展设计主要分3个方面加以说明:一是传统80c51系列的内部基本结构;二是高128字节的寻址方式;三是对ip核内部的ram地址选择控制。

  1.1 传统80c51系列的内部基本结构
  
  80c51是经典的单片机系列,具有典型的单片机体系结构,由cpu系统、rom、ram、i/o口以及特殊功能寄存器sfr、2个16位定时/计数器、5个中断源和1个串口组成。针对本文所要讨论的内容,这里介绍一下80c51存储结构和寻址方式:80c51系列单片机存储器结构采用哈佛型结构,物理上共分片内外程序存储器、片内外数据存储器4个存储空间。对于数据存储器,片内外数据存储器地址彼此独立,指令寻址各自不同,这里主要关注片内数据存储单元的结构。
 
  8051单片机共有7种寻址方式,这里只对其中3种作一下简要介绍:立即寻址,操作码后的一个字节就是实际操作数本身;寄存器寻址,操作码后为某一寄存器编号,寄存器的内容为操作数;寄存器间接寻址,其与寄存器寻址的区别在于前者寄存器中的内容就是操作数,而后者寄存器中的内容为操作数地址,此地址指向的寄存器中存入的数据才是实际操作数本身。

  1.2 高128字节的寻址方式
  
  由前面介绍内容可知,mc8051内部ram分为地址相连、功能不同的两部分:低128字节的内部用户ram区和高128字节的特殊功能寄存器区(sfr)。这两部分均可用寄存器直接、间接寻址方式进行寻址操作。经过设计修改的8051,低128字节的功能和操作方式完全不变,对其高128字节,分为地址重叠和功能不同的两部分,以不同的寻址方式加以区别,控制操作。高128字节如果作为内部用户ram使用,只可以通过寄存器r0、r1进行寻址,以地址为85h的寄存器单元为例,若此时85h作为sfr,则用命令“mov 85h, #33h”;若此时作为一般内部用户ram单元,则用命令:
  mov r0,# 85h
  mov @r0,#33h
  
  在mc8051中,寄存器r0、r1只应用于寄存器间接寻址使用,即r0、r1中存储的内容为间接寻址中操作数的地址。对高128地址空间,如果作为一般的ram寄存区使用,只采用间接寻址;如果作为特殊功能寄存器区(sfr),则采取除间接寻址外的其他寻址方式。这样就可以通过只对r0、r1中内容进行条件判定,确定是否触发对高128地址空间进行一般ram数据操作。

  1.3 ip核内部的ram地址选择控制
 
  在mc8051中,对低128字节用户ram区的读写有专门的地址输出ram_address_out。由于1个字节的寻址长度为256,所以ram_address_out只取内部地址s_adr低7位,即ram_address_out<=s_adr(6 downto 0),辅以ram写使能控制,实现对低128字节的读写。这里由于要对ram区扩展成为256字节,所以用户ram区的地址应该可以寻址256字节长度。这就要求对ip核中对ram区的地址传递有相应的修改,修改后地址的具体传递过程如图1所示。
  
  一个完整的执行过程如下所述:首先cpu从rom读取指令,然后到内部状态机进行指令解释,送入译码器执行具体的数据和地址的存取操作(译码器中通过地址多路选择器adr_mux和数据多路选择器data_mux来实现对地址和数据的控制)。如果此时命令不涉及寄存器间接寻址,由图1可知,取到的ram地址就是一般8051的执行结果。如果此时进行寄存器间接寻址,则可分为两种情况:一是对高128字节的间接寻址,此时的操作目的,是要对高128字节进行一般ram的数据操作;二是除第一种情况外的一般寄存器间接寻址操作。由于sfr不能使用寄存器间接寻址,所以这两种情况可以根据r0、r1中存储的地址的最高位进行判别。
  
  第一种情况:最高位为“1”时,说明高128字节(80h~ffh)作为一般ram来使用,此时把r0、r1中的地址赋给ram地址,同时置ram使能控制ram_write_en为“1”,实现对某一高位地址的写操作。还以85h为例,执行指令“mov r0, #85h”, r0中内容变为85h,然后执行“mov @ro,#33h”,此时r0用作间接寄存器,进行间接寻址,且寄存器中的字节最高位为“1”,对ram区操作的地址就是

相关IC型号

热门点击

 

推荐技术资料

硬盘式MP3播放器终级改
    一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!