打印

在网上下了一个62256程序,有个地方不懂,请各位大虾指点一

[复制链接]
2117|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2007-9-27 19:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
既然62256是外扩的数据存储器为什么还要申明unsigned char temp[30]呢?它不还是要占用单片机内部的ram 空间吗?
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define nop() _nop_()
unsigned char xdata *add;//这里定义是一定要注意数据类型,这里的类型是指地址里的内容的数据类型
unsigned char temp[30]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43};
sbit WE=P3^6;
sbit OE=P3^7;
sbit CS=P2^7;
void write()
{ uchar i;
    add=0x4000;//数据存储的起始地址
   for(i=0;i<14;i++)//连续存储14个数据
    {
    *add=temp;
    add++;
     }
    }
void read()
{uchar i,t;
   add=0x4000; //读取数据的起始地址
   for(i=0;i<14;i++)//连续读取14个数据
    {
      t=*add;
      add++;       
    }
}
void main()
{
   write();
   read();
   while(1);
}

相关帖子

沙发
xxrrpp2000| | 2007-9-28 08:47 | 只看该作者

这显然只是个测试程序。。。。

既然62256是外扩的数据存储器为什么还要申明unsigned char temp[30]呢?它不还是要占用单片机内部的ram 空间吗?

这只是测试使用的,实际上temp数组还是在单片机内部的ram里的;
需要注意的是读写程序而已。。。。。

unsigned char xdata *add;

add=0x4000;//数据存储的起始地址
   for(i=0;i<14;i++)//连续存储14个数据
    {
    *add=temp;
    add++;

很清楚呀!

使用特权

评论回复
板凳
ccjchen|  楼主 | 2007-9-28 09:41 | 只看该作者

还是不清楚

如果我不声明unsigned char temp[30],能直接把数据写进62256吗?

使用特权

评论回复
地板
xxrrpp2000| | 2007-9-28 10:06 | 只看该作者

当然可以。。。。

我修改一下:

add=0x4000;//数据存储的起始地址
   for(i=0;i<14;i++)//连续存储14个数据
    {
    //*add=temp;
      *add=i*5;
    add++;
同样可以。。。。。

事实上,定义temp变量数组,只是把这个数组整个的写进62256,靠的是unsigned char xdata *add 指针,注意该指针指向的地址是xdata;
因此首先赋地址为0x4000;
可以试着看一下反汇编,应该是用MOVX 和 DPTR实现的;

使用特权

评论回复
5
ccjchen|  楼主 | 2007-9-28 15:20 | 只看该作者

谢谢,有点明白了,不懂还是向你请教!

使用特权

评论回复
6
yuyi21ic| | 2010-10-13 10:59 | 只看该作者
上面的程序没问题?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝