原标题:教你给51单片机扩展片外RAM

上一文中扩展了单片机的程序存储器,4KB存储空间提升到64KB。其实,4K的代码空间还凑合,但是51自带的256B数据存储空间使用起来还真紧张,其中留给用户的连128B都不到,所以不得不扩展片外RAM。扩展RAM方法和扩展ROM差不多,都是占用P0/P2口做地址线,同时P0用锁存器74373分时复用地址和数据信号。

以前扩展RAM是用汇编语言访问存储器,好处是定位精准,指哪打哪,坏处就是:程序规模一大就有点难维护了,所以还得改用C实现。

对应于汇编语言用R1,R0/DPTR访问外部RAM,keil C扩展了存储类型,增加了如pdata(等同用movx @Rn访问方式)/xdata(等同于movx @DPTR访问方式)存储类型用于访问片外ram。同时,还提供了绝对地址访问的宏,如PBYTE/XBYTE,查看定义:

[cpp] view plain copy#define PBYTE((unsigned char volatile pdata*)0);

#define XBYTE((unsigned char volatile xdata*)0);

其实,也还是定义相应存储类型的指针~。

上仿真图和代码前,整理一下keil c提供访问绝对地址的方法:

1._at_定义变量:

变量类型 [存储类型] 变量名 _at_ 常数,指定变量存放在常数所指定的ram位置,注意bit型变量不能使用_at_指定位置;

2.绝对地址访问:

头文件absacc.h提供了绝对地址访问宏,用于字节/字寻址,如

val=XBYTE[0x0000];读片外ram 0x00处内存值

XBYTE[0x0200]=val;写片外ram 0x0200处内存值

扩展ram仿真图:

28dbae9d4639999bc3a0ee7503c7c69a.png

c语言版本:

c05bea89ebf35602c2ba82a33bfdfea2.png

最后看下程序运行后6264内部存储的数据:

72fdd3a6768b6ac6038401257f50faf5.png

后记:

本来想自己扩展ram的,可是ram芯片属于高速信号,自己布板就省了,还是玩泥巴去了。。。

本文章来源网络,如果原作者不支持咱们转发,请联系删除,谢谢!

技术源于积累,成功来自执着返回搜狐,查看更多

责任编辑:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐