请教:简单的外部存储器读写程序问题

[复制链接]
3955|11
 楼主| klchang 发表于 2011-11-21 16:39 | 显示全部楼层 |阅读模式
#include<reg52.h>
sbit int1=P3^3;
void main()
{
volatile char xdata IO _at_ 0x0100;
char  a;
IO=0x01;
a=IO;
if(a==0x01) int1=0;
while(1);
}
使用Keil软件运行程序,报如下图错误,请教各位前辈,此程序到底有什么问题?(_at_ 的使用我是直接把帮助文件拷过来的)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
yewuyi 发表于 2011-11-21 17:01 | 显示全部楼层
volatile char xdata IO _at_ 0x0100;


提示这个定义错误。
 楼主| klchang 发表于 2011-11-22 07:54 | 显示全部楼层
谢谢yewuyi前辈回帖!
问题已解决。
原因是
“volatile char xdata IO _at_ 0x0100;”
此语句无问题,问题在于此语句定义的位置不对,其应该在main函数之外定义,改正之后,程序运行和测试通过。
ayb_ice 发表于 2011-11-22 07:58 | 显示全部楼层
应该是局部变量不允许绝对定位
hotpower 发表于 2011-11-22 08:08 | 显示全部楼层
把volatile去掉看看。
 楼主| klchang 发表于 2011-11-22 10:40 | 显示全部楼层
回5楼:
根据C51的帮助文档,最好把volatile加上。帮助文档相关具体内容如下:
To access XDATA peripherals using variables declared with the _at_ keyword, use the volatile keyword to ensure that the C compiler does not optimize out necessary memory accesses.
 楼主| klchang 发表于 2011-11-22 10:44 | 显示全部楼层
回5楼:
把volatile去掉,运行程序,依旧报相同错误。应该如4楼所说,局部变量不允许绝对定位。
hotpower 发表于 2011-11-22 13:50 | 显示全部楼层
可能只允许指针绝对定位。
 楼主| klchang 发表于 2011-11-22 15:23 | 显示全部楼层
回8楼:
允许绝对定位应该是全局变量,而非指针,因为从程序中看,可直接向定义的绝对定位的变量赋变量值,而不是赋给地址值。
hotpower 发表于 2011-11-22 16:03 | 显示全部楼层
指针就和定位无关了。
JLINGON 发表于 2011-11-22 16:27 | 显示全部楼层
volatile char xdata IO _at_ 0x0100;
看不懂  求教
 楼主| klchang 发表于 2011-11-22 16:31 | 显示全部楼层
应该是的,既然全局变量已经使用绝对定位(指定的地址),在主程序里,其地址就不能被改变了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:个人理解,若有错误,敬请指正!

0

主题

606

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部