找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2093|回复: 2
打印 上一主题 下一主题
收起左侧

从设计角度理解51单片机存储结构与寻址方式

[复制链接]
跳转到指定楼层
楼主
ID:266429 发表于 2018-6-4 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、这样理解数据存储器
单片机的工作机制并不复杂,最主要的包括两大系统,即数据处理系统和数据存取系统。
打个比方说,你在做算术时,流程是这样的:你先把需要处理的两个数据从题目上找来,然后按计算规则放在你的作业本上,然后对这两个数据进行算术计算,然后将结果写在计算式后面,然后你可能还要将计算结果写在别的地方如卷子上。
在这个流程中,算术计算是依靠你的大脑的处理来得到的,你的大脑就是数据处理系统,而把数据拿过来就是数据的“取”,将结果写在卷子上就是“存”。在这其中,“存”“取”所用到的介质,就是存储器。
数据处理与数据存取,是单片机的核心,单片机对数据进行什么样的处理,我们只需给它一个命令,它就会自己去实现,我们并不需要知道它的详细的处理过程;而对于数据从哪里取、取后放在什么地方、处理后的结果需要放在什么地方,这个就得程序员来一个一个地安排了,单片机自己是不会做的,也就是如果你不告诉它需要处理的数据在什么地方,处理完成后的结果需要放在哪,它是不会自己来自动安排的。当然,我们这里说的是汇编语言和机器语言。
另外说一句:所计算出来的结果是作什么用的即其用途是什么,那就是另外一件事了。这些用途之类的处理,并不是单片机的核心功能,而只是其拓展功能,核功能仍是数据处理与数据存取。
学习与理解汇编语言编程原理其实很简单,一是记住单片机本身有哪些数据处理命令,这个通过多编程就可以记住了;第二就是对数据进行合理的存取位置安排与计划,这个只要你理解了存储器的设置机理,你就可以很好地做到。
二、这样理解程序存储器
我们在做算术题时,用到的“存取”,只是对数据的操作,这些数据,我们要么写在草稿纸上要么写在作业本上或卷子上。这个在单片机中,对应的,就是数据存储类存储器,即教科书上所说的数据存储器,只对需要处理的数据和计算结果进行存取操作。
以上做法,在题目简单计算步骤较少需处理的数据较少时,你可以只用你的大脑来记忆控制整个计算流程就行了,但是,当计算工作量很大时,特别是需要很长时间比如得几天,那么你就不能只凭大脑来控制整个计算流程了,你得先写一个计算的流程书来说明整个计算步骤,然后你就按这个流程书一步一步地来进行计算,每执行一步都做个标记以表示你已经做完这一步了,这样,不管多复杂的计算题,你都不会弄乱。
其实,单片机本身是没有一个能够控制整个计算流程的大脑的,它的每一步操作,包括从哪里取数据、对数据进行什么样的处理、处理后的结果存在哪,都必须由程序员事先告诉它。怎么告诉它?这就是我们所写的程序即前面说的流程书。这些写好的程序要交给单片机即存入单片机内(或单片机能找到的地方),单片机才能按这个写好的程序来一步一步地按程序员的要求来执行。这个存放程序的地方,就是单片机的程序存储器。在这里,我们还知道了为什么我们要给单片机写程序。
有一点要说明的是,单片机中写在程序中的需要处理的数据是存在程序存储器中的,至于其如何区分指令与数据,想知道的可以百度一下(我发誓不是给百度做广告)
三、这样理解数据存储器的种类
数据存储器的分类方法之一,就是其距离数据处理器的时间距离(不是物理距离),这个距离,决定了单片机存取数据所花费的时间,直接影响到程序运行的时间。为什么我要在这里说时间?因为这直接关系到单片机的运行速度,单片机的工作原理很简单,但在芯片设计上,设计师最主要的精力并不是功能方面的,而是提高运行速度,它决定着你的芯片能否卖得出去并卖出个好价钱。所以,数据存储器作为单片机的核心之一,其设计布置,以保证提高运行速度为根本。
还是以做算术题为例,就只做两个数据的算术计算时,这两个数据其实是就放在你眼前的一张纸,你抬眼就能找到它。这是第一种情况。
当数据多了时,你的数据就要记在一个本子上了,找数据时你可能就要翻本子了,这个是第二种情况,比第一种情况多花一些时间。
当数据量更大、而你的本子记不下了时,怎么办?那你就要记在别的本子上了。这就是第三种情况了。这时问题就来了,你放在手上的只有第一个本子,你的这个本子是编了页码的,你在这个本子上找数据是根据页码来找的,你增加了一个本子后,怎么才能在这第二个本子上找到你所需要的数据?跟在第一个本子的后面续编页码么?还是采用其它方法?这里我们暂不讨论,只说明一下,这第三种情况,其所花费的时间,与采用的寻找数据的方法有直接关系,但最好的情况,也不过是与第二种情况所花费的时间一样多,基本上都会超过第二种情况。(思考一下,为什么片外RAM可以从地址0000开始,但片外ROM则不能)
从以上三种情况来看,存储结构的设计,将直接关系到单片机的运行速度,而我们知道,第一种情况是最快的,所以,在结构设计时,应尽可能多的将存储器放在你眼前,这个放在单片机眼前的,就是累加器、B寄存器之类的,抬眼就能找到的。在物理设计上,它们与数据处理器是直接电路连接的即专用且直通方式,是每一个这类寄存器一个专用“车道”与数据处理器连接,同时设计了一个专用机器指令,对应于汇编指令,也是每一个这类寄存器有一条专用指令。这些单元,其实在芯片硬件电路设计中是属于CPU部分的,而不是在RAM中,我们可以称之为核心存储单元。
第二种情况,对应的就是书上所说的片内数据存储器中的一部分,这部分就是编了页码的本子(这里有一点要说明的是,核心存储单元其实也在这个本子上占了页码的)。这一类,我们称之为片内编码式存储单元即书上所说的片内RAM
第三种情况,对应的就是片外编码式存储单元即片外RAM
四、这样理解寻址方式
好了,从上面所述,单片机用到的存储器其实就只有四种:三种数据存储类和一种程序存储类。
单片机在对数据处理前和处理后,所做的事就是对数据的存与取,所谓寻址方式,就是找数据存数据,通俗地说是倒腾数据,专业一点的说法是数据传送,从这个存储器到那个存储器,不过有一点,单片机的设计上,有些存储器之间是不能直接进行数据倒腾的,而是必须通过A寄存器等的。需要说明的是,单片机在运行时,程序存储器中的内容是不可改变的,所以运行时对程序存储器只有“取”操作,而没有“存”操作。
明白了存储器的设计分类,明白了所谓寻址不过是数据倒腾,那你自然明白所谓的寻址方式是怎么回事了,甚至,你可以不管所谓的寻址方式,你在编程时只要清楚你准备如何安排数据的存取位置,然后你从现成的汇编指令中找到合适的数据存取指令并应用之就行了。
PS:个人觉得教科书中的寻址方式分类法,并不能反映数据倒腾的根本,甚至会让人知其然而不知其所以然,会僵化你的编程,所以,我们要多角度来理解数据的倒腾方式以全面了解之。
PS2:所谓的位操作,我们其实知道,利用现有的汇编指令可以实现对任一存储单元中任一位的操作,但那属于软件操作。而单片机中给定的位操作指令,都是硬件实现,即操作指令发出后,对位的操作过程全部由芯片内的硬件逻辑电路来实现,在电路上这样设计的目的,只是为了快速实现。这个电路,就是书中所说的位处理器。
PS3:数据传送指令,还有一种分类方法,那就是专用传送指令和通用传送指令。专用传送指令是指直通车式存储单元之间的数据传送,不同的直通车式存储单元之间的数据传送,每一样都专门有一个机器指令,这样设计的目的,同样是为了快速。通用传送指令就是一条指令可以用于多个存储单元,只需在该指令后面写上要操作的存储单元就是了。当然,这种说法,针对的是机器指令。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:272269 发表于 2018-6-4 23:12 | 只看该作者
赞一个,好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:266429 发表于 2018-6-24 09:54 | 只看该作者
jizi 发表于 2018-6-4 23:12
赞一个,好资料,51黑有你更精彩!!!

    谢谢。我写这个帖子,最主要的原因,还是因为看到坛里在设计理论方面的探讨不多,不能理解设计理论,则就最多只能做到知其然而不知其所以然,然后编程时就只能照抄别的人程序。纯属个人性格,不喜欢照抄别人的东西,而是希望一切都在自己头脑中,做到在编程时全部程序都从自己手中流畅地写出。
   还有就是,对现有的教材都不太满意,特别是在基础理论方面,只是照抄原设计者出的书,这也导致了芯片设计和程序编制人才培养跟不上需要,这也是现在只能跟在别人后面亦步亦趋的原因之一。
    我写的所有帖子,自认为都是有新意的,相对来说更接近于对根本的探究,对与不对另说,仅是希望能改变思维方式而去探本求源。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表