C51单片机里关于xbyte的问题
请大家看下面这段程序#defineADCOMXBYTE[0xff7c]/*使A0=0,R/C=0,CS=0*/#defineADLOXBYTE[0xff7f]/*使R/C...
请大家看下面这段程序
# define ADCOM XBYTE[ 0xff7c ] /* 使A0=0 ,R/C=0, CS=0 */
# define ADLO XBYTE [ 0xff7f ] /* 使 R/C =1,A0=1, CS=0 */
# define ADHI XBYTE [ 0xff7d ] /* 使R/C=1,A0=0,CS =0 */
本人一直理解是ADCOM是一个指针,指针指向的地址为0xff7c,完事可以通过对ADCOM的操作来更改地址0xff7c内变量的值,但是为何同时在宏定义后,相应的注释里会是同时初始化某值的作用呢?
那在问下像0xff7c这些地址,是应该怎样和外部电路相配合呢?是说地址可以随便写么? 展开
# define ADCOM XBYTE[ 0xff7c ] /* 使A0=0 ,R/C=0, CS=0 */
# define ADLO XBYTE [ 0xff7f ] /* 使 R/C =1,A0=1, CS=0 */
# define ADHI XBYTE [ 0xff7d ] /* 使R/C=1,A0=0,CS =0 */
本人一直理解是ADCOM是一个指针,指针指向的地址为0xff7c,完事可以通过对ADCOM的操作来更改地址0xff7c内变量的值,但是为何同时在宏定义后,相应的注释里会是同时初始化某值的作用呢?
那在问下像0xff7c这些地址,是应该怎样和外部电路相配合呢?是说地址可以随便写么? 展开
2个回答
展开全部
XBYTE定义的是外部地址,这样才能和接到你的IO口上的器件通信
关于你的不充问题:
你把0xff7c展开成二进制形式就全明白了,0xff7c的二进制是:1111,1111,0111,1100
再结合后面的注释可知外部电路管脚的对应关系为:
CS——P1.7
A0——P1.1
R/C——P1.0
用XBYTE定义的目的是将外部电路不同的功能编程不同的地址而已
这样就可以在程序里面通过直接对地址附置,就能使外部电路实现需要的功能,这样做还有一个好处就是在编译的时候会产生 MOVX 指令,这样可以操作WR和RD引脚,以实现特定的功能
至于用XBYTE定义的地址是多少就得根据实际的外围电路的连接来确定,不是随便写的
关于你的不充问题:
你把0xff7c展开成二进制形式就全明白了,0xff7c的二进制是:1111,1111,0111,1100
再结合后面的注释可知外部电路管脚的对应关系为:
CS——P1.7
A0——P1.1
R/C——P1.0
用XBYTE定义的目的是将外部电路不同的功能编程不同的地址而已
这样就可以在程序里面通过直接对地址附置,就能使外部电路实现需要的功能,这样做还有一个好处就是在编译的时候会产生 MOVX 指令,这样可以操作WR和RD引脚,以实现特定的功能
至于用XBYTE定义的地址是多少就得根据实际的外围电路的连接来确定,不是随便写的
展开全部
#define XBYTE ((unsigned char volatile xdata *) 0)
这个是xbyte的原型..
注释还是注视..根本就没有初始化的作用,
另外后的注视..不是初始化某个值得作用,
而是对应地址的功能..
例如..ADLO 0xff7c 如果写这个地址那么A0=1 R/C=1 CS=0
这个和你电路里面的接法有关..因为地址是0x7f = 0b0111 1111所以A0肯定=1,,,,
具体的你 R/C CS也要具体配合电路才行
这个是xbyte的原型..
注释还是注视..根本就没有初始化的作用,
另外后的注视..不是初始化某个值得作用,
而是对应地址的功能..
例如..ADLO 0xff7c 如果写这个地址那么A0=1 R/C=1 CS=0
这个和你电路里面的接法有关..因为地址是0x7f = 0b0111 1111所以A0肯定=1,,,,
具体的你 R/C CS也要具体配合电路才行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询