1.2 认识单片机
单片机系统中的核心部分是单片机。
我们在学校、家庭中都使用PC,也称为电脑。电脑的基本组成是:CPU、内存、硬盘、主板、接口等,如果将这些部件浓缩到一块芯片上,就称之为单片机,当然单片机的运算位数和运算速度比不上PC,但其应用的场合是PC所做不到的,例如家用电器、机电一体化设计、工业控制现场、工业控制网络,等等。单片机的实物图如图1.5所示。
图1.5 单片机实物图
从图1.5中不难看出,从外形上来说,单片机与普通的集成电路没有什么不同,只是在内部结构上有区别。这就要从单片机的组成说起。
一个比较完整的单片机应该包括:中央处理器(CPU)、片内数据存储器(RAM)、片内程序存储器(ROM)、输入/输出接口(I/O口)、可编程串行口、定时/计数器、中断系统及特殊功能寄存器(SFR)。
随着电子技术的发展,芯片集成度不断提高,使得单片机的功能越来越强大。现在市面上流行的单片机内还增加了很多部件,如闪速存储器(Flash存储器)、模拟/数字转换器(A/D转换器)、数字/模拟转换器(D/A转换器)、I2 C总线接口、USB总线接口、CAN总线接口、“看门狗”电路(WDT),等等,使单片机的应用领域越来越宽,用包含这些部件的单片机组成的单片机系统的体积越来越小。
下面以AT89S51单片机为例,简单了解一下单片机的基本组成部件。
1.2.1 CPU
CPU是单片机的核心部分,它的作用是读入和分析每条指令,根据每条指令的功能要求,控制各个部件执行相应的操作。CPU的运算位数决定单片机的位数。AT89S51为8位单片机。
CPU中包含运算器和控制器。运算器主要用来实现数据的传送、数据的算术运算以及布尔(位)运算等。控制器主要用来统一指挥和控制计算机进行工作的部件。
1.2.2 片内寄存器
在MCS-51系列(Intel公司生产)单片机的片内有256B(随机存储器)RAM和4KB(只读存储器)ROM,而在AT89S51单片机内除了同样具有256B RAM外,还具有4KB的Flash存储器,这种存储器允许在线编程(这部分将在第7章中详细介绍)。
由于目前大部分的单片机系统都不再使用“三总线”结构,系统的程序全部都放在单片机的片内,所以片外的ROM几乎不再扩展,除非有十分特殊的要求。另外,在实验室或参加全国大学生电子设计竞赛时,常常需要快速编程,并下载到单片机中,以往的紫外线擦除方式和电擦除方式已经显得十分笨拙,取而代之的方法是在线编程方式。应用这种方法,单片机可以不必从电路板上取下,而是直接编写程序,十分方便、简单。
单片机(除一些特殊型号的单片机外)片内的RAM容量始终比较小,当我们进行运算的数据较少,并且RAM单元足够使用时,可以不进行扩展。但是,当单片机的运算量较大,RAM单元不够使用时,常常需要进行扩展。如图1.6所示为单片机片内RAM的结构示意图。图中灰色区域为用户RAM区。
图1.6 单片机片内RAM的结构示意图
1.2.3 输入/输出接口(I/O口)
AT89S51单片机与MCS-51系列单片机相同,都具有4个8位的并行输入/输出接口(I/O口),记作P0、P1、P2和P3,共占用单片机的32个引脚。
单片机的输入/输出接口具有多种功能,其中的一种功能是连接成“三总线”形式,如图1.7所示。由于现在的大部分系统不采用“三总线”结构,所以这里不再详细说明。
图1.7 单片机引脚“三总线”结构图
目前的单片机系统中,大部分是利用I/O口的输入/输出功能,在使用这些功能之前,必须先要了解这些I/O口的特性。
1. P0口
P0口是一个8位、漏极开路的双向I/O口。由其内部结构决定,当P0口作输出口时,必须外接上拉电阻,如图1.8所示。上拉电阻的大小需要根据负载的阻抗进行匹配,一般情况下为1~10kΩ。
图1.8 P0口在作输出口时的连接方法
当P0口作输入口时,必须先向P0口输出高电平,即“写1”操作,方能正确地读取该端口上的外部数据。
由于P0口为漏极开路输出,所以每个引脚可驱动8个LS型TTL负载。
2. P1口
P1口只能用做普通的I/O口,是一个8位的、可进行位寻址的I/O端口,在端口的内部具有一个20~40kΩ的上拉电阻,所以在使用P1口时,不需连接上拉电阻。
当P1口作输入口时,必须先向P1口执行“写1”操作,方能正确地读取该端口上的外部数据。由于P0口为漏极开路输出,所以每个引脚可驱动4个LS型TTL负载。
3. P2口
P2口既可以用做“三总线”结构中的“地址线的高8位”,又可用做普通的I/O口,在端口内部有一个20~40kΩ的上拉电阻,所以在使用P2口时,无须连接上拉电阻。
当P2口作输入口时,必须先向P2口执行“写1”操作,方能正确地读取该端口上的外部数据。由于P2口为漏极开路输出,所以每个引脚可驱动4个LS型TTL负载。
4. P3口
P3口是一个多功能端口,除了具有准双向I/O端口的功能外,还具有第二功能,如表1.1所示。
表1.1 P3口第二功能表
在P3口的端口内部有一个20~40kΩ的上拉电阻,所以在使用P3口时,不需要连接上拉电阻。
当P3口作普通I/O口的输入口时,必须先向P3口执行“写1”操作,方能正确地读取该端口上的外部数据。由于P3口为漏极开路输出,所以每个引脚可驱动4个LS型TTL负载。
1.2.4 特殊功能寄存器(SFR)
如图1.6所示,SFR位于单片机片内RAM的高128个字节当中,反映了单片机的状态,实际上就是单片机的状态字和控制字寄存器,分为两大类:一类与单片机芯片的引脚有关,另一类作内部控制用。在图1.6中我们看到,在128个字节当中,只使用了21个字节用于存放不同的寄存器,其余的部分主要是留给生产厂商进行不同的开发时使用。
这21个特殊功能寄存器是最基本的寄存器,凡是与MCS-51系列单片机兼容的型号(AT89C1051、AT89C2051和AT89C4051使用的数量少于21个)都具有这21个寄存器,只是不同的单片机型号,对应增加功能的同时,也会增加特殊功能寄存器的数量,如AT89S51增加了片内“看门狗”电路(WDT),所以增加了一个WDTRST(WDT复位寄存器);增加了2个辅助寄存器AUXR和AUXR1;增加了一个数据指针寄存器DPTR1等。这些新增的寄存器全部被安放在片内RAM的高128B中。
这些特殊功能寄存器在使用时有一个特点:凡是寄存器所在的单元地址尾数为“0”和“8”的,都可以进行位寻址,如ACC、B、PSW等。
在SFR中有两个寄存器与片内RAM低128B有关:一个是PSW,状态字寄存器,一个是SP,堆栈指针寄存器。PSW中的D4和D3决定了用户当前所能使用的工作寄存器组(第0组~第3组)。SP用于标定堆栈的栈底,SP的值设为多少,堆栈的栈底就是多少。所谓堆栈是指用于保护现场值和断点地址值的区域。在单片机内堆栈属于向上生长型,即有数据压栈时,堆栈指针SP加一,当在单片机上电复位时(不包括手动复位),SP的默认值为07H,即栈底为07H,这个地址刚好占用了第1组工作寄存器,随着堆栈的不断向上生长,将逐一的占用第2组工作寄存器、第3组工作寄存器和位寻址区,在图1.6中能够清晰地看到。所以,在使用堆栈前,通常都要对SP重新赋值,一般的设定在30H以上,这样才不会影响正常使用工作寄存器组和位寻址区,同时可以提高堆栈的安全性。
其余的特殊功能寄存器,这里就不再赘述了。
1.2.5 定时/计数器
AT89S51单片机内有两个16位的定时/计数器T0和T1,都具有两种功能:定时功能和计数功能。
这两种功能最基本的实现方法都是“计数”。
所谓定时功能,是对固定时间间隔的计数,这个过程好比我们平时的“数秒”,由于秒的间隔是固定的,每经过1秒,将计数值加一,所以“数秒”最后可以反映出时间的概念。在单片机内最稳定的就是振荡器脉冲的时间间隔,振荡器脉冲经过12分频后,由计数器进行计数,计数值就是时间。
所谓计数功能,是对任意时间间隔的计数,由于这个时间间隔不固定,所以用于对单片机片外的脉冲信号进行计数,这个脉冲信号通过P3.4(T0)和P3.5(T1)引脚引入到单片机的片内。需要注意的是外部脉冲信号的频率不能低于晶振振荡频率经过12分频后的频率值,否则将无法完成准确的计数。
如图1.9所示为定时功能和计数功能的示意图。
图1.9 定时功能和计数功能示意图
定时/计数器T1在定时功能中还有一个用途:就是为串行通信作波特率发生器。当T1用做波特率发生器时,只需要设定好初值并将T1启动即可,这常常要关闭T1的中断请求,防止误操作。有关定时/计数器的设置请查阅其他有关单片机的书籍。
1.2.6 串行通信接口
在单片机内,目前所使用的串行通信接口的种类较多,如UART、I2 C、SPI、USB等。不同型号的单片机内使用的串行通信接口不同,如AT89系列单片机内使用的是UART,C8051F系列单片机内有的具有UART和SPI,有的具有UART和USB,等等,所以我们可以根据自己的需要选择相应的单片机,在有些场合如果单片机没有需要的串行通信接口,可以通过单片机的I/O口进行模拟,这部分将在第5章中详细介绍。
在MSC-51和AT89系列单片机中使用的是全双工UART(异步串行通信接口),I/O端口位P3.0和P3.1也是一个很通用的通信接口。在单片机内这个接口被定义成了两种工作状态:同步串行通信状态和异步串行通信状态。
同步串行通信虽然传输速率较高,但由于其硬件电路复杂,并且无论是在发射状态还是在接收状态都要同时使用两条信号线,这就致使在单片机上进行同步通信只能使用单工方式或半双工方式,很不方便。单片机上的串行口在同步方式下除了可以用于通信外,还可以用于I/O口的扩展,当与74LS164联合使用时,可以扩展成并行输出口;当与74LS165联合使用时,可以扩展成并行输入口,等等。
异步串行通信技术比较简单,虽传输速率不高(这里指的是单片机的串行口),但应用却很广泛,并且方便与其他的通信标准进行衔接。这在第5章中也会详细介绍。
1.2.7 中断系统
中断技术是计算机中一个很重要的技术,它既与硬件电路有关,也与软件有关。正是因为有了中断功能,才能够很好地解决快速CPU与慢速外设之间的矛盾;才能够随时响应外部设备提出的请求;才能够及时处理计算机在运行过程中出现的故障,保障计算机的安全。
在单片机中,中断系统并不是独立存在的,而是与其他部分相关联。中断系统被分成三大类:外部中断、定时中断和串行中断。外部中断有两个中断源(也可以称之为中断向量),占用I/O端口中的P3.2和P3.3;定时中断有两个中断源,当定时/计数器计满溢出时便会产生中断;串行中断只有一个中断源,但无论是发送中断还是接收中断,都只使用同一个中断源(主要是由于发送SBUF与接收SBUF为同一个寄存器),当产生中断后需要进行判别。
中断系统在使用时有一些问题需要注意:
①中断优先级的设置;
②中断允许位的设置;
③中断发生后,现场的保护、中断的屏蔽;
④中断返回前,现场的恢复、中断的重新允许等。