原创 51系统中分页技术的应用

2008-7-17 11:15 2139 7 7 分类: MCU/ 嵌入式

大家都知道,51系统最大的寻址空间是64K. 但我们可能有时候会碰到要求更大的空间内的寻址,这时就需要用到分页技术.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


在一个LED项目中,需要RAM扩展到最大.64K. 还要有标准16点阵汉字库256K.


所以在设计时候,RAM定义成0, 汉字库共分四页.页号为 1,2,3,4.5


 首先在硬件上设计好.


  RAM在第0,按正常连接方法接线.


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


汉字库芯片选用AT<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />49F040.共地址线 A0---A18。 其中A0---A15与地址线相连,A16,A17,A18用于页号选择线。如图:



 


 


A16,A17,A18CPLD芯片经过组合逻辑后得到。


CPLD内需要做的工作有:


   1.  确定写页号的地址     !HZK_PAGE=( ADD==^hF030);


   2.  锁存数据低三位    


   3.  由页号的值来确定汉字库芯片的片选信号。只要有一个不为0,片选信号即为低


               HZK_CS=!(HZK_AA16 || HZK_AA17|| HZK_AA18


   4.  RAM 的片选信号和HZK_CS 刚好是反逻辑. 即 选择汉字库,就不能对RAM进行操作.


至此 ,硬件的工作基本就完成了.下面是软件上如何进行分页操作.


 


大多数的时候,我们是对RAM进行计算和操作.


     xdata unsigned char PageAdd _at_ 0xf030;


初始化:  PageAdd = 0;


当需要读字库芯片的内容的时候:


首先要通过计算确定页号和偏移量. 计算方法略. 然后进入读字库芯片的函数.


          ReadFontDot(unsigned char page,unsigned int offset)


 


   函数内部:


  1.首先关中断 EA = 0;


  2.偏移量强制转换成指针   p=(unsigned char xdata *)offset;


  3.写页号,也就是确定A16,A17,A18的电平  PageAdd = page;


  4.连续读出32个点阵数据


for (i=0;i<040;i++)


         Dbuf = *p++ ;  /* pdata unsigned char Dbuf[32] _at_ 0x40;*/


5. 恢复页号到0    PageAdd = 0;


6. 开中断 EA = 1;


 


注意:当读字库的时候,数据是通过片内RAM进行数据中转的.先写入到片内RAM,读完字库后,再从片内RAM将数据写到外部RAM.


至此,分页的操作基本就完成了.


 


对于需要超过64K RAM或者EEPROM的操作,都可以通过这种方式进行.


这是我在工作中一点点的应用,如果有什么不到的地方,欢迎大家指正.

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /1 下一条