所有外设都可以去DMA,而DMA可以去存储器(EDATA+XDATA)Memory ,CPU越来越被淡化。8051主频不能光用CPU来算,CISC一条指令可以完成RISC的几条指令。
其实跟何老师学单片机基本原理,是蛮枯燥的,我是真心想和1982年的Z80对比一下,看看我们的基本原理和架构
有多大变化,起码汇编是差距不太大,继续努力!
好了,今天我们第十集下就到此结束!
今天我们继续学习第十一集处理器内核和存储空间
汇编和系统原理确实很枯燥,学了的几集,我体会和我在1982年第一次学习Z80
的原理很相似,是块难啃的骨头,慢慢来........
先看看堆栈:
51在256个字节的基本数据区开了一块区域
用来保存现场(当前的各个寄存器数值,状态寄存器的值,下一条指令的地址等等),以便中断后回来继续执行当前的程序。这块区域也要保存个首地址,由堆栈指针寄存器SP堆栈(Stack)负责。这个SP保存的是开在片内数据区的存储器的地址。堆栈的具体地址要根据指令集架构的规约来选择合适的位置。
下面看看进堆栈和出堆栈的过程:
这个入栈和出栈,和1982年的Z80一模一样。
堆栈的入堆规约就是先地址+1,再把要入栈的数据压进去。
堆栈的出栈规约就是把数据弹出去,再地址-1,存入堆栈指针SP,实际是指向第二个数据。先进堆栈的后出去,后进堆栈的先出去,就像子弹的弹仓一样
从上面的过程可以看出,随着数据的进出栈操作,(SP)递增或递减,SP总是指向最新保存的数据的存储器的位置,也就是通常所说的,SP总是指向栈顶的位置。
在Debug中,spx 就是堆栈指针寄存器。详细见下图:
注意看下图:
就是说你最好使用地址在128-255这段存储空间。不过C语言会自动处理的
下面看运算器ALU:
还可以说保含A寄存器(累加器) B寄存器……………
为了提高算力,我们会在ALU外面增加辅助计算单元来硬件加速,甚至增加一些片内外部设备。
再看看累加器ACC:
实际上,累加器是寄存器,器件上是类似于
触发器和锁存器这样的机制或概念。
从51存储器映射来看。51可以让特殊功能寄存器和高128字节的片内数据区复用在同一地址空间上,但2者又是相互独立的。SFR显然是寄存器的概念,在片内218字节的SRAM区域,实际是存储器。这2块在逻辑上,地址空间上是共享的,实际物理是独立的2个空间。
当然,我直接说共享地址,会让人发蒙,其实是有指令配合来区分,SFR就只能直接寻址,ARM就间接寻址。这样就可以区分这128个字节到底是用存储器还是寄存器SFR!(我记得很清楚,1982年的时候,我是追到老师家,才问清楚的,其实当时也没理解,只是把它记在本子上啦)
接着看B寄存器: