导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:地址分配问题[cwsuperman]

 *第5306篇: C51编程:地址分配问题

  
楼 主:cwsuperman 2002年10月5日15:11
 C51编程:地址分配问题
小弟刚刚毕业,现在做嵌入式系统开发。最近做的项目中使用Intel的80C31BH单片机作为主
控,80C31BH无内部ROM,故使用一片27C256 EPROM作为外部ROM使用,内部有128字节的
RAM,够用了,呵呵。现在遇到一些问题,想请教各位大侠:
1.我想扩充I/O端口,那么I/O端口的地址是和外部的EPROM统一编址吗?
2.PSEN信号到底什么时候产生?是仅仅访问外部ROM的时候产生吗?如果访问外部RAM或者扩
充的I/O端口时,会不会产生呢?在软件上呢,执行什么指令的时候会产生这一信号?
3.如果扩充的I/0端口和EPROM统一编址的话,那么能不能允许地址重叠现象?是否可以通过
PSEN信号加以区分?
谢谢!!!
  
2楼:pan-x 2002年10月5日16:28
 地址分配
1、用80C31BH,EA=0,CPU自动产生PSEN取指信号,无须软件处理。
2、51系列单片机外部ROM和外部RAM是相互独立的,在地址上不存在重叠现象,各自按各自
的寻址方式进行。所以,在扩充外部RAM或I/O时,根本不用考虑ROM的地址。
  
3楼:cwsuperman 2002年10月5日17:22
 问题
  那如果我执行Mov a,@DPTR指令的话,如何知道是从外部的RAM还是从ROM里读的呢?
  还有,8031不是有内部RAM吗,读写内部RAM的时候PSEN也会产生吗?
  
4楼:pan-x 2002年10月5日19:10
 解答
1、mov a,@dptr是不会编译成功的,应为movx a,@dptr,所指为外部ram,至于用@dptr或
@ri,要看地址为16位还是8位,书上写的很清楚的;
2、读内部RAM的时候PSEN不发生反应。
  
5楼:cwsuperman 2002年10月5日19:37
 再问一句
1.我写错了,那么movx a,@dptr的话,系统怎么知道是读的外部RAM还是ROM呢,外部ROM也
可以读啊??
2.是不是只要对外部的操作--外部ROM,RAM,I/O都会使得PSEN有效呢?
  
6楼:pan-x 2002年10月5日20:12
 这要仔细分析CPU时序
这要仔细分析CPU时序。
    在访问外部ROM时,ALE出现两个正PLUS,提供同步信号,以便锁存地址,PSEN出现两个
负PLUS,提供外部ROM选通信号,以便从P0口读取数据。
    只有CPU执行MOVX指令时,才对外部RAM读取数据。
    ALE和PSEN在每个机器周期内出现两次,在S1P2和S2P1期间及S4P2和S5P1期间。对于单
周期指令,指令码读入后,从S1P2开始执行指令。对于双周期指令,在第一机器周期内读完
操作数,而双字节指令第二机器周期无取址,无ALE。
   外部RAM和I/O是一样的。
  
7楼:cwsuperman 2002年10月5日20:19
 是吗?
 首先谢谢你的答复。
 外部的RAM和ROM地址能否重叠?
 如果重叠的话,我执行mov a,@dptr指令的话,那么是从外部RAM还是ROM中读的数据?
 
  
8楼:pan-x 2002年10月5日20:27
 当然
ROM and RAM 皆为64K寻址,当然可以重叠啦。
“movX a,@dptr”,movx的指令解释就是外部RAM ,是不容怀疑的。 

>>>>>>对该主题发表你的看法

本主题贴数8,分页: [第1页]


[上一篇主题]:求救:如何对网卡编程?

[下一篇主题]:C51编程:各位大哥救命啦!!!