一下子看不明白,谁给点拨一下,谢谢

[复制链接]
3598|18
 楼主| doob 发表于 2007-7-21 19:48 | 显示全部楼层 |阅读模式
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
sfr PCON    = 0x87;
sfr TCON    = 0x88;
sfr TMOD    = 0x89;
sfr TL0     = 0x8A;
sfr TL1     = 0x8B;
sfr TH0     = 0x8C;
sfr TH1     = 0x8D;

/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;

   寄存器地址怎么分配的,一下子迷糊了。。
gyt 发表于 2007-7-21 20:22 | 显示全部楼层

不同

上面的是字节地址

下面的是位地址
 楼主| doob 发表于 2007-7-21 22:57 | 显示全部楼层

是啊,迷糊了

  
sfr P0      = 0x80;

/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;

sfr SP      = 0x81;
那么SP的每一个位怎么定义啊?
好像都没定义。从0x88寄存器才定义位地址的
都是隔8个寄存器才定义

 楼主| doob 发表于 2007-7-21 23:04 | 显示全部楼层

不知表达的清不清楚,请看

/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0      = 0x80;
-----------------
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
sfr PCON    = 0x87;
sfr TCON    = 0x88;
-------------------
sfr TMOD    = 0x89;
sfr TL0     = 0x8A;
sfr TL1     = 0x8B;
sfr TH0     = 0x8C;
sfr TH1     = 0x8D;
sfr P1      = 0x90;
------------------
sfr SCON    = 0x98;


/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;

/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0  = 0x88;
sbit IE0  = 0x89;
sbit IT1  = 0x8A;
sbit IE1  = 0x8B;
sbit TR0  = 0x8C;
sbit TF0  = 0x8D;
sbit TR1  = 0x8E;
sbit TF1  = 0x8F;

/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;

像sfr SP      = 0x81;
sfr DPL     = 0x82;
这些怎么定义位地址啊?一下子迷糊了
谢谢指点啊
conwh 发表于 2007-7-21 23:09 | 显示全部楼层

不是编译器不好,就是掌握的不好

ayb_ice 发表于 2007-7-22 07:58 | 显示全部楼层

"不是编译器不好,就是掌握的不好"

答: 掌握的不好
 楼主| doob 发表于 2007-7-22 08:54 | 显示全部楼层

对,掌握得不好,解释一下啊

xwj 发表于 2007-7-22 09:19 | 显示全部楼层

LZ,先去搞清楚51的存储器、位是怎样分布的,你就会明白了

仔细看几遍,一定要看清楚
 楼主| doob 发表于 2007-7-22 10:02 | 显示全部楼层

hehe

那你说
sfr SP      = 0x81;
 怎么给sp 的每一位定义吧!!
 就像给p0口定义的那样!
xwj 发表于 2007-7-22 10:12 | 显示全部楼层

说了叫你去看书!!!

gyt 发表于 2007-7-22 10:39 | 显示全部楼层

不是每一个字节的位都有位地址的

经常会用到的才有。
 楼主| doob 发表于 2007-7-22 19:24 | 显示全部楼层

那,楼上大哥,我就是要给他分配一个怎么分配啊^_^

:-),钻牛角尖
computer00 发表于 2007-7-22 19:58 | 显示全部楼层

不能分配. 只有可位寻址的寄存器才可以这样搞.

关于什么是可位寻址的寄存器,找本51的书来看看吧.
 楼主| doob 发表于 2007-7-23 21:11 | 显示全部楼层

晕死,楼上的

为什么非要这么写呢?
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;

这是库的写法,建议去看书!
isbit 发表于 2007-7-23 23:00 | 显示全部楼层

其实写c的对地址分配都不大明白

sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
。。
。。
这些是给他们分配的寄存器地址

/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
。。

sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
sfr PCON    = 0x87;
  这几个不能位分配的

其实51的地址是有重叠的,
难怪楼主会有疑惑,呵呵,
不知我说的对不对,欢迎高手拍砖!
。。
这些是p0口每一位的地址
hotpower 发表于 2007-7-23 23:02 | 显示全部楼层

C人的指针就是A人的地址~~~

conwh 发表于 2007-7-23 23:05 | 显示全部楼层

LZ得恶补了

gyt 发表于 2007-7-24 11:43 | 显示全部楼层

楼主怎么了?

好像越学越乱了:)
xxrrpp2000 发表于 2007-7-24 13:47 | 显示全部楼层

特设功能寄存器地址能够被8整除的才可以位寻址。

也就是说地址不能被8整除的SFR,是不可以用sbit定义位地址的,即不可以位访问,只能按字节访问。

不知道这样说明是否清楚?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

165

主题

1113

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部