51单片机中程序存储器与数数据存储器地址一样如何存储信息

比如在某一地址单元中作为程序存储器其中需要存AAH而作为数据存储器单元要存DEH如何解决?
比如有一个空水杯甲(存储地址),现有两种饮料,果汁A(程序代码),汽水B(RAM数据)我们知道这水杯的特性是只能装一种饮料,现在问题是如何既在杯中装汽水又装果汁?烦请解释一下,谢谢!

首先要搞清一个问题,对于51单片机扩展外部数据存储器时,才会有程序存储器和数据存储器的地址相同。其次是程序存储器在正常的工作时,是不能存储数据的,只有在编程状态下才可以写数据的,而正常工作时只能读出程序或数据,所以,才叫只读程序存储器ROM。搞清这两个问题后再解释你的问题:如果程序存储器在内部,那么单片机在取指令时自然就在内部读取,不会到外部读任何数据的,所以,与外部数据存储器无关系。如果是扩展外部程序存储器的情况下,单片机在读取指令时,(只能读不能写,即不能存储)是用PSEN(非)信号来读取ROM的。而要读/写外部数据存储器时,一是只有在执行MOVX指令时,才读/写外部数据存储器,在硬件上是用RD(非)信号读数据存储器的,用WR(非)信号写数据存储器的。因此,就算是两者的地址相同,但是读/写的信号是不同的,因此,就不会搞混的,单片机会自动区分是读什么存储器。追问

你好,很感谢你的回复,至于“对于51单片机扩展外部数据存储器时,才会有程序存储器和数据存储器的地址相同”出至于何资料?据《新编MCS-51单片机应用设计》张毅刚(第三版)哈工出版 第十九页“数据存储器与程序存储器全部64K字节地址重叠”如果在烧入程序时FF00H单元已被填入AAH,在运行时作为数据存储器要对其写入DEH该如何解决?

追答

“数据存储器与程序存储器全部64K字节地址重叠”这确实不错,可你并没有再看教材是怎么继续讲述的,地址重叠那又是如何区别这两种存储区的?你后面的提问更是错误:如果在烧入程序时FF00H单元已被填入AAH,在运行时作为数据存储器要对其写入DEH该如何解决?解释:既然是烧入程序,那就是程序存储器,在运行就不可能再作为数据存储器去写入。如果是作为数据存储器的话,如果已经写入你要求的AAH,再想写入DEH的话,那就是新的数据DEH,原来的数据就没有了,不可能两个数据都保留的,这是电子,不是汽水,这是科学,不是游戏,你想怎样就怎样的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-30
那就存呗。
程序存储器、数据存储器,是两个不同的存储芯片,即使地址号码相同,也没有任何关联。追问

你好感谢回答,我之前也有类似的感觉,但查不到相关的资料说明,请问出至何处?

追答

程序存储器、数据存储器,是两个不同的存储芯片。

和单片机引脚 PSEN 相连的芯片,是程序存储器;
和单片机引脚 RD、WR 相连的芯片,是数据存储器。

你在书上,找找这几个引脚的功能说明,即可知道。

另外,对这两种存储器,读写的指令,也完全不同。
分别是 MOVC、MOVX。

51单片机的程序存储器、数据存储器,没有任何关联。

各自都有 0000~FFFFH 的地址范围。
----
两种存储器,是独立的,这称为哈佛结构。

51单片机的存储器,就是哈佛结构。

本回答被提问者采纳
第2个回答  2013-06-30
他们的写入方法不同。读出指令不一样
程序存储器的AAH需要特殊方法才能写入。 读出用movc指令。
数据存储器单元的DEH用mov(内部存储器)或movx(外部扩展存储器)指令进行,可读可写。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网