C51中访问外部RAM的方法
XBYTE定义的是外部地址,这样才能和接到你的IO口上的器件通信
在一般的读写外部RAM的程序中,经常看到这样的句子:
访问指令如你这里讲51的MOVX指令(在C语言中他会编译成这个指令)在执行这个指令的时候3组线是协调工作
mov dptr,#1000h
mov a,#55h
movx @dptr,a
上面3调语句的C语言可以表示如下
#define
W_DATA=0X55;
在使用外部总线的时候,数据 地址和控制信号是直接按照规定的时序输出高低电平的,所以不用你管,当然你必须要满足时序工作如何理解#define XBYTE ((unsigned char
volatile xdata * ))
8051 特有的内存型态
code
data
idata
bdata
xdata
pdata
特殊资料型态
bit
sbit
语法
sbit
范例
sbit
或是配合 bdata 宣告的位(bit)变量
char
sbit
(注意 sbit 前不可以加 static)
sfr
语法
sfr
范例
sfr
指定绝对地址的变量
在单一模块内可以使用下面的语法宣告
[memory_space]
范例
pdata
如果该变量必须为多个模块所使用(Global Variable)则以
抽象指针(Abstract Pointer)的方式在标头档(Header File)定义较为方便。
#define
范例
#define
(注意 char 与 pdata 的顺序)
ABSACC.H 提供了下列方便的宏(Macro)定义。
#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)
隐藏的初始化程序
80C51 在电源重置后(Power On Reset)所执行的第一个程序模块并不是使用者的主程序
main(),而是一个隐藏在 KEIL-C51 标准链接库中称为 startup.a51 的程序模块。
startup.a51 的主要工作是把包含 idata、xdata、pdata 在内的内存区块清除为 0,并
且初始化递归指针。接着 startup.a51 被执行的仍然是一个隐藏在 KEIL-C51 标准链接库
中称为 init.a51 的程序模块。而 init.a51 的主要工作则是初始化具有非零初始值设定的
变量。
在完成上述的初始化程序之后,80C51 的控制权才会交给 main() 开始执行使用者的程序。
#define XBYTE ((unsigned char volatile xdata *) 0)
定义
这样,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM了
其中,初始地址就是0x0000;
百度知道:
#define XBYTE((char*)0x20000L)XBYTE[0x8000]=0x41;这段程序是什么意思?#define XBYTE ((char*)0x20000L) 定义了XBYTE是个指向地址 0x20000L 的字符型指针(或者数组)变量XBYTE[0x8000]=0x41; 对数组XBYTE的第 0x8000个变量进行赋值,赋值为0x41。即对地址0x28000L的内存单元赋值为0x41。这说明你用的是带外部数据总线的51芯片,外部的存储器多半是RAM,RAM的容量至少有 0x8000(32k)字节-RAM的容量可能是64k字节?如果还有问题,可以发消息联系补充1:L代表 long,这说明 0x20000L 是一个长整数。一般来说,8位单片机如51,整数用16位二进制表示,长整数用32位二进制表示。
还有这样用的:
写这样的一个头文件
这样的格式:
类型 储存空间 定义别名 关键字_at_ 寄存器的地址
_at_这个关键字是绝对定义地址
C51外部RA 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)