首页 新闻资讯 技术资料 论坛 网站地图
综合电子技术 嵌入式硬件 数控系统 消费电子 医疗电子 软件开发 嵌入式系统
电子元器件搜索:
IC库存(8958万) PDF资料(329万) IC价格 IC求购 资讯 技术资料
维库电子市场网是知名的电子元器件交易网站, 为电子生产企业提供IC库存和技术资料查询服务。
位置: 首页 > 详细信息
  请问C51中怎样访问外部存储器?
出处:21ic 时间: 2007-10-09
zhaohe2001 发布于 2007-10-6 22:07:00
#include <at89x52.h>

unsigned long xdata datas[]  = {0x00000001,0x00000002,0x00000003,
                                0x00000004,0x3F065B4F,0x666D7D07,
                                0x7F6F777C,0x895E7971};
unsigned long xdata datas2[] = {0x00030001,0x00040002,0x00005003,
                                0x00060004,0x4F065B4F,0x676D7D07,
                                0x7F89777C};
unsigned char xdata datas3[] = {0x01,0x02,0x03,0x04,0x05,0x06,
                                0x07,0x08,0x09,0xf8,0xfe,0xff};
void DelayMs(unsigned int time);//延时函数

/***********************************************
*主函数
*功能:程序入口
************************************************/
void main()
{
    unsigned char *p;
    unsigned char i;
    unsigned char da;

    DelayMs(500); //延时,等待将数据写入外部存储器

    while (1)
    {
        p = datas3;

        for (i = 0; i < 7; i++)
        {            
            da = *p++;
            P1 = 0xFE;//P1, P0端口控制8个7段数码管显示
            P0 = da;  //

            DelayMs(1000);
        }
   }
}

/*****************************************************
* 延时函数
*******************************************************/
void  DelayMs(unsigned int time)
{
   unsigned int i;
   unsigned int j;
   for (j = 0x00; j < time; j++)
   {
       for (i = 0x00; i < 0x189; i++);
   }
}

datas[]中每个数怎么是8位十六进制数啊,在访问外部存储器时是怎么处理的?



zhaohe2001 发布于 2007-10-6 22:25:00
c51编程时,要访问外部设置时,用以下语句可以了吗:
char xdata *px;
char data temp;
temp=px[100];      
//这三句是不是完成了将外部RAM的第100单元的数移到temp变量中?有没有什么环境设置之类的?
汇编以后,
MOV  A,0xOA
ADD  A,#0x64
MOV  DPL,A
CLR  A
ADDC  A,px(0x09)
MOV  DPH,A
MOVX  A,@DPTR
MOV   temp,A

里面的0x0A,px(0x09)是什么意思?为何要加上该偏量?


zhaohe2001 发布于 2007-10-7 19:20:00
unsigned long xdata datas[]  = {0x00000001,0x00000002,0x00000003,
                                0x00000004,0x3F065B4F,0x666D7D07,
                                0x7F6F777C,0x895E7971};

unsigned char xdata datas3[] = {0x01,0x02,0x03,0x04,0x05,0x06,
                                0x07,0x08,0x09,0xf8,0xfe,0xff};

datas[]中的每个数怎么是8位十六进制数啊?
而datas3[] 中是两位数?


沈老 发布于 2007-10-7 19:41:00
// 下面程序中读的是同一单元
#include <reg51.h>
#include <ABSACC.h>


void main()
{
    char rval;
    rval = XBYTE[0xFF02];
    P2=0xFF;
    rval = PBYTE[02];
}
///////////////////////////     
     5: void main()
     6: {
     7:         char rval;
     8:         rval = XBYTE [0xFF02];
C:0x000F    90FF02   MOV      DPTR,#0xFF02
C:0x0012    E0       MOVX     A,@DPTR
     9:         P2=0xFF;
C:0x0013    75A0FF   MOV      P2(0xA0),#0xFF
    10:         rval = PBYTE[02];
C:0x0016    7802     MOV      R0,#0x02
C:0x0018    E2       MOVX     A,@R0
    11: }
C:0x0019    22       RET      


rainmans 发布于 2007-10-7 19:47:00
没别的意思,见谅!


computer00 发布于 2007-10-7 20:52:00
0x0A,px(0x09)中存放的是px[0]的地址了


zhaohe2001 发布于 2007-10-9 11:03:00
我手头没书,刚从网上down了一本.
不怕大家笑话,我还是要问
datas[]中访问的是不是32位的外部存储空间?
那它的地址总线是怎么连接的呢?


xwj 发布于 2007-10-9 11:08:00
总线的连接还是一样的,但数组每个单元的地址是以4位间隔增加的


懂了吗?





PS:没事是多看看书,有疑问时多看看帮助


关闭】 【打印
相关专题  
嵌入式软件
消费电子
电源系列
应用产品
IC设计
测试测量
接口电路
开发工具
综合电子技术
存储器
嵌入式系统
嵌入式硬件
军工/航空航天
医疗电子
软件开发
SOPC
计算机外设
数控系统
汽车电子
嵌入式开发新闻
安防产品
传感控制
AD/DA
通信产品
工业控制

© 2007 百斯嵌入式开发网 网站地图