//存储模式的选择(small,compect,large),并不直接影响XDATA的使用 --
//使用XDATA,PDATA时,主要注意的是 //参数传递,堆栈的位置--因为这些直接影响到程序的效率--- 堆栈的设置可以在startup.a51文件里面设置。
//large 模式下, 全局变量默认定义在XDATA区;同理,适用于其他存储模式
//在large模式下,虽然默认变量在XDATA,也可以通过关键字data,pdata等 将变量默认放在data,pdata区。
//同理,在small下,也可以使用xdata段。
//注意——如果xdata中有变量需要初始化,并不需要修改startup.a51文件!
//KeilC编译器会根据程序初始化XDATA内已定义的变量,而未定义的xdata空间,将根据startup.a51文件,对xdata进行填充(不使用
// startup.a51 时 ,一般情况下 ,xdata区是清零的)。
//使用KeiLC 进行编译时,注意修改工程属性,根据硬件电路,设置正确的XDATA区间。
======================================================
#include "reg52.h"
#include "absacc.h"
#include "intrins.h"
void msDelay(unsigned char mstime) // 12MHz ------100ms误差大约在0.3%
{
unsigned char msDelay_par;
DL1MS:
msDelay_par = 250;
LOOP:
_nop_();
_nop_();
msDelay_par--;
if( msDelay_par !=0)
goto LOOP;
mstime--;
if( mstime !=0)
goto DL1MS;
}
main()
{
unsigned char data v1 = 0x80;
unsigned char xdata v2 = 0x01;
unsigned char xdata v3[] = {0,1,2,3,4,5};
//unsigned char xdata v4; //默认初始化为O
unsigned char tmp = 0;
unsigned char data p;
P1 = v2;
msDelay(200);
msDelay(200);
msDelay(200);
P1 = v3[1];
msDelay(200);
msDelay(200);
msDelay(200);
P1 = v3[5];
msDelay(200);
msDelay(200);
msDelay(200);
P1 = XBYTE[0x4009];
msDelay(200);
msDelay(200);
msDelay(200);
for(;;);
}
--------------- 代码已验证。
用户433198 2013-12-20 10:15