absacc.h

LeeAn 2005-07-21 12:17:06
介绍是说这个头文件主要用来访问“绝对地址”。

绝对宏:
在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括:
CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
具体使用可看一看absacc.h便知
例如:
rval=CBYTE[0x0002];指向程序存贮器的0002h地址
rval=XWORD [0x0002];指向外RAM的0004h地址

这些都还好理解。

但是最近读到一程序:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define COM8255 XBYTE[0x007F] //命令口地址
#define PA8255 XBYTE[0x00FC] //A口地址
#define PC8255 XBYTE[0x00F] //C口地址
void printchar(uchar *p);

void main(void) //主函数
{
uchar idata chara[]="HELLO"; //测试用的字符串
COM8255=0x8E; //输出方式选择命令字
printchar(chara); //打印字符串
}

void printchar(uchar *p) //打印字符串子函数
{
while(*p!='\0')
{while((0x80&PC8255)!=0); //查询等待打印机的BUSY状态
PA8255=*p; //输出字符
COM8255=0x00; //模拟STB脉冲
COM8255=0x01;
p++;
}
}

是《单片机C语言编程与实例》中的例程(其实书中还有许多这种程序,另有这种程序的书也不只这一本,我在书城看见很多),就是通过《absacc.h》定义访问的“外部绝对地址”不是在程序/数据存储芯片中,如上例,是将C51与外围并行接口8255芯片连接。PA8255,PC8255就是8255芯片的PA(8个)口,PC(8个)口。
从“访问存储芯片内部地址”到“将并行接口8255芯片的外部接口用起来像C51自身接口一样方便”,我实在不明白。

要电路的大侠们请留下信箱,我会将这个电路图发过去。(电路很简单)

...全文
737 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liufanl 2005-08-17
  • 打赏
  • 举报
回复
这个地址的计算方法,建议你去看一下《微型计算机原理与接口技术》中关于地址的划分和计算,你就会很明白了。
简单讲,访问外部地址,先要送地址,高八位由P2送出,低八位由P0送出(必须锁存),然后在P0口送出数据。外部地址如果为RAM或有确切REG地址的,要精确计算,但是如果仅仅是需要把数据送到外部数据线上,就只需要把外部设备的选通信号选上就好。
LeeAn 2005-07-31
  • 打赏
  • 举报
回复
不是吧!!没人会么?高手啊,你在哪?
LeeAn 2005-07-26
  • 打赏
  • 举报
回复
电路图我放在本网站一网友的FTP:
{主机地址:mcuftp.syctech.com,用户名:mcu,密码:mcu123}
就在{/UpLoad/8255-absacc.rar}

谢谢。
LeeAn 2005-07-26
  • 打赏
  • 举报
回复
或者这样,请问谁能告诉我
#define COM8255 XBYTE[0x007F] //命令口地址
#define PA8255 XBYTE[0x00FC] //A口地址
#define PC8255 XBYTE[0x00F] //C口地址
中[0x007F],[0x00FC],[0x00F] 这些地址是如何计算出来的???
TheSaviour 2005-07-21
  • 打赏
  • 举报
回复
51的架构是IO与数据在同一寻址空间,因此访问IO地址的操作可与访问存储器相同。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧