我们用51单片机,但是现在RAM不够用,所以想外扩RAM。51单片机里面P2口作为外扩RAM的高8位地址,P0口作为低8位的地址。我想问各位大侠,现在我想访问外扩RAM的地址为0xffe内部的数据,那么程序应该怎么写?是不是应该用 XBYTE 这个来写要寻找的外扩RAM的地址?
XBYTE[0XFFEc]=10; 这条语句是不是就是把P2,P0口的电平变成FFEC?就是相当于这个是地址,利用这个地址选中外扩RAM的这个地址内的存储单元,然后把10这个数存到这个存储单元内?
我主要想问的就是 XBYTE[ ] 这条语句是不是就是把P2,P0口的电平变成与这条语句括号内的数相一致?
就是在KEIL下面写的,你的第一句程序是定义一个 存储于外扩RAM的变量ini,它的地址是 OXFFE。
然后又定义了一个指针GpBase ,指向存储于外部RAM的变量ini。
但是下面那个GpBase [ ] 这个是什么意思? 是表示一个数组名吗?
以下是我想的,不知道对不对,麻烦给看一下,谢谢了。
unsigned char xdata sum;
XBYTE[0XFEEE]=sum;
sum=5;
这样就把变量存到绝对地址为 OXFEEE的 外扩RAM中了。
我没有用过XBYTE,这需要测试验证。GpBase 是一个指针,C语言中的指针和数组关系密切,数组名称本身就是一个指向数组第一个元素的指针。以上是验证过的。
追问我看你那个 写的 ini 的 绝对地址是 oxffe,这个能定义地址为 12位的吗? 不是定义成为16位的吗?
如果定义成为16位的,例如 定义成为 oxffee 那么 对应的P2口和P0口的电平是不是应该分别为:11111111 11101110
当然可以定义16位,0xffe=0x0ffe,P2口和P0口电平正如你分析的那样。
本回答被提问者采纳