首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

51单片机总结

51单片机总结

本帖最后由 look_w 于 2017-9-23 15:48 编辑

51单片机学习是在3年前学的,有的地方可能忘记,总结不到。为了以后回忆,现大致总结下。
51概述
MCS-51使用哈佛结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。
51单片机的组成
8CPU、片内256RAM4KB flash ROM4个并行8I/O口、两个16位的定时计数器、5个中断源两个中断优先级的中断控制系统、一个全双功的UART
(只能用此单片机干这么多事情)


51单片机有以下几个内存模块

1ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。


程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改;

2RAM------内部RAM的低128位(00-7F),对应C语言就是data,比如我定义一个变量,

              dataunsigned char Var = 0;


那么,这个 Var变量就是放在内部的低128Ram

       -------内部RAM的高128位(80-FF),对应C语言就是idata,比如我定义一个变量,

              idataunsigned char Var = 0;


那么,这个 Var变量就是放在内部的高128Ram

       -------SFR)(80-FF),对应C语言就是Sfr比如我定义一个变量,

              Sfrunsigned char Var = 0x90;


那么,这个 Var变量就是放在内部的,这是你对Var操作,相当于操作一个特殊的,但是小心,不能随便定义Sfr变量,很危险

        ------外部RAM 64K0000-FFFF


外部的RAM可以扩展到65536个,但是前256个算是一页,这一页比较特殊,是用pdata来修饰的,当然,也可以用xdata来修饰。除了第一页的256个以外的其他65280个空间,只能用xdata来修饰;


回过头来讨论pdataxdata,这两个都能修饰外部Ram的第一页,但是,Pdata只能修饰第一页,即最前面的256个外部Ram,那么,这最前面的256个到底用Pdata还是Xdata好的呢?

答案是Pdata,因为Xdata修饰的变量,用的是DPTRPdata用的是R0R1.DPTR因为是16位的,所以可以覆盖整个的64K外部RamR0R18位,所以只能最前面的256个,也就是外部Ram的第一页,但是,用R0寻址,比DPTR快一倍,代码也小的很多。

MCS-51读写IDATA区的速度是最快的,而且访问方法也是最多的。访问XDATA区的速度相对就要慢很多。MCS-51的堆栈要优先开辟在IDATA区中,并且在IDATA区中开辟的堆栈,可以使用栈指针寄存器SP来控制。如果栈实在太大,只能开辟在XDATA区中,那么CPUSP寄存器就很难借力,只能由我们自己来构造堆栈结构和堆栈指针。
状态寄存器

处理器的状态保存在状态寄存器PSW 中,状态字中包括进位位、用于BCD 码处理的辅助进位位、奇偶标志位、溢出标志位、还有前面提到的用于寄存器组选择的RS0 和RS1。用于保存处理器当前的一些状态。

返回列表