标题: 单片机C语言中为什么这样用XDATA不行? [打印本页]

作者: zxwdown    时间: 2019-1-1 12:28
标题: 单片机C语言中为什么这样用XDATA不行?
求助:为什么这样用XDATA不行?

    最近想用到XDATA,编了如下程序试用XDATA,却发现不行,请懂的人指点一下如何使用XDATA。
以下是我编的XDATA试用程序和运行后的显示情况。
单片机C语言程序清单:
#include <reg52.h>
unsigned char xdata DATA[10];
void UART()
{SCON=0x40;
TMOD=0x20;
TH1=0xfd;
TR1=1;
}
void Sendstr(unsigned char *cp)
{while(*cp!='\0')
{if(*cp=='\n')SBUF=13;else SBUF=*cp;
  while(TI==0);TI=0;
  cp++;
  }
}
//######################################################################
void main()
{char i;
UART();
for(i=0;i<9;i++)DATA[ i]='A';[ i]
Sendstr("\nDATA[1..12]=[");
for(i=0;i<=9;i++){if(i<9)SBUF=DATA[ i];else SBUF=']';while(TI==0);TI=0;}
Sendstr("\nDATA[1..12]=[");
for(i=0;i<=9;i++){if(i<9)SBUF=DATA[ i]+'8';else SBUF=']';while(TI==0);TI=0;}
while(1){}
}
显示画面:





作者: xuyaqi    时间: 2019-1-1 17:33
经典51单片机是不带XDATA的,有些新型51带XDATA,能不能用XDATA要看你用的是那种51单片机。
作者: zxwdown    时间: 2019-1-1 18:34
谢谢你的指点。
这个例子中的AT89C52使用了XDATA,编译运行成功。不知这个例子作者是如何设置C工程或proteus工程的,我用其中的程序,自已的proteus工程就是无法使用XDATA。

SD卡读卡器.zip

215.48 KB, 下载次数: 24


作者: xuyaqi    时间: 2019-1-1 19:58
zxwdown 发表于 2019-1-1 18:34
谢谢你的指点。
这个例子中的AT89C52使用了XDATA,编译运行成功。不知这个例子作者是如何设置C工程或prote ...

能编译成功不说明你的芯片就有XDATA,如果是AT89C52明显是不带XDATA.
作者: zxwdown    时间: 2019-1-1 21:18
      上面那个例子是将字符串“THIS IS A TEST!”写入SD卡第0扇区,然后读出放在一个512字节的XDATA内存区中,然后从这个内存区读出内容显示出来,proteus仿真竞成功向SD卡写入数据并读出数据放在XDATA中,然后从XDATA中读数据显示。下面是显示抓图。

不知例子作者是怎么实现的。
该例子的proteus原理图如下:



作者: xuyaqi    时间: 2019-1-2 16:53
zxwdown 发表于 2019-1-1 21:18
上面那个例子是将字符串“THIS IS A TEST!”写入SD卡第0扇区,然后读出放在一个512字节的XDATA内存区 ...

proteus仿真和实际是有差距的,比如仿真的SD卡M1连电源都不提供就能工作,这在实际中就不可能,仿真是默认有外扩SRAM,所以可以用XDATA,而你实际没有外扩SRAM,而用XDATA,所以实验出问题。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1