现在的8位单片机发展已经非常成熟。现在有一个概念是“片上系统(SOPC)”,除了电源,将所有的功能集成在一块芯片中实现。使系统设计变得非常简单,大大缩小硬件的体积、降低成本和功耗。如果您见过使用很早的老型号C51单片机就直达区别了。在进行硬件设计时如果选择C51作为处理器。那么您可能要设计外部RAM、ROM作为数据区和程序区。这就为什么P0是开漏设计的。因为P0必须同时担负数据和地址总线的功能。
现在的单片机基本至少有512B的RAM、8K以上程序区。如果您想要更多的RAM和ROM那么您选择其他型号MCU即可。因为硬件设计更简单、成本更低。C8051F0204KRAM、64K程序FLASH。STM32103一般20KRAM、128K程序FLASH。而且STM32价格也非常低。如果项目想要直接选择STM32即可,不要犹豫。C51毕竟已经非常成熟。在这方面社会上高手非常多。我个人认为STM32代表可见一段时间未来。
下面我们来了解STC89C系列的内存,其实使用C语言编程编译器会帮你处理一些问题的。STC89C51RC/RD+系列单片程序存储区与数据存储区是独立编址。这句话怎么理解,如果对比PIC单片机就可以知道为什么了。也就说STC89C51RC/RD+系列单片机是冯若依曼体系。数据与程序分开存放。也就是说RAM有0x00地址、code也有一个0x00地址。STC89C51RC/RD+可以访问外部64K地址空间的code区。8位C51的单片机地址总线是16位的。可寻址的空间是0x0000---0xFFFF。这就是我们在市面上买到的C51的单片机为什么最大的地址空间是64K的原因。下图是STC手册介绍的STC89C54RD+的单片code区。
这说明该款产品是16K code空间。我们在前面介绍了STC89C51RC/RD+系列单片可以访问外部code。但是怎么确定到底使用内部code还是外部code。这个是由单片机管脚EA电平决定的。EA为高电平时低地址段内部code,高地址段访问外部code。EA为低电平访问外部code。但是在今天不会再出现使用外部code的现象。因为64K单片机与8K单片机价格几乎一样了。从成本考虑直接使用大容量MCU即可。
当MCU复位上电后PC寄存器的值为0x0000,执行第一条指令。程序即可运行起来。
关于RAM,STC给出了以下图例。这是STC89C54MCU单片机内部RAM。0x00-0xFF共计256B。0x00-0x7共计128B与标准的C51是一样的。可以直接寻址也可以间接寻址。0x80-0xFF共计128B只能间接寻址。但是特殊功能寄存器只可直接寻址。这一段怎么理解?其实理解这一段可以不理解使用C语言也可以进行项目编程。因为C语言编译器会替我们处理这些细节。但是会混乱。因为P0寄存器的地址是0x80。为什么定义一个变量x地址也是0x80。为什么没有发生重接。这就是因为特殊功能寄存器地址虽然也是0x80-0xFF,但是使用寻址方式不一样。直接寻址便是访问P0寄存器。间接寻址是访问内存。
下图是0x00-0x7F低128B字节图示
0x00-0x28合计32个寄存器,分为四组,每组8个寄存器,分别是R0---R7,0x20--0x30合计16个寄存器是可以为寻址的单元。128位,地址空间是0x00-0x7F。与低128B地址空间一样。但是两个物理地址是不同的。通过访问指令可以区别。
0x30--0xFF使用分配给用户使用RAM和程序堆栈。复位后SP指向0x07H.