打印

51单片机寄存器赋值

[复制链接]
4618|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
W_Controller|  楼主 | 2012-9-22 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
心静自然凉| | 2012-9-22 17:05 | 只看该作者
本帖最后由 心静自然凉 于 2012-9-22 17:08 编辑

这个问题问的好,LZ看书看的认真,想的也深。

我以我现掌握的知识水平浅略的告诉你,寄存器之间不能相互赋值,这是跟单片机的内部电路结构有极大关系的。
或者这么说,51单片机有111条指令,意思就是说,你只能通过这111种控制方式来操作51单片机,其他都是无效的.

使用特权

评论回复
板凳
forgot| | 2012-9-22 17:30 | 只看该作者
只有那几种寻址方式  你记好就可以了   汇编:L

使用特权

评论回复
地板
gx_huang| | 2012-9-22 18:20 | 只看该作者
如果所有的寄存器之间都可以直接赋值,MCU的总线结构会复杂很多。
51可以MOV dir,dir,但是SFR不能 dir 访问,只能间址访问。

使用特权

评论回复
5
W_Controller|  楼主 | 2012-9-22 19:16 | 只看该作者
呵呵,首先感谢各位大侠的回答了

使用特权

评论回复
6
W_Controller|  楼主 | 2012-9-22 19:21 | 只看该作者
不知有没有哪位大侠能从内部结构给我解释一下:handshake

使用特权

评论回复
7
gx_huang| | 2012-9-23 06:45 | 只看该作者
LZ,51有:
MOV Rn,dir
MOV dir.dir
所以要实现MOV R1,R0,如果确认R0/R1在BANK0(00H/01H)单元,则可以:
MOV r1,00h
或者
MOV 01H,00H
一般还是用ACC中转比较好。

使用特权

评论回复
8
gunzhusigan| | 2012-9-23 11:17 | 只看该作者
我知道HIWIN滚珠丝杆用于,XY工作台、加工中心丝杠 、单片机、上,但电路方面我的工程师懂得多一点~!








SIGNATURE............................................................................................................................
HIWIN滚珠丝杆|

使用特权

评论回复
9
W_Controller|  楼主 | 2012-9-23 18:19 | 只看该作者
额。。。大侠可能还是没有正面回答我的问题。

使用特权

评论回复
10
W_Controller|  楼主 | 2012-9-23 18:20 | 只看该作者
我想明白为什么不可以
MOV   R1,R0

使用特权

评论回复
11
W_Controller|  楼主 | 2012-9-23 18:22 | 只看该作者
虽然以上各位大侠没有正面回答我的问题,但还是谢谢了:)

使用特权

评论回复
12
心静自然凉| | 2012-9-23 18:59 | 只看该作者
11# W_Controller
你所谓的“内部结构”指的是什么呢?

使用特权

评论回复
13
wh6ic| | 2012-9-23 19:06 | 只看该作者
8位微控制器中Z8系列的可以,通用MCU中可以的很多。
至于为什么51核这样,与它的微指令译码结构有关。

使用特权

评论回复
14
W_Controller|  楼主 | 2012-9-23 20:43 | 只看该作者
11# W_Controller  
你所谓的“内部结构”指的是什么呢?
心静自然凉 发表于 2012-9-23 18:59
就是指单片机的内部构造,即如果寄存器与寄存器之间可以直接赋值的话,会造成什么后果呢,51内核这样做到底是为了避免什么东西

使用特权

评论回复
15
xuyaqi| | 2012-9-23 21:22 | 只看该作者
这和城市公交规划线路一样要考虑经济性你出门就得坐人家安排好的线路而不可能随意。

使用特权

评论回复
16
wh6ic| | 2012-9-23 21:33 | 只看该作者
51核设计为8位字长指令字,如果R0~R7间直接寻址,需要6bit,占用字长过宽,得到的益处过少。如果扩充为16位字长,速度、字长空间与MOV   A,R0  ;MOV   R1,A 一样,而且微代码结构复杂很多。

使用特权

评论回复
17
W_Controller|  楼主 | 2012-9-24 08:08 | 只看该作者
51核设计为8位字长指令字,如果R0~R7间直接寻址,需要6bit,占用字长过宽,得到的益处过少。如果扩充为16位字长,速度、字长空间与MOV   A,R0  ;MOV   R1,A 一样,而且微代码结构复杂很多。 ...
wh6ic 发表于 2012-9-23 21:33
大侠,这个6bit是怎么来的?

使用特权

评论回复
18
wh6ic| | 2012-9-24 09:09 | 只看该作者
R0~R7 需要8个地址,3个bit。要直接赋值就需要两次寻址,所以就需要占6bit。

使用特权

评论回复
19
chaily94520| | 2012-9-24 16:31 | 只看该作者
谁说不行的??你们究竟有没有进行过实际的测试??
至少STC的51机就可以,不信自己烧这个程序试试:

ORG 0040H
MIAN:
MOV R0,P3
MOV R1,R0
MOV P1,R1
AJMP MIAN
END

这个程序是把P3做输入,把P3输出状态传给P1,P3的所有I/O外部输入变化的时候,P1输出同样值。这里就用了MOV R1,R0,测试是完全正常的!你们自己测试看看AT的行不行?

使用特权

评论回复
20
W_Controller|  楼主 | 2012-9-24 17:41 | 只看该作者
我编译不了,出错 20# chaily94520

使用特权

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

本版积分规则

3

主题

169

帖子

0

粉丝