您的位置:控制工程论坛网论坛 » 嵌入式系统 » 51系统中分页技术的应用

zhiy66

zhiy66   |   当前状态:在线

总积分:6528  2025年可用积分:0

注册时间: 2007-12-18

最后登录时间: 2012-01-11

空间 发短消息加为好友

51系统中分页技术的应用

zhiy66  发表于 2008/10/13 13:36:23      540 查看 0 回复  [上一主题]  [下一主题]

手机阅读

大家都知道,51系统最大的寻址空间是64K. 但我们可能有时候会碰到要求更大的空间内的寻址,这时就需要用到分页技术.

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

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

 首先在硬件上设计好.

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

汉字库芯片选用AT49F040.共地址线 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[i] = *p++ ;  /* pdata unsigned char Dbuf[32] _at_ 0x40;*/

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

6. 开中断 EA = 1;

 

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

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

 

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

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

1楼 0 0 回复