wuzhengmin 发表于 2025-12-6 10:26:56

数据总线兼顾32位16位8位1位:

来张特写:

wuzhengmin 发表于 2025-12-6 10:31:42

要想理解上次姚总讲的,先看看:

STC32G系列芯片内部则是采样32位宽度的数据总线,从而确保32位的edata数据可以一个CPU时钟就可完成数据读写。而Intel的80251,由于制造工艺和成本的原因,芯片内部的数据总线采样的8位宽度的设计,同样32位的edata数据的读写,Intel的80251则需要读写4次,再进行数据合并。

看40年前的8051框图:

wuzhengmin 发表于 2025-12-6 10:33:17

实际操作一下:
传统8051:

wuzhengmin 发表于 2025-12-6 10:33:41

这4组32个8位寄存器,在程序状态字寄存器PSW中的RS1RS0的2个位的控制下,来选择使用那一组寄存器。注意传统的8051这32个寄存器不能同时使用。
CUP在寄存器PSW中的RS1RS0的2个位的控制下,1次只能看到8个寄存器。



这样首先要解决24位地址的寻址空间扩展问题(注意还要兼容旧8051)


就是说姚总要在兼容8位数据操作的情况下,对16位和32位数据如何处理?

(上次课件姚总补充是每次都拿32位出来,看情景决定是否丢弃部分数据)


外设是通过地址总线和数据总线来交换数据,从而得到控制使用的

8位机基本存储只有256个字节,而STC32系列是4K,翻了4*4=16倍。这个是32位机的基本存储器


还有XDATA ,是8K。相当于8051的扩展RAM :现在STC把它放在片内:

这样STC32系列,片内的RAM就有12K

不过我平时用C51驱动个LCD12864,也还没搞清楚如何合理分配存储器,那些关键字是放在EDATA,哪些放在XDATA


很多数据指针也有严格要求,一不注意就一堆错误,还有待提高............

wuzhengmin 发表于 2025-12-6 11:04:14

在MCS-251 ISA中,对于24位地址总线进行了定义,高8位表示访问的段空间,低16位表示当前访问段空间的具体存储单元位置,使用xxxx xxxx:yyyy yyyy yyyy yyyy表示

前8位表示段的空间:

wuzhengmin 发表于 2025-12-6 11:08:27

这里的段表示我们访问的是EEPROM还是
EDATA 或者是XDATA,以前8位机通过指令区分访问的是基本存储区还是扩展存储器,是通过mov的后缀:C指Flash或者EEPROM,X就是指访问扩展区域XDATA,mov就是访问基本存储区域。现在不但通过指令,还要通过地址的物理区别来进行:地址的高8位表示是程序区、 或者基本的片内区(称为E)、或者外部扩展区域X

有点回到8086的感觉


现在STC32G:
使用16位二进制数"yyyy yyyy yyyy yyyy"表示所访问当前段的具体存储单元位置。
高8位决定我访问的是程序区简称C?还是基本片内RAM区简称E?还是外部扩展区域 XDATA。简称X
几乎是8086段基址,和偏移地址的翻版,不过还是现在STC这样爽,直接放这里!



wuzhengmin 发表于 2025-12-6 11:17:40

我们看看片内总的存储空间:

wuzhengmin 发表于 2025-12-6 11:40:02

其实DMA控制单元也很重要

它会在片内基本存储区和片内扩展区有物理连线

它和外部设备也是直接有线连在一起

这意味着在存储器和外设之间可以直接搬运数据

不必一定要通过CPU!

wuzhengmin 发表于 2025-12-6 11:44:52

STC32集成了很多旧8051没有的东西:

wuzhengmin 发表于 2025-12-6 11:49:09

与STC15/STC8系列增强型8051单片机相比,STC32G系列单片机内处理器核的寄存器数量有了显著增加

页: 25 26 27 28 29 30 31 32 33 34 [35] 36 37 38 39 40 41 42 43 44
查看完整版本: 跟着何宾老师学习STC32位8051单片机原理及应用-STC32G12K128