找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3302|回复: 7
收起左侧

哈佛结构和普林斯顿结构

[复制链接]
ID:155499 发表于 2016-12-17 23:49 | 显示全部楼层 |阅读模式
有大神能详细的说下51单片机中的哈佛结构和普林斯顿结构吗?拜托拜托!!
回复

使用道具 举报

ID:155507 发表于 2016-12-18 10:05 | 显示全部楼层
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。

目前使用哈佛结构的中央处理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安谋公司的ARM9、ARM10和ARM11,51单片机也属于哈佛结构

普林斯顿结构也称冯·诺伊曼结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。

目前使用冯·诺伊曼结构的中央处理器和微控制器有很多。除了上面提到的英特尔公司的8086,英特尔公司的其他中央处理器、安谋公司的ARM7、MIPS公司的MIPS处理器也采用了冯·诺伊曼结构。

评论:哈佛结构和冯.诺依曼结构都是一种存储器结构。哈佛结构是将指令存储器和数据存储器分开的一种存储器结构;而冯.诺依曼结构将指令存储器和数据存储器合在一起的存储器结构。
回复

使用道具 举报

ID:155499 发表于 2016-12-19 08:40 来自手机 | 显示全部楼层
谢谢一楼
回复

使用道具 举报

ID:155499 发表于 2016-12-19 08:44 来自手机 | 显示全部楼层
我再问一下,单片机内部数据RAM128B和外扩的128B数据RAM是哈佛结构吗
回复

使用道具 举报

ID:155507 发表于 2016-12-19 09:37 | 显示全部楼层
是的,单片机内部数据RAM128B和外扩的128B数据RAM是哈佛结构

关于51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。
下面我给楼主讲解一下:
51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。
51单片机有以下几个内存模块组成:
ROM或者Flash就不说了。 访问code是专用指令,就是单独的从0开始编地址的。
RAM有------内部RAM的低128位(00-7F)
          -------内部RAM的高128位(80-FF)---【89C51单片机没有这一段空间】
          -------特殊功能寄存器(SFR)(80-FF)
          ------外部RAM 64K(0000-FFFF)

楼主又疑惑了,好多地址是重复的,比如,我向80H地址写一个数值,单片机怎么知道读的是内部的高128位RAM?还是SFR?还是外部64K的RAM呢?

答案是用指令,如果是直接寻址,那么访问的就是SFR,如果是R0或者R1间接寻址,就是内部高128位RAM,如果是DPTR或者是R0,R1间接寻址,且配合的是MovX指令,那么就是访问外部64KRAM中的第80H个地址。

明白以上原理,楼主就明白了为什么地址只有8位,52却号称有512B,因为他的内部低128B RAM+内部高128B RAM+外部64KB RAM中的前256B,所以有512B,另外还有个SFR,但是,SFR不算是内存,这个楼主要搞清楚!
而51仅有内部低128B,所以51远不如52高级。

那么,为什么说外部可以扩展到64K呢,因为DPTR是16位的,2的16次方是65536 = 64 KB
但是通常单片机不会用那么多内存的,所以基本外部就是256B--1024B之间,现在STC据说准备出一款4096B外部RAM的单片机。

以上所说的只是针对51内核的单片机,其他内核的,像ARM之类的,不是这种结构的。
回复

使用道具 举报

ID:155499 发表于 2016-12-20 09:10 来自手机 | 显示全部楼层
angmall 发表于 2016-12-19 09:37
是的,单片机内部数据RAM128B和外扩的128B数据RAM是哈佛结构

关于51单片机内存问题,一直是个疑惑大家的 ...

谢谢(*°°)=3
回复

使用道具 举报

ID:155499 发表于 2016-12-20 11:23 来自手机 | 显示全部楼层
angmall 发表于 2016-12-19 09:37
是的,单片机内部数据RAM128B和外扩的128B数据RAM是哈佛结构

关于51单片机内存问题,一直是个疑惑大家的 ...

那16位DPTR中的地址是怎么进来的呢,我的意思是说用于数据存储器的接口只有8位,怎么把16位的片外地址送进来,是用其他方式吗
回复

使用道具 举报

ID:155507 发表于 2016-12-20 18:54 | 显示全部楼层
数据指针(DPTR)
是一个16位的特殊功能寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。主要功能是存放16位地址,作为片外RAM寻址用的地址寄存器(间接寻址),故称数据指针,也可以将外部RAM中地址的内容传送到内部RAM的地址所指向的内容中。

DPH和DPL的地址分别为83H、82H。

8位单片机,所有的寄存器硬件上都是8位模式访问;“所谓的的16位,都是2个8为拼起来的”

DPTR如
Mov DPTR,#1000H

把16位的片外地址送进来,分两次送进DPL和DPH两个8位寄存器

MOV DPL, #00H
MOV DPH, #0A0H


访问片外数据存储器的指令:

MOVX A,@DPTR读
MOVX @DPTR,A写

指令以16位DPTR为间址寄存器读片外RAM,可以寻址整个64KB的片外空间。指令执行时,在DPH中的高八位地址由P2口输出,在DPL中的低八位地址由P0口分时输出,并由ALE信号锁存在地址锁存器中。

DPTR的另一个作用是变址寻址,访问程序存储器,做查表指令:如:
以dptr为基址寄存器,将dptr的内容与累加器a的内容相加得到变址地址
movc a, @a+dptr ; (a)<-----((a)+(dptr))
jmp @A+DPTR;间接转移指令,将DPTR中的16位数和累加器A中的8位数相加,并直接送入PC,实现散转功能。对A、DPTR和标志位无影响。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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