单片机汇编的变量地址问题
51单片机中定义了一个变量如:tempLequ37H有没有简单的方式比如XXXXtempl其结果就是#37H这个数?谢谢程序中要将37H38H39H3AH中的四个数通过串...
51单片机中
定义了一个变量如:
tempL equ 37H
有没有简单的方式比如 XXXX templ 其结果就是#37H这个数?
谢谢
程序中要将37H 38H 39H 3AH 中的四个数通过串口发回PC机,
所以要知道开始的地址程序处理起来会很方便,现在的处理方式要定义另外变量来记录这个起始位置
总是想如果有一个更好的方法不是更好?
mov A ,templ 只是将37H中的值传到了A,有没有一个命令是将这个值所在的地址传出来的呢 展开
定义了一个变量如:
tempL equ 37H
有没有简单的方式比如 XXXX templ 其结果就是#37H这个数?
谢谢
程序中要将37H 38H 39H 3AH 中的四个数通过串口发回PC机,
所以要知道开始的地址程序处理起来会很方便,现在的处理方式要定义另外变量来记录这个起始位置
总是想如果有一个更好的方法不是更好?
mov A ,templ 只是将37H中的值传到了A,有没有一个命令是将这个值所在的地址传出来的呢 展开
4个回答
展开全部
在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所指定的内容
……
注意:发送时,要等待前一个发送完毕,再发送下一个。
可以如下编程:
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当做指针来读写。
做而论道这里给出的方法,就是针对该区域操作的、可随意移植的唯一方法。
呵呵,看遍了单片机的教材,也没有一本提到这种简便修改操作区域的方法与例题。
到我的百度空间踩踩吧。
展开全部
有例如
templ EQU 30H
MOV templ,#37H
这样其结果就是#37H这个数
templ EQU 30H
MOV templ,#37H
这样其结果就是#37H这个数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每个变量在内存都有一个地址的,地址一般都是是16位的,而不是8位的。可以使用&符合去地址
例如定义一个变量 unsigned char data;
&data,就是去单片机内存地址
例如定义一个变量 unsigned char data;
&data,就是去单片机内存地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我在某些资料中看到过这样的
NOW DATA 40H
......
MOV R0,#NOW
这里的#NOW是表示变量NOW中的数值?
还是表示变量NOW的绝对地址?迷惑中。。。
求高人解答
NOW DATA 40H
......
MOV R0,#NOW
这里的#NOW是表示变量NOW中的数值?
还是表示变量NOW的绝对地址?迷惑中。。。
求高人解答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询