打印

帮忙看看单片机的一点是,外接IC地址怎么算?

[复制链接]
886|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1、大家帮忙看看,我现在想操作P0口做数据线/地址线,汇编的话就是MOVX指令,但是想用C语言的话就得XDATA了,如此一来呢,这块牵扯到MAX197的一个地址问题,我想知道这个地址是怎么确定的,有人说是0xfeff,有个却设置成0x0100,请教一下怎么弄;
2、如果我定义#define MAX197_DATA XBYTE[0xfeff],在往MAX197写命令时应该是怎么操作,直接MAX197_DATA=0x40;可以么?这期间WR  RD是机器自动操作的,不需要我们参与!搞不清楚大家如果外接IC的时候地址是如何来设定的,因为网上说法比较多,看坛子里有没有人遇到过这种情况,汇编下非常简单,C语言就有点茫然了!

QQ图片20150108124233.png (82.34 KB )

QQ图片20150108124233.png

相关帖子

沙发
airwill| | 2015-1-8 13:25 | 只看该作者
只用了一根地址线 P20, 那么地址 A8 是有效的地址值都可以. 如果 HBEN 是高电平有效, 那么0Bxxxx xxx1 xxxx xxxx 的地址均可以.
如果是低电平有效, 那么 0bxxxx xxx0 xxxx xxxx 均可以.
不过有个问题, 由于 485 的 D/RE 线也使用了 P2 的线, 485 收发的时候, 会受到 MAX197 访问的影响. 如果想不受影响, 那么地址里的 A9 就要根据 DE 需要的状态设置.

使用特权

评论回复
板凳
wang168506|  楼主 | 2015-1-8 15:56 | 只看该作者
airwill 发表于 2015-1-8 13:25
只用了一根地址线 P20, 那么地址 A8 是有效的地址值都可以. 如果 HBEN 是高电平有效, 那么0Bxxxx xxx1 xxxx ...

谢谢咯,我试过了,FEFF可以的,485貌似也没收到太大影响,目前来看是正常的,谢谢你啦,版主出来就是不一样

使用特权

评论回复
地板
wang168506|  楼主 | 2015-1-8 16:01 | 只看该作者
不过还是要把解决办法送给大家,希望对其他人有帮助吧
在汇编指令下MOVX @DPTR,A就可以顺利完成数据/地址线的控制,这是因为DPTR是单片机的控制寄存器,配合总线WR RD  ALE可轻松完成切换,但是C语言下咋不然,首先DPTR用不成了,其次从P0口直接发送数据是不行的,这就意味着不能再操作P0口,原因很简单,做数据/地址线时写总线会先写0XFF打破当前P0口状态,C语言下大家到底应该怎么实现呢?小弟查阅资料发现实际上keil下也是兼顾了这部分的
只要我们定义外部地址空间
#define  ADDRESS  XBYTE[0xFEFF]
ADDRESS=0x40;//这里可以赋任何你想发送的数,而这个数据会从数据总线上输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

794

帖子

5

粉丝