找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4273|回复: 5
收起左侧

单片机C语言中为什么这样用XDATA不行?

[复制链接]
ID:404797 发表于 2019-1-1 12:28 | 显示全部楼层 |阅读模式
求助:为什么这样用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){}
}
显示画面:
ask1.JPG



回复

使用道具 举报

ID:94031 发表于 2019-1-1 17:33 | 显示全部楼层
经典51单片机是不带XDATA的,有些新型51带XDATA,能不能用XDATA要看你用的是那种51单片机。
回复

使用道具 举报

ID:404797 发表于 2019-1-1 18:34 | 显示全部楼层
谢谢你的指点。
这个例子中的AT89C52使用了XDATA,编译运行成功。不知这个例子作者是如何设置C工程或proteus工程的,我用其中的程序,自已的proteus工程就是无法使用XDATA。

SD卡读卡器.zip

215.48 KB, 下载次数: 24

回复

使用道具 举报

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

能编译成功不说明你的芯片就有XDATA,如果是AT89C52明显是不带XDATA.
回复

使用道具 举报

ID:404797 发表于 2019-1-1 21:18 | 显示全部楼层
      上面那个例子是将字符串“THIS IS A TEST!”写入SD卡第0扇区,然后读出放在一个512字节的XDATA内存区中,然后从这个内存区读出内容显示出来,proteus仿真竞成功向SD卡写入数据并读出数据放在XDATA中,然后从XDATA中读数据显示。下面是显示抓图。 ask2.JPG

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

回复

使用道具 举报

ID:94031 发表于 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,所以实验出问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表