如果是汇编,XDATA的很好访问,直接用MOVX指令,访问的就芦铅或是XDATA,比如:
MOV DPTR,#1000H
MOVX A,@DPTR
如果是C语言,那么声明变量时加上xdata就可以了。比如
#include<reg51.h>
unsigned int xdata a
main()
{
a=0x5a
printf("%d",a)
while(1)
}
也可以采取另一种方式来访问XDATA,比如:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
//PA、PB、PC端口及命令端口地址定义
#define PA XBYTE[0x0000]
#define PB XBYTE[0x0001]
#define PC XBYTE[0x0002]
#define COM XBYTE[0x0003]
//待显示字符编码队列
uchar code DSY_CODE_Queue[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xa4,0xc0,0xc0,0x80,0xc0,0x80,0xf9,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff
}
//数码管选通
uchar codeDSY_Index[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}
//延时
void DelayMS(uint ms)
{
uchari
while(ms--)for(i=0i<120i++)
}
//主程序
void main()
{
uinti,j,k
COM=0x80 //8255工作方式选择:PA、PB均输出,工作方式0
while(1)
{
for(j=0j<40j++) 陪伍 //刷新显示一段时间
{
for(k=0k<8k++) //在激李8个数码管上显示字符
{
PB=DSY_Index[k] //位码
PA=DSY_CODE_Queue[k+1] //段码
DelayMS(1)
}
}
i=(i+1)%15 //刷新显示一段时间后递增i,形成滚动效果,最大索引为14
}
}
首先用到XDATA和程序长没半毛钱关系。然后你设置变量优先XDATA,你是否考虑卖掘单片机提中悄核供的XDATA是否足够。一般默认是DATA速度快,如果data不够一些变量定义时直接加XDATA标示符。像一些常运激量则用code直接放到ROM代码中。
根据你清燃外部接的XDATA的地址段,自己在答铅虚程序激姿一开始加入初始化了{
#define CONST_XDATA_RAM_Start0x0 // xdata RAM的起始地址(根据硬件连线计算)
#define CONST_XDATA_RAM_Len 0x0100 // xdata RAM的长度
#define CONST_XDATA_RAM_Value 0x0 // xdata RAM的要填充的数值
unsigned char xdata *ptr = 0
for (ptr=CONST_XDATA_RAM_Startptr<CONST_XDATA_RAM_Lenptr++)
{
*ptr = CONST_XDATA_RAM_Value
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)