打印
[51单片机]

汇编里用BIT定义FLAG、DATA定义字节地址的问题

[复制链接]
3755|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hbc0602|  楼主 | 2014-3-7 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
位寻址区是20H到2FH,但是定义时用FLAG BIT 00H,定义的位变量对应的地址是00H还是20H?是否因为用了BIT关键字,00H=20H?那定义FLAG BIT 2FH是否是错误的?同理,SEND_DATA DATA 00H是否对应的是30H?还是应该定义为SEND_DATA DATA 30H?感觉好乱啊。。

相关帖子

沙发
ayb_ice| | 2014-3-7 09:38 | 只看该作者
BIT是定义位变量,位变量的空间范围是00~FFh,当然是可以的BIT 00 = DATA 20.0...

使用特权

评论回复
板凳
ayb_ice| | 2014-3-7 09:39 | 只看该作者
可以这样定义

MY_FLAG DATA 20H
MY_FLAG0 equ MY_FLAG.0
MY_FLAG1 equ MY_FLAG.1

使用特权

评论回复
地板
ningling_21| | 2014-3-7 09:40 | 只看该作者
定义位地址时,好像是这样
FLAG_ON_OFF  BIT  20H.0   //只是20H的最低位

SEND_DATA DATA 00H是否对应的是30H?  这里是指定00H 不是30H

也可以

SEND_DATA EQU  30H

使用特权

评论回复
5
hbc0602|  楼主 | 2014-3-7 09:48 | 只看该作者
ayb_ice 发表于 2014-3-7 09:38
BIT是定义位变量,位变量的空间范围是00~FFh,当然是可以的BIT 00 = DATA 20.0... ...

位变量的空间范围是00~FFh??

使用特权

评论回复
6
ayb_ice| | 2014-3-7 10:13 | 只看该作者
hbc0602 发表于 2014-3-7 09:48
位变量的空间范围是00~FFh??

好好去看书吧

0~127是变量空间,128~255是sfr bit空间

使用特权

评论回复
7
hbc0602|  楼主 | 2014-3-7 10:23 | 只看该作者
ayb_ice 发表于 2014-3-7 10:13
好好去看书吧

0~127是变量空间,128~255是sfr bit空间

我的理解是00H-1FH是R0-R7工作寄存器的地址,20H-2FH是可位寻址的地址,30H-7FH是字节变量地址,80H-FFH是寄存器地址。有错吗?FLAG定义在20H-2FH之间,字节变量定义在30H-7FH之间,80H以后的不定义。
我模拟了下程序:
TEST_A BIT 00H ;BIT定义00H其实就是定义了20H
TEST_B BIT 01H
TEST_C BIT 02H

TEST_DATA1 DATA 00H
TEST_DATA2 DATA 01H
TEST_DATA3 DATA 02H
TEST_DATA4 DATA 03H

SEND_DATA EQU 30H


ORG 00H
SETB TEST_A        ;20H.0被置1
SETB TEST_B        ;20H.1被置1
SETB TEST_C        ;20H.2被置1

MOV TEST_DATA1,#0AH        ;地址00H被赋值0AH
MOV TEST_DATA2,#0BH        ;地址01H被赋值0BH
MOV SEND_DATA,#0CH        ;;地址30H被赋值0CH

MOV TEST_DATA3,SEND_DATA ;地址02H被赋值0CH
MOV TEST_DATA4,#SEND_DATA ;地址03H被赋值30H

END

使用特权

评论回复
8
ayb_ice| | 2014-3-7 10:56 | 只看该作者
说地址时要指明是哪个空间才有意义

地址空间00H可以对应DATA,IDATA,BIT,PDATA,XDATA,CODE....

“TEST_A BIT 00H ;BIT定义00H其实就是定义了20H”
都说了
BIT 00h = DATA 20h.0,只是20H的8分之一,不是20H

还是看书吧

使用特权

评论回复
9
coody| | 2014-3-7 13:48 | 只看该作者
BIT定义有两中方法,一种是直接位地址,一种是定义某个可位寻址的RAM或寄存器的某个位。

使用特权

评论回复
10
hbc0602|  楼主 | 2014-3-7 13:58 | 只看该作者
ayb_ice 发表于 2014-3-7 09:39
可以这样定义

MY_FLAG DATA 20H

好方法。

使用特权

评论回复
11
hbc0602|  楼主 | 2014-3-7 13:59 | 只看该作者
coody 发表于 2014-3-7 13:48
BIT定义有两中方法,一种是直接位地址,一种是定义某个可位寻址的RAM或寄存器的某个位。 ...

这里问的不是哪些内存可以位定义,是未定义的地址映射问题。现在基本搞明白了。

使用特权

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

本版积分规则

5

主题

27

帖子

0

粉丝