2.1 MCS-51单片机内部结构
2.1.1 MCS-51单片机组成框图
目前有很多厂商生产51单片机,图2-1只是列出了几种比较常见的类型,从表面到内部资源不完全一样,但是它们的MCU结构确实是一致的,即都采用了8051核。
图2-1 目前比较常用的几种MCS-51单片机外形
一个基本的MCS-51单片机通常包括如下一些部件:中央处理器、ROM、RAM、I/O口、定时器、串口、中断控制器、振荡电路等。其简单的内部框图如图2-2所示。
并不是所有的8051单片机都具有图2-2所示的所有部件,当然也有比这个更多的,但是,图2-2所示的是个比较完整的、具有代表性的构成。其中I/O口、定时器、串口、中断控制器等是外部功能部件,就程序的执行来讲,单片机最离不开的部件应该是中央处理器、ROM、RAM、振荡电路这几个部分。
图2-2 MCS-51单片机基本组成框图
2.1.2 MCS-51单片机工作机制
笔者认为,在了解每个部分的功能之前,如果对单片机本身的工作机制有比较多的了解,那么对理解每个部分的功能和存在的必要性会有比较清楚的认识。
首先明确一点,单片机是一个受程序控制的控制器,并且在你眼里看起来可能是同时发生的事情,事实上总是有先后的,因为单片机永远是按照特定的顺序来执行操作的,在指令层上只会在完成某个步骤之后,才开始另外一个步骤,无法同时处理两个操作。
在不考虑是否存在这样的工作的可能性,并且工人会严格按照顺序执行命令的前提下,假如有如图2-3所示的这样一个工作,那么我们或许可以像下面这样来描述单片机的工作过程:工人上班了,开始一天的工作;打开第一个抽屉,拿到的纸条上说“去看第三个抽屉”,所以工人就去开第三个抽屉了,便不用看第二个抽屉了;拿到第三个抽屉的纸条上说“工作台1号位置有没有东西?如果没有就去看第五个吧”;于是看了一下,有东西的,所以不能直接去看第五个了,而是按照顺序去拿第四个抽屉里的纸条;第四个纸条上写着:“把1号位置上的东西扔掉吧!”,所以1号位置上的东西就被扔掉了;接着是到第五个抽屉,收到命令说:“没事了,你等着吧”,于是就可以看报纸等下班了。
图2-3 单片机工作机制模拟
虽然上述是个很简单、比较抽象的过程,但实际中单片机的工作机制确实很像刚才描述的过程,如果没有中断控制器的话,放在ROM里的程序就只会是一个不断循环的查询过程,由于程序执行速度很快,所以相对于人的反应时间来讲,很多操作感觉就像是实时的。再次强调一下,单片机一定是按照某种特定的顺序来执行指令的,除非程序本身改变了执行顺序或者受到了很强的干扰。例如在单片机内部,当上电复位之后,取指令总是从0000H地址开始的,而地址的增量取决于指令的长度,如果是单字节长度的指令总是顺序执行程序,那么地址总是每次都自动加1。
2.1.3 MCS-51单片机内部功能部件
在第一小节提到:单片机最离不开的部件是中央处理器、ROM、RAM、振荡电路等部件,在第二小节中又把这几个部分分别看成是抽屉、工作台、工人,虽然比喻不是非常的确切,但是很能够说明问题,下面对每个部件的功能进行说明。
1.只读存储器(ROM)
写出来的程序编译成最终的目标代码,通过烧写,被放在这里。代码是能够被识别的命令的序列(也可以有数据,一般是常量),用来指导CPU一步一步地去做事情。而写程序的你,就是领导了,就是那个往抽屉里放纸条的人,只不过纸条上写的东西,不是简单的一句“去看第三个抽屉”,而你现在在学的,就是怎么当领导。同时请注意“只读”的含义,对一个一般的程序执行过程来讲,程序是不可更改的,就是说,工人是不可以往抽屉里放纸条的。但在实际的系统中,有很多数据是变化的,因此单片机里还需要有一种存储器,就是RAM,也就是程序执行的时候可以使用的工作台。
2.随机存取存储器(RAM)
根据MCS-51单片机的结构特点,RAM里放的肯定是数据,之所以叫随机存取存储器,是因为在工作过程中,数据可以随时读取和修改,正因为这样,一般而言在C51语言中定义的变量实际总会被定位在这里。对很多内部处理来说,RAM的确很像工作台,用来暂时存放和处理一些数据。
3.中央处理器(CPU)
虽然每个部分都不可缺少,但是在单片机内部,最重要的是中央处理器,它负责指令的读取、译码和执行等内部控制以及算术逻辑运算,当然它的结构也很复杂,由于是采用了高级语言来设计程序,我们就不必了解它,在写程序的时候你往往是感觉不到它的存在的,当然如果用汇编语言写的话就不同了。
4.振荡电路
工人是需要吃饭的,但是单片机不是,推动单片机有条不紊地工作的动力在哪里呢?就是要说的振荡电路。振荡电路给出的时钟信号,使得由一大堆数字电路构成的单片机各个部件能够协同工作,并最终实现需要的功能。
有了前面说到的功能部件,程序已经可以执行了,但是如果仔细看看,其实这样的单片机是没有什么用的,首先数据从哪里来呀,捣鼓完之后的数据又有什么用呀,所以要构成实用的系统,还需要其他的部件。
5.输入/输出(I/O)口
输入/输出口是单片机最普通也是最常用的部件,它可以用来获取外部的数字量,输出内部的数字量。例如通过指令可以获取当前P0口所有口线的状态,也可以通过指令控制口线输出高低电平,从而驱动连接在相应口线上的执行、指示部件产生动作,例如控制继电器、发光二极管等。
6.定时/计数器
如果有个功能,需要它每隔100ms运行一次,并且对时间间隔要求比较高,这个时候如果仍然是用查询的方式,可能就达不到预期的效果。因为随着条件的变化,程序循环执行的周期有很大的不确定性,尤其是在程序量很大的情况下,这个时候用定时器配合中断方式来做,就比较合适了。定时器是个硬件计数器,简单地说就是有数脉冲个数的能力,当计数源是从外部输入的时候,它被称做计数器。
7.中断控制器
读书的时候,老师给我们举例来说明中断的概念,他说,下课铃声就是个中断,因为睡着了的学生都会醒过来。严格地说,不仅仅是中断,还是中断唤醒,一个现在流行的低功耗MCU差不多都具有的功能。中断是指停止一件正在做的事情,然后处理另外那件突发事件,做完之后再回来接着做原来的事情。中断控制器就是用来控制单片机处理类似这样的问题的,它具有中断控制,中断优先级处理等功能。