微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机对62256读写操作!为何读写数据只能读写到0x03ff?

单片机对62256读写操作!为何读写数据只能读写到0x03ff?

时间:10-02 整理:3721RD 点击:
#include <reg51.h>           //51芯片管脚定义头文件
#include <intrins.h>         //内部包含延时函数 _nop_();
#include <absacc.h>          //绝对地址访问的头文件
#define uchar unsigned char
#define uint  unsigned int
sbit WE=P3^6;               //62256接到单片机的控制引脚!  ALE接74HC573对低8位数据锁存!P2接高7位数据!(A8-A14)
sbit CE=P2^7;
sbit RD=P3^7;
uint  RAMADDR=0x0300;   //当地址定义大于0x0400数据就读不出?
#define addr 0x0313
#define RAM_62256 XBYTE[RAMADDR]  //62256地址范围0000H-7FFFH
bit  ERR;
uchar num,temp,t;
char code reserve[3]_at_ 0x3b;    //保留0x3b开始的3个字节
uchar tab[]={0x20,0x43,0x21,0x22,0x13,0x34,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x21};
uchar shuju[100];
void delay(uint k)
{
uint x,y;
  for(x=0;x<k;x++)
   for(y=0;y<1000;y++);
}
void init()
{
EA=1;TMOD=0x20;
SCON=0x40;PCON=0x00;
TH1=TL1=0xfa;
TR1=1;
}
void send(unsigned char dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
void write()
{
   uint i=0;
    RAMADDR= 0x0400;           //62256首地址
   while(RAMADDR != addr)  //62256末地址
   {
     RAM_62256=tab[i];          //数据写入62256
     _nop_();
     RAMADDR++;              //修改62256地址
  i++;
   }
}
void read()
{
      uint i=0;
      RAMADDR =  0x0400;       //62256首地址
     while(RAMADDR != addr)
     {
       shuju[i] = RAM_62256;     //从62256中读取数据
       RAMADDR++;            //修改62256地址
       if(shuju[i]!=tab[i])        //数据比较
       {
         ERR=1;
         break;
       }
    i++;
     }
  t=i;
}
/**********************************************************
主函数
**********************************************************/
void  main(void)
{
   uint i=0;
   init();
   P0=0xff;
   P2=0xff;
   num=0x02;
   ERR=0;
   write();
   read();
     if(ERR==1)
     P1 = 0x00;              //P0口LED显示
    else if(ERR==0)
  {
    for(i=0;i<t;i++)
    {
         P1 = temp;              //P0口LED显示
      send(shuju[i]);           //串口发送读写到的数据!
      delay(1000);
  }
    }while(1);
}
/**********************************************************/

此回复同步到 腾讯微博 | 回帖并转播 回帖后跳转到最后一页

经过测试,程序读写数据只能读写到0x03ff;即1K的内存;我查了资料;有些网友说设置声明地址的数据类型unsigned int addr只能读写单片机内部的1k的rom;要设置改成unsigned int xdata addr ;才能读写外部数据!但是改成这样数据就读写不了?求哪位大神帮忙解答?

小弟也在开始学,能教教吗?244816711

我也搞不懂啊,来此求教。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top