关于51单片机访问外部寄存器的方法

来源:本站
导读:目前正在解读《关于51单片机访问外部寄存器的方法》的相关信息,《关于51单片机访问外部寄存器的方法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《关于51单片机访问外部寄存器的方法》的详细说明。
简介:在学习开发51+RC500的过程中发现了两种访问外部寄存器的操作方法一种是用XBYTE方法来直接访问外部寄存器一种是用基地址加偏移量的方法来访问外部寄存器两种方法的本质其实都一样,我可以看XBYTE的定义

#define XBYTE ((unsigned char volatile xdata *) 0)

XBYTE直接帮我们定义到了xdata

我们再来看第二种方法

unsigned char xdata ini _at_ 0x7f00; // move base address to 0x7f00

unsigned char xdata *GpBase = &ini; // redirect pointer to base address

#define ReadRawIO(addr) (*(GpBase + addr))

#define WriteRawIO(addr,value) *(GpBase + addr) = value

这里用了 xdata ini _at_ 0x7f00; xdata *GpBase=&ini;

让*GpBase指向0x7f00

(*(GpBase + addr))来表示外部寄存器地址

我在读RC500的官方函数文件的时候发现

老外的程序员在读写RC500寄存器的时候

没有进行寄存器页的选择

unsigned char ReadIO(unsigned char Address)

{

static unsigned char c;

c = ReadRawIO(Address); // read value at the specified

// address

return c;

}

#define ReadRawIO(addr) (*(GpBase + addr))

直接对外部寄存器进行读写

网上流传的读写RC500的方法大多用第一种方法 并且进行了寄存器页的选择

unsigned char ReadRawIO(unsigned char Address)

{

return XBYTE[Address];

}

unsigned char ReadIO(unsigned char Address)

{

WriteRawIO(0x00,GetRegPage(Address));

return ReadRawIO(Address);

}

这种方法读起来容易理解 相比第一种方法

最大的区别就是进行了寄存器页的选择

之所以要第一种方法不用进行页寻址

是因为第一种方法采用的是绝对地址

P2口作为高地址P0口作为低地址 扩展了64K的空间

其中unsigned char xdata ini _at_ 0x7f00; // move base address to 0x7f00

这句话的意思是值选中了P2^7这个口扩展的8K空间 是因为RC500的片选信号连接的是P2^7

第二种方法XBYTE直接对外部寄存器进行读写

但是没有对P2口的地址进行说明 虽然连接了P2^7 物理上有了地址 逻辑上却不知道

所以不能进行绝对地址操作

提醒:《关于51单片机访问外部寄存器的方法》最后刷新时间 2024-03-14 01:09:35,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《关于51单片机访问外部寄存器的方法》该内容的真实性请自行鉴别。