wuzhengmin 发表于 2025-11-20 13:32:59

所有外设都可以去DMA,而DMA可以去存储器(EDATA+XDATA)Memory ,CPU越来越被淡化。8051主频不能光用CPU来算,CISC一条指令可以完成RISC的几条指令。

其实跟何老师学单片机基本原理,是蛮枯燥的,我是真心想和1982年的Z80对比一下,看看我们的基本原理和架构

有多大变化,起码汇编是差距不太大,继续努力!

好了,今天我们第十集下就到此结束!

wuzhengmin 发表于 2025-11-21 10:20:12

今天我们继续学习第十一集处理器内核和存储空间

汇编和系统原理确实很枯燥,学了的几集,我体会和我在1982年第一次学习Z80

的原理很相似,是块难啃的骨头,慢慢来........

先看看堆栈:


wuzhengmin 发表于 2025-11-21 10:22:00

51在256个字节的基本数据区开了一块区域
用来保存现场(当前的各个寄存器数值,状态寄存器的值,下一条指令的地址等等),以便中断后回来继续执行当前的程序。这块区域也要保存个首地址,由堆栈指针寄存器SP堆栈(Stack)负责。这个SP保存的是开在片内数据区的存储器的地址。堆栈的具体地址要根据指令集架构的规约来选择合适的位置。

下面看看进堆栈和出堆栈的过程:

wuzhengmin 发表于 2025-11-21 10:23:13

这个入栈和出栈,和1982年的Z80一模一样。

堆栈的入堆规约就是先地址+1,再把要入栈的数据压进去。

堆栈的出栈规约就是把数据弹出去,再地址-1,存入堆栈指针SP,实际是指向第二个数据。先进堆栈的后出去,后进堆栈的先出去,就像子弹的弹仓一样

从上面的过程可以看出,随着数据的进出栈操作,(SP)递增或递减,SP总是指向最新保存的数据的存储器的位置,也就是通常所说的,SP总是指向栈顶的位置。

wuzhengmin 发表于 2025-11-21 10:24:24

在Debug中,spx 就是堆栈指针寄存器。详细见下图:

wuzhengmin 发表于 2025-11-21 10:25:30

注意看下图:




就是说你最好使用地址在128-255这段存储空间。不过C语言会自动处理的

wuzhengmin 发表于 2025-11-21 10:29:43

下面看运算器ALU:

还可以说保含A寄存器(累加器)    B寄存器……………

wuzhengmin 发表于 2025-11-21 10:31:27

为了提高算力,我们会在ALU外面增加辅助计算单元来硬件加速,甚至增加一些片内外部设备。

wuzhengmin 发表于 2025-11-21 10:33:11

再看看累加器ACC:

实际上,累加器是寄存器,器件上是类似于
触发器和锁存器这样的机制或概念。
从51存储器映射来看。51可以让特殊功能寄存器和高128字节的片内数据区复用在同一地址空间上,但2者又是相互独立的。SFR显然是寄存器的概念,在片内218字节的SRAM区域,实际是存储器。这2块在逻辑上,地址空间上是共享的,实际物理是独立的2个空间。


当然,我直接说共享地址,会让人发蒙,其实是有指令配合来区分,SFR就只能直接寻址,ARM就间接寻址。这样就可以区分这128个字节到底是用存储器还是寄存器SFR!(我记得很清楚,1982年的时候,我是追到老师家,才问清楚的,其实当时也没理解,只是把它记在本子上啦)

wuzhengmin 发表于 2025-11-21 10:47:55

接着看B寄存器:
页: 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32 33
查看完整版本: 跟着何宾老师学习STC32位8051单片机原理及应用-STC32G12K128