KEIL 编程 如何使用XDATA

KEIL 编程 如何使用XDATA,第1张

如果是汇编,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

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12567120.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存