跳转到主内容
Knowledgebase
Home
Renesas Electronics China - Knowledgebase

微控制器与存储器

最新更新:2011年10月 06日

Question:

微控制器与存储器

Answer:

[引言]
通常,程序和数据存储在存储器中,当微控制器操作时,必须经常访问存储器。
微控制器读取存储在存储器中的内容或者在需要时将新的内容写入存储器。但是由于存储器中存有大量程序和数据,对于需要的数据,必须根据主题,即确切地指定 存储器的哪一部分内容,才能获得。因此,存储器需要编址。通过指定地址,可以清楚地指定存储器的位置。这就如同电话网络,每部电话都被赋予一个电话号码, 当拨打某个电话号码时,就与相应的电话建立了连接。



8位微控制器(如在78K0系列中的)有8位寄存器,因此通常处理8位数据。使用8位定义存储器地址,可以指定256个。一个存储器的地址通常长 度是8位(一个字节),因此存储器容量用字节表示。一个具有256个地址,即256个字节的存储器无法存放一个程序。因此一个8位微控制器使用两个寄存器 (16位)指定一个存储器,这样可以使用最大可达65535字节的存储空间。因此一个8位微控制器通常可以表示最大容量为65536字节的存储器 (因为65536是一个大数,所以使用辅助单位k (kilo)表示1024字节(可以用10位表示),216字节= 26 x 210字节 = 64 x 1 KB = 64 KB字节。
 
同样,主要微控制器的位的个数表示如下
12 位: 212 字节 = 22 x 210 字节 = 4 x 1 KB = 4 KB
14 位: 214 字节 = 24 x 210 字节 = 16 x 1 KB = 16 KB
15 位: 215 字节 = 25 x 210 字节 = 32 x 1 KB = 32 KB
20 位: 220 字节 = 210 x 210 字节 = 1024 x 1 KB = 1 MB
24 位: 224 字节 = 24 x 220 字节 = 16 x 1 MB = 16 MB
30 位: 230 字节 = 210 x 220 字节 = 1024 x 1 MB = 1 GB
32 位: 232 字节 = 22 x 230 字节 = 4 x 1 GB = 4 GB

几乎所有的8位微控制器应用中,使用64KB存储器一般没有问题。事实上,78K0和78K0S系列中的大部分产品,容量从几个KB到32KB不等,使用 容量大于60KB的存储器的产品是有限的。然而,有些8位微控制器,即使程序只有64KB,仍然可以表示多达1MB的数据,因为这些微控制器可以用来处理 大容量的数据如字形数据。这些微控制器称为78K2微控制器。但是,它们没有容量大于64KB的内置存储器,仅能处理1MB的外部存储器。近期推出的8位 微控制器 (78K0/Kx2) 可以处理容量不少于64KB的存储器,且有自己的内部存储器。
 
在8080代微控制器中,第1个8位微控制器,配有8KB RAM的系统中可操作的汇编程序。此外,TK-80没有ROM,而每个RAM有1KB。
第1个单片微控制器8048有1KB的ROM和64字节的RAM (这意味着只能使用最大容量为4KB的ROM和2256字节的RAM)。
在这几代产品中,64KB是一个难以逾越的界限。而如今的8位微控制器已经超过了这个界限。

[访问存储器]
当微控制器使用存储器指定存储器地址时,要考虑两件事情。一是用程序指定存储器的方法(这是一个逻辑存储器指定方法)。当由程序指定存储器时使用寄存器。 为了读取即将执行的程序,需要使用一个专用寄存器,称为PC (程序计数器)。要写入或读取数据,需要使用两个8位寄存器构成一个16位寄存器。
另一个是用硬件对存储器进行物理指定。要指定存储器的一个地址,需要专门的信号线。换句话说,通过使用16位寄存器和16条地址信号线,可以从64KB中指定目标存储器。然后使用控制信号将数据写入存储器或从存储器中读取数据。
尽管指定微控制器的存储器为16位,但并不是16位都能用到。存储器被划分为几个区域,这样可以更容易地指定存储器。78K0与78K0S系列中,这些区 域包括一个称为SFR (特殊功能寄存器,分配给外围I/O功能)的区域,以及8位微控制器的saddr区域。这些区域分配给专门的指令代码,仅使用8位地址就可以指定其中的外 围功能和存储器。就好像你在拨打区间电话时无需拨打区号一样。但在使用微控制器时,也可以使用16位来指定地址(即也可以拨区号)。
 
[Coffee break]
大多数电话(按钮电话) 有一个单触拨号或简易拨号功能。8位微控制器也有类似的功能。子例程调用通常需要16位来指定地址,因此,指令长度为3个字节。不过有一个功能,只用1个 字节调用子例程(即只需按下一个按钮,就可拨打一个号)。使用CALLT指令执行该功能。该指令提前将子例程的地址记录在一个特定的表中 (就象电话号码簿)。当1条专用指令指定表中的一个数字时,就可以调用相应地址中的子例程。此外,也可以使用2字节子例程指令CALLF。该指令限定子例 程地址在一个专门区域内。

如果存储器容量达到64KB,就没有什么问题了,但是如果使用8位微控制器指定容量大于64KB的存储器,则会出现问题 (即,不能指定存储器)。此时可以使用扩展地址功能,如相应的简单总线切换方法和复杂的地址重定位方法。总线切换方法用于78K0/Kx2,而地址重定位 方法用于16位 V53。
(也可以参考存储器组的FAQ)
注: saddr 区域定位在78K0 和78K0S的0FE20H ~ 0FF1FH区间内。对该区域的访问要比其它区域快,而且很多指令都可以访问该区域。在寄存器不足时,该区域也可以用作扩展寄存器。
Suitable Products