|
发表于 2013-8-12 09:06:10
|
显示全部楼层
大哈欠E 发表于 2013-8-11 20:54 ![](static/image/common/back.gif)
我没有搞混淆,大神可能没仔细看问题,我纠结的是port1 port2是51单片机的io端口,像P1和P2,但如果是这 ...
通常使用51自身的端口是不会这样去写的,看你的写法是立即数,通常这个立即数是在使用总线方式操作时的扩展IO的映射地址,这样的操作实质上是设置总线上扩展的地址,而不会直接把51自身端口的地址以立即数的写法付给DPTR,这样是没有意义的,你即便给DPTR付值为P1口的地址这样也是无效的,因为这种MOVX的写法会影响的IO有P0,P2,WR,RD,ALE......但不会影响P1口
MOV A,#00H
MOV DPTR,#POTR1 ;port1为单片机的io口
MOVX @DPTR,A
这种写法中#POTR1就是总线扩展端口的映射地址,通常是16bit的,但当然你也可以赋值为8bit的地址,付8bit时高8bit就是#00H,这个地址是由你总线上IC的接法决定的,这个 MOVX @DPTR,A在执行时是将A中的内容赋值给#POTR1地址的,这个#POTR1地址由P0,P2口组合完成,这样看出来我为啥说使用这种写法能直接操作2组IO了吧,你说这个DPTR和端口有无关系?
如果这样写你还不理解,那你可以去看看微机原理中的总线扩展RAM,ROM的地址编码部分了,现代通常讲MCU这部分总线扩展一般都不怎么讲了,因为同样内核的片子内部的RAM和ROM都有更大的了,总线扩展将占用的IO会比较多,而且可靠性也相对降低 |
|