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

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-29 18:54
 精彩回答 2  元偷偷看……
大哈欠E
2楼-- · 2020-01-29 23:07
51单片机执行MOVX读指令时,相关的信号状态是(      )
A.PSEN无效为低电平,RD有效为低电平
B.PSEN无效为高电平,RD有效为低电平
C.PSEN有效为低电平,RD无效为高电平
D.PSEN有效为高电平,RD无效为高电平
选B吗? 呵呵
wshtyr
3楼-- · 2020-01-29 23:55
首先对 MOV @DPTR,A 表示疑问,应该是 MOVX @DPTR,A 吧?前面那句在keil下会报错的。

如果这么写,那就可能用了外部的锁存器来扩展IO,并且行和列都用了外部扩展

还有,“直接寻址”,“间接寻址”都是针对内部的SRAM和SFR来说的,由DPTR参与的是用来寻址外扩SRAM和程序存储器的
大哈欠E
4楼-- · 2020-01-30 02:10
wshtyr 发表于 2013-8-11 21:07
首先对 MOV @DPTR,A 表示疑问,应该是 MOVX @DPTR,A 吧?前面那句在keil下会报错的。

如果这么写,那就可 ...

嗯 对,书上是这样的movx 我粗心漏打了一个。。
XA144F
5楼-- · 2020-01-30 03:41
大哈欠E 发表于 2013-8-11 17:11
小生刚接触汇编,有些问题还是不明白,对于51或52特殊功能寄存器块,不是只能用直接寻址访问吗?而对于52 ...

间接寻址不是只有一种方式,访问SFR是直接寻址,访问高128字节RAM用间接寻址。
访问外部总线上的设备,那是基于movx的间接寻址,寻址目的地放在DPTR中。
你的程序里说出的是port1和port2,是外部总线上两个端口的地址,不是单片机本身的P1和P2,你必须要分清楚。不然的话,建议你还是看看北航出的51单片机教材,其他杂书就不用看了,更别看什么10天学会的。
marshallemon
6楼-- · 2020-01-30 08:22
 精彩回答 2  元偷偷看……

一周热门 更多>