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

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-30 10:38
XA144F 发表于 2013-8-12 08:19
间接寻址不是只有一种方式,访问SFR是直接寻址,访问高128字节RAM用间接寻址。
访问外部总线上的设备,那 ...

嗯,这些搞清楚了,我以为port1和port2是单片机本身的端口,才提出这样的问题的,movx我也懂,我有一本《单片机原理及应用》,正在学习,我是用c做了几个作品之后,觉得有必要搞清楚单片机内部工作原理才反过来学汇编的。。。
大哈欠E
2楼-- · 2020-01-30 11:35
marshallemon 发表于 2013-8-12 09:06
通常使用51自身的端口是不会这样去写的,看你的写法是立即数,通常这个立即数是在使用总线方式操作时的扩 ...

嗯,谢谢,其实这些我早就明白了,我就是以为port1和port2是本身端口竟然还会用movx,怀疑这程序错误,结果后才知道port1和port2是扩展io所以采用movx寻址。。
marshallemon
3楼-- · 2020-01-30 12:45
大哈欠E 发表于 2013-8-12 11:08
嗯,谢谢,其实这些我早就明白了,我就是以为port1和port2是本身端口竟然还会用movx,怀疑这程序错误,结 ...

大哈欠E
4楼-- · 2020-01-30 18:02
marshallemon 发表于 2013-8-12 11:12

小生是个二愣子。。呵呵
marshallemon
5楼-- · 2020-01-30 21:36
 精彩回答 2  元偷偷看……
魏道志
6楼-- · 2020-01-30 22:02
我用的是C   一般不用汇编

一周热门 更多>