问一个汇编最简单的问题,进来看看吧。

2020-01-27 11:31发布

本帖最后由 大哈欠E 于 2013-8-11 22:29 编辑

看到一个扫描矩阵行列程序的一部分,看了一下郁闷了。。。

KEY: MOV A,#00H
       MOV DPTR,#POTR1      ;port1为单片机的io口
       MOVX @DPTR,A              ;把行全部赋值为00H 相当于port1=00h
       MOV DPTR,#PORT2        ;读取列的值
       MOVX A,@DPTR
      
有两个问题:
1、为什么要这样写,读取列端口port2的值为什么用movx(对外部RAM的数据传送)?难道51单片机的io口port2属于片外ram吗?它的端口不是特殊功能寄存器的一个单元吗                                                                                                                                                                                                          2、为什么不这样写
                mov port1,#00h
                        mov a,port2
?访问51的sfr不是直接寻址的吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
30条回答
大哈欠E
1楼-- · 2020-01-28 10:17
marshallemon 发表于 2013-8-11 14:17
人家写的是间接寻址,你用的是直接寻址,还有DPTR是16bit的,能同时操作2组IO ...

小生刚接触汇编,有些问题还是不明白,对于51或52特殊功能寄存器块,不是只能用直接寻址访问吗?而对于52的高128字节ram只能用间接寻址,这样可以区分开来,为何这里用到了间接选址?还用movx间接寻址。。
大哈欠E
2楼-- · 2020-01-28 15:54
XA144F 发表于 2013-8-11 16:18
不用你说,我知道这是51的汇编。
8155或8255器件上的IO口就是用PA、PB、PC命名的,别以为只有AVR单片机才写 ...

小生刚接触汇编,有些问题还是不明白,对于51或52特殊功能寄存器块,不是只能用直接寻址访问吗?而对于52的高128字节ram只能用间接寻址,这样可以区分开来,为何这里用到了间接选址?还用movx间接寻址。。书上也没有原理图,只是说设行地址为port1列地址为port2,我觉大神说的有理啊,还有你们说的总线怎么这么深奥啊?51总线宽度是16位,用movx就用到总线,难道用mov就不是总线 8位?还说io模拟,小生更不懂了,看来是小生愚昧了,
请大神点拨一二。。
大哈欠E
3楼-- · 2020-01-28 16:42
 精彩回答 2  元偷偷看……
NJ8888
4楼-- · 2020-01-28 19:08
同意8楼意见
大哈欠E
5楼-- · 2020-01-28 19:47
wajlh 发表于 2013-8-11 16:28
很明显是用了总线的操作方式。楼主不理解的话,没必要看了,这都是哪个年代了玩意了。 ...

额,我怎么觉得还是有必要搞一下汇编了
大哈欠E
6楼-- · 2020-01-28 20:14
哎!都是论坛元老级人物了,佩服你们啊,更羡慕你们的知识。。。

一周热门 更多>