C51 拓展总线编程总结

C51 拓展总线编程基本架构
总线结构
可以看出,8位数据总线游P0口组成,16位地址总线(最大寻址64K)由P0(地8位地址) 和 P2(高4位地址),控制总线则由P3口及相关引脚控制,如ATE脚控制的是地址锁存,!WR(P36写信号)—->当写数据时会产生负脉冲信号,!RD(P37写信号)—->当读数据时会产生负脉冲信号

总线使用的例子

编写程序时,使用的C51 绝对地址访问
C51 keil 提供了三种访问绝对地址的方法
1.绝对宏:
在程序中,用“#include “absacc.h””即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 具体使用可看一看absacc.h便知

例如:
rval=CBYTE[0x0002];指向程序存贮器的0002h地址
rval=XWORD [0x0002];指向外RAM的0004h地址
2. _at_关键字
直接在数据定义后加上_at_ const即可,但是注意: (1)绝对变量不能被初使化; (2)bit型函数及变量不能用at指定。 例如:
idata struct link list _at_ 0x40;指定list结构从40h开始。
xdata char text[25b] _at_ 0xE000;指定text数组从0E000H开始
提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。
3.指针

unsigned char xdata *Port; //指针类型是外部RAM(xdata)

void main(void)
{
u32 volatile i=0;
Port=0x40FF; //赋予指针地址(外部ram)0x40FF
*Port = 0x55; //0x40FF地址赋值为0x55;
while(1);
}

猜你喜欢

转载自blog.csdn.net/Wekic/article/details/79994389
C51