单片机汇编的变量地址问题

51单片机中定义了一个变量如:tempLequ37H有没有简单的方式比如XXXXtempl其结果就是#37H这个数?谢谢程序中要将37H38H39H3AH中的四个数通过串... 51单片机中
定义了一个变量如:
tempL equ 37H
有没有简单的方式比如 XXXX templ 其结果就是#37H这个数?
谢谢
程序中要将37H 38H 39H 3AH 中的四个数通过串口发回PC机,

所以要知道开始的地址程序处理起来会很方便,现在的处理方式要定义另外变量来记录这个起始位置

总是想如果有一个更好的方法不是更好?
mov A ,templ 只是将37H中的值传到了A,有没有一个命令是将这个值所在的地址传出来的呢
展开
 我来答
做而论道
高能答主

2012-01-21 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
在51单片机中,可以用R0、R1当做指针。
可以如下编程:

MOV R0, #37H ;设定地址
MOV SBUF, @R0 ;通过串口输出R0所指定的内容
INC R0 ;地址号码加一,38H
MOV SBUF, @R0 ;通过串口输出R0所指定的内容
INC R0 ;地址号码加一,39H
MOV SBUF, @R0 ;通过串口输出R0所指定的内容
INC R0 ;地址号码加一
MOV SBUF, @R0 ;通过串口输出R0所指定的内容
……
注意:发送时,要等待前一个发送完毕,再发送下一个。
追问
您的写法就是我的发送写法,
现在的真正问题是:
因为我定义了 templ equ 37H
MOV R0, #37H ;设定地址
这一句的地址当我以后更改了变量的地址如 templ equ 47H
就要变成了MOV R0, #47H
我是想如何只更改 templ equ 47H 后面的程序就不用更改?
这样是不是会对程序的移植性更有好处?

这就是这个问题的实质要求

谢谢
追答
是的,仅仅把templ equ ??H更改后,其它都不用改,程序就可以对另一个存储区,进行读写操作。
这种写法,具有了广泛的可移植性。

特别是现在,52系列单片机,具有高128B的片内RAM区域。
这个区域,只能用R0、R1当做指针来读写。
做而论道这里给出的方法,就是针对该区域操作的、可随意移植的唯一方法。
呵呵,看遍了单片机的教材,也没有一本提到这种简便修改操作区域的方法与例题。
到我的百度空间踩踩吧。
corsina
2012-01-12 · TA获得超过274个赞
知道小有建树答主
回答量:1600
采纳率:0%
帮助的人:430万
展开全部
有例如
templ EQU 30H
MOV templ,#37H
这样其结果就是#37H这个数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangwubang
2012-01-12
知道答主
回答量:27
采纳率:100%
帮助的人:25.4万
展开全部
每个变量在内存都有一个地址的,地址一般都是是16位的,而不是8位的。可以使用&符合去地址
例如定义一个变量 unsigned char data;
&data,就是去单片机内存地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gkm101
2012-03-31
知道答主
回答量:1
采纳率:0%
帮助的人:1642
展开全部
我在某些资料中看到过这样的
NOW DATA 40H
......
MOV R0,#NOW
这里的#NOW是表示变量NOW中的数值?
还是表示变量NOW的绝对地址?迷惑中。。。
求高人解答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式