1.2 认识单片机

随着微电子技术的不断发展,计算机技术也得到迅速发展,并且由于芯片集成度的提高而使计算机日益微型化,出现了单片微型计算机(Single Chip Computer),简称单片机,它是微型计算机发展历程中的一个重要分支。

1.2.1 单片机概述

单片机又称为微控制器(MCU),它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上,即一块芯片就构成了一台计算机。单片机集成了中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、中断系统、定时器/计数器,以及输入/输出接口电路等主要部件。

1. 单片机的发展

单片机自问世以来,性能不断提高和完善,能满足很多应用场合的需要。特别是当前用CMOS工艺制成的各种单片机,由于功耗低,适用的温度范围大、抗干扰能力强,能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促进了单片机技术的发展。单片机的发展主要经历了4个阶段。

第一阶段(1974—1976年)为单片机初级阶段。由于受工艺及集成度的限制,单片机采用双片形式,且功能比较简单。如美国Fairchild公司1974年推出的单片机F8,它包含8位CPU,64B。F8还需要外接一片3851(内含1KB ROM、1个定时/计数器和2个I/O口)电路才能构成一个完整的微型计算机。

第二阶段(1976—1978年)为低性能单片机阶段。单片机采用单芯片形式,是“小而全”的微型机系统。如美国Intel公司1976年推出的MCS-48系列单片机,8位CPU,并行I/O口,8位定时器/计数器,无串行口,中断处理比较简单,RAM、ROM容量较小,寻址范围不超过4KB。这个阶段把单片机推向市场,促进了单片机的变革,各种8位单片机纷纷应运而生。

第三阶段(1978—1982年)为高性能单片机阶段,也是单片机普及阶段。此时的单片机与前两个阶段相比,不仅存储容量大、寻址范围广,而且中断源、并行I/O口、定时器/计数器的个数都有了不同程度的增加,同时还增加了串行口。如美国Intel公司在MCS-48基础上推出的高性能MCS-51系列单片机。

第四阶段(1982年以后)为16位单片机阶段。此时的单片机包含16位CPU,片内RAM、ROM容量进一步增大,增加了AD/DA转换器和8级中断处理功能,实时处理能力更强,允许用户采用面向工业控制的专用语言,如C语言等。如美国Intel公司的MCS-96系列单片机和NC公司的HPC16040系列机等。

总之,单片机发展趋势可归结为以下几个方面。

(1)增加字长,提高数据精度和处理速度。

(2)改进制作工艺,提高单片机的整体性能。

(3)由复杂指令集计算机(CISC)转向简单指令集计算机(RISC)技术。

(4)多功能模块集成技术,使一块“嵌入式”芯片具有多种功能。

(5)微处理器与DSP技术相结合。

(6)融入高级语言的编译程序。

(7)低电压、宽电压、低功耗。

目前,国际市场上8位、16位单片机系列已有很多,32位单片机也已经进入了实用阶段。随着单片机技术的不断发展,新型单片机还将不断涌现,单片机技术也将以惊人的速度向前发展。

2. 单片机的特点

单片机作为微型计算机的一个分支,与一般的微型计算机并没有本质上的区别,同样具有快速、精确、记忆功能和逻辑判断能力等特点。但单片机是集成在一块芯片上的微型计算机,与一般的微型计算机相比,在硬件结构和指令设置上均有独到之处,主要特点如下所述。

(1)体积小、重量轻,价格低、功能强,电源单一、功耗低,可靠性高、抗干扰能力强。这是单片机得以迅速普及和发展的主要原因。同时由于单片机功耗低,后期投入成本也大大降低。

(2)使用方便灵活、通用性强。由于单片机本身就构成一个最小系统,只要根据不同的控制对象做相应的改变即可,因而它具有很强的通用性。

(3)目前大多数单片机采用哈佛(Harvard)结构体系,即单片机的数据存储器空间和程序存储器空间相互独立。单片机主要面向测控对象,通常有大量的控制程序和较少的随机数据,将程序和数据分开,使用较大容量的程序存储器来固化程序代码,使用较小容量的数据存储器来存取随机数据。程序在只读存储器(ROM)中运行,不易受外界侵害,可靠性高。

(4)突出控制功能的指令系统。单片机的指令系统中有大量的单字节指令,可以提高指令运行速度和操作效率;有丰富的位操作指令,满足对开关量控制的要求;有丰富的转移指令,包括有无条件转移指令和条件转移指令。

(5)较低的处理速度和较小的存储容量。因为单片机是一种小而全的微型机系统,它是以牺牲运算速度和存储容量来换取体积小、功耗低等特色的。

3. 单片机的应用

由于单片机在一块芯片上集成了一台微型计算机所需的CPU、存储器、输入/输出部件和时钟电路等,因此具有体积小,使用灵活、成本低、易于产品化、抗干扰能力强,可在各种恶劣环境下可靠工作等特点。特别是单片机应用面广,控制能力强,使其在工业控制、智能仪表、外设控制、家用电器、机器人、军事装置等方面得到了广泛的应用。单片机主要应用在以下几个方面。

(1)家用电器。单片机广泛应用在家用电器的自动控制中,如洗衣机、空调、电冰箱、电视机、音响设备等。单片机的使用提高了家用电器的性能和质量,降低了家用电器的生产成本和销售价格。

(2)智能卡。尽管目前使用的主要是磁卡和IC卡,但是,带有CPU和存储器的智能卡,也将日益广泛用于金融、通信、信息、医疗保健、社会保险、教育、旅游、娱乐和交通等各个领域。

(3)智能仪器仪表。单片机体积小、耗电少,被广泛应用于各类仪器仪表中,如智能电度表、智能流量计、气体分析仪、智能电压电流测试仪和智能医疗仪器等。单片机使仪器仪表走向了智能化和微型化,使仪器仪表的功能和可靠性大大提高。

(4)网络与通信。许多型号的单片机都有通信接口,可方便地进行机间通信,也可方便地组成网络系统,如单片机控制的无线遥控系统、列车无线通信系统和串行自动呼叫应答系统等。

(5)工业控制。单片机可以构成各种工业测控系统和数据采集系统,如数控机床、汽车安全技术检测系统、报警系统和生产过程自动控制等。

4. 51系列单片机的分类

单片机可分为通用型单片机和专用型单片机两大类。通用型单片机是把可开发资源全部提供给使用者的微控制器。专用型单片机则是为过程控制、参数检测、信号处理等方面的特殊需要而设计的单片机。我们通常所说的单片机即指通用型单片机。

51系列单片机源于Intel公司的MCS-51系列。在Intel公司将MCS-51系列单片机实行技术开放政策之后,许多公司都以MCS-51中的基础结构8051为基核推出了许多各具特色、具有优异性能的单片机,如STC、Philips、Dallas、Siemens、Atmel等。这些以8051为基核的各种型号的兼容型单片机统称为51系列单片机。Intel公司MCS-51系列单片机中的8051是其中最基础的单片机型号。

尽管各类单片机很多,但目前在我国使用最为广泛的单片机系列仍是Intel公司生产的MCS-51系列单片机,同时该系列还在不断完善和发展。随着各种新型号系列产品的推出,单片机越来越被广大用户所接受。

(1)按片内不同程序存储器的配置来分

①片内有MaskROM(掩膜ROM)型:8051、80C51、8052、AT89C52。此类芯片是由半导体厂家在芯片生产过程中,将用户的应用程序代码通过掩膜工艺制作到ROM中。其应用程序只能委托半导体厂家“写入”,一旦写入后不能修改。此类单片机适合大批量使用。

②片内有EPROM型:8751、87C51、8752。此类芯片带有透明窗口,可通过紫外线擦除存储器中的程序代码,应用程序可通过专门的编程器写入到单片机中,需要更改时可擦除后重新写入。此类单片机价格较贵,不适宜大批量使用。

③片内无ROM(ROMLess)型:8031、80C31、8032。此类芯片的片内没有程序存储器,使用时必须在外部并行扩展程序存储器存储芯片,造成系统电路复杂,目前较少使用。

(2)按片内不同容量的存储器配置来分

①51子系列型:芯片型号的最末位数字以1作为标志,51子系列是基本型产品。片内带有4KB ROM/EPROM/FPEROM(8031、80C31除外)、128B RAM、2个16位定时器/计数器、5个中断源等。

②52子系列型:芯片型号的最末位数字以2作为标志,52子系列是增强型产品。片内带有8KB ROM/EPROM/FPEROM(8032、80C32除外)、256B RAM、3个16位定时器/计数器、6个中断源等。

(3)按芯片的半导体制造工艺来分

①HMOS工艺型:8051、8751、8052、8032。HMOS工艺,即高密度短沟道MOS工艺。

②CHMOS工艺型:80C51、83C51、87C51、80C31、89C51、80C32、AT89C52、89C52。此类芯片型号中都以字母“C”来标识。

采用这两类工艺的器件在功能上是完全兼容的,但CHMOS器件具有低功耗的特点,它消耗的电流要比HMOS器件小得多。CHMOS器件比HMOS器件多了两种节电的工作方式(掉电方式和待机方式),常用于构成低功耗的应用系统。

此外,与其他芯片一样,按单片机所能适应的环境温度范围,可划分为3个等级:民用级(0℃~70℃)、工业级(-40℃~+85℃)和军用级(-65℃~+125℃)。因此,在使用时应注意根据现场温度选择不同的芯片。

5. STC89系列单片机

在MCS-51系列单片机8051的基础上,STC公司开发了STC89系列单片机,自问世以来,以其低廉的价格和独特的程序存储器——快闪存储器(Flash Memory)为用户所青睐。表1-1列出了STC89系列单片机的几种主要型号。

表1-1 STC89系列单片机一览表

采用快闪存储器的STC89系列单片机,不但具有MCS-51系列单片机的基本特性(如指令系统兼容、芯片引脚分布相同等),而且还具有以下独特的优点。

(1)片内程序存储器为电擦写型ROM(可重复编程的快闪存储器)。整体擦除时间仅为10ms左右,可写入/擦除1000次以上,数据可保存10年以上。

(2)两种可选编程模式,既可以用12V电压编程,也可以用VCC电压编程。

(3)宽工作电压范围,VCC=2.7V~6V。

(4)全静态工作,工作频率范围:0Hz~24MHz,频率范围宽,便于系统功耗控制。

(5)3层可编程的程序存储器上锁加密,使程序和系统更加难以仿制。

总之,STC89系列单片机与MCS-51系列单片机相比,前者和后者之间有兼容性,但前者的性价比等指标更为优越。本书主要围绕STC89C52单片机进行介绍。

1.2.2 STC89C52系列单片机的基本结构

STC89C52系列单片机是宏晶公司推出的新一代高速、低功耗、超强抗干扰、超低价的单片机。其指令代码完全兼容传统的8051单片机,12个时钟/机器周期和6个时钟/机器周期可以任意选择。STC89C52是一款功能强大的微控制器,具有较高的性价比,可为许多嵌入式控制应用系统提供高性价比的解决方案。

此外,STC89C52可降至0Hz静态逻辑操作,支持软件选择空闲模式和掉电模式两种节电模式。在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作;在掉电模式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。STC89C52单片机主要包含以下部件。

(1)一个8位CPU。

(2)一个片内振荡器及时钟电路。

(3)8KB可重复擦写的Flash(闪速)存储器。

(4)程序加密后传输。

(5)512B内部RAM。

(6)3个16位定时器/计数器。

(7)最多39条可编程的I/O线。

(8)一个可编程全双工串行口。

(9)最多具有8个中断源、4个优先级嵌套中断结构(兼容传统51单片机的5个中断源、2个优先级嵌套中断结构)。

STC89C52系列单片机的基本结构框图,如图1-19所示。

图1-19 STC系列单片机基本结构框图

1.2.3 STC89C52单片机引脚功能

1. STC89C52单片机封装

STC89C52单片机有90C版本封装和HD版本封装,如图1-20所示。

图1-20 STC89C52的引脚和封装

注意

STC89C52单片机的90C版本和HD版本的主要区别如下。

(1)90C版本没有EA和PSEN引脚,有P4.4、P4.5和P4.6引脚。

(2)HD版本有EA和PSEN引脚,没有P4.4、P4.5和P4.6引脚。

其中,90C版本的ALE/P4.5引脚,默认作为ALE引脚。若需要作为P4.5引脚使用,需在烧录用户程序时,在STC-ISP编程器中设置。

2. STC89C52单片机引脚功能

在这里,以STC89C52单片机的40引脚塑料双列直插式封装(PDIP)为例,介绍STC89C52单片机的引脚功能,如图1-20(a)和(c)所示。

(1)电源引脚

①GND(20):接地端。

②VCC(40):正常操作时为3.8V~5.5 V电源。

通常在VCC和GND引脚之间接0.1μF高频滤波电容。

(2)外接晶振引脚

①XTAL1(19):内部时钟电路反相放大器的输入端,是接外部晶振的一个引脚。当直接使用外部时钟源时,此引脚是外部时钟源的输入端。采用外部振荡器时,此引脚接地。

②XTAL2(18):内部时钟电路反相放大器的输出端,接外部晶振的另一端。当直接使用外部时钟源时,此引脚可浮空。

(3)控制或与其他电源复用引脚

①RST(9):复位引脚,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位。

②ALE/P4.5(30):ALE是地址锁存允许信号输出引脚/编程脉冲输入引脚,P4.5是标准的I/O口。

③P4.4/50421-00-027-1(29):50421-00-027-2是外部程序存储器选通信号输出引脚,低电平有效;P4.4是标准的I/O口。在从外部程序存储器取指令(或数据)期间,50421-00-027-3在每个机器周期内两次有效。在访问外部数据存储器时,50421-00-027-4无效。

④P4.6/50421-00-027-5(31):50421-00-027-6是内部程序存储器和外部程序存储器选择引脚,P4.6是标准的I/O口。当50421-00-027-7为高电平时,访问内部程序存储器,当超过内部程序存储器的地址范围后,自动转向外部程序存储器;当50421-00-027-8为低电平时,则访问外部程序存储器。

(4)输入/输出引脚

STC89C52系列单片机的P1、P2、P3和P4口,上电复位后为准双向口/弱上拉(传统8051的I/O口模式),P0口上电复位后是开漏输出。P0口作为总线用时,不用外接上拉电阻;作为I/O口用时,需加4.7kΩ~10 kΩ上拉电阻。

STC89C52的5V单片机的P0口灌电流最大为12mA,其他I/O口的灌电流最大为6mA。

①P0.0~P0.7(32~39):P0口是一个8位漏极开路型双向I/O口,当用作输入时,每个端口要先置1。在访问外部存储器时,它分时传送低8位地址(A0~A7)和数据总线(D0~D7)。

②P1.0~P1.7(1~8):P1口是一个带有内部上拉电阻的8位准双向I/O口,当用作输入时,每个端口要先置1。P1.0和P1.1引脚也可用作定时器2的外部计数输入(P1.0/T2)和触发器输入(P1.1/T2EX)。

③P2.0~P2.7(21~28):P2口是一个带有内部上拉电阻的8位准双向I/O口,当用作输入时,每个端口要先置1。在访问外部存储器时,它输出高8位地址(A8~A15)。

④P3.0~P3.7(10~17):P3口是一个带有内部上拉电阻的8位准双向I/O口,当用作输入时,每个端口要先置1。P3口还具有第二功能,参见项目二中的表2-1。

⑤P4:P4口是一个带有内部上拉电阻的准双向I/O口,最多有7个引脚,同P1、P2和P3口。

1.2.4 单片机最小系统

单片机最小系统就是指由单片机和一些基本的外围电路所组成的一个可以工作的单片机系统。

单片机最小系统能满足工作的最低要求,但不能对外完成控制任务,实现人机对话。要进行人机对话还要有一些输入、输出部件,作控制时还要有执行部件。常见的输入部件有开关、按钮、键盘、鼠标等,输出部件有指示灯LED、数码管、显示器等,执行部件有继电器、电磁阀等。

一般来说,单片机最小系统主要包括单片机、晶振电路、复位电路和电源4个部分。

1. 晶振电路

单片机内有一个由高增益反相放大器构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入和输出端。其振荡电路有两种组成方式:片内振荡器和片外振荡器。片内振荡器如图1-21(a)所示。

图1-21 单片机振荡器电路

在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2取30pF,晶振的频率取值为1.2MHz~12MHz。

片外振荡器如图1-21(b)所示。XTAL1是外部时钟信号的输入端,XTAL2可悬空。由于外部时钟信号经过片内一个二分频的触发器进入时钟电路,因此对外部时钟信号的占空比没有严格要求,但高、低电平的时间宽度应不小于20ns。

2. 时序的概念

单片机内的各种操作,都是在一系列脉冲控制下进行的,而各脉冲在时间上是有先后顺序的,这种顺序就称为时序。单片机内部已集成了振荡器电路,只需要外接一个石英晶体振荡器和两个微调电容就可工作。

(1)振荡周期是指晶体振荡器直接产生的振荡信号的周期,是振荡频率(又称晶振频率)fosc的倒数,用Tosc表示。

振荡周期Tosc=1/fosc,如:振荡频率为6MHz时,Tosc=1/6μs,振荡频率为12MHz时,Tosc=1/12μs。

(2)状态周期,又称时钟周期,用S表示。每个状态周期是振荡周期的两倍,即每个状态周期分为P1和P2两个节拍,P1节拍完成算术逻辑操作,P2节拍完成内部寄存器间数据的传递。

(3)机器周期是机器的基本操作周期。一个机器周期含6个状态周期,分别用S1~S6表示。

(4)指令周期是指执行一条指令所占用的全部时间。一个指令周期通常由1~4个机器周期组成。在单片机系统中,有单周期指令、双周期指令和四周期指令。

综上所述,1个机器周期=6个状态周期=12个振荡周期。各周期的相互关系如图1-22所示。

图1-22 各周期的相互关系

例如:fosc=12MHz,则:振荡周期Tosc=1/fosc=1/12μs,状态周期=1/6μs,机器周期=1μs,指令周期=1μs~4μs。

3. 复位电路

单片机的复位电路如图1-22所示。在RST输入端出现高电平时,就能实现复位和初始化。

在振荡运行的情况下,要实现复位操作,必须使RST引脚至少保持两个机器周期(24个振荡周期)的高电平。CPU在第二个机器周期内执行内部复位操作,以后每一个机器周期重复一次,直至RST端电平变低。复位期间不产生ALE及50421-00-029-2信号。

图1-23(a)为上电自动复位电路。加电瞬间,RST端的电位与VCC相同,随着RC电路充电电流的减小,RST的电位下降,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。复位电路中的RC参数通常由实验值调整,当振荡频率选用6MHz时,电容选22μF,电阻选1kΩ,便能可靠地实现加电自动复位。

图1-23(b)是手动复位电路,包括上电自动复位电路。

图1-23 复位电路

【技能训练1-1】单片机控制LED闪烁

任务1是使用C语言程序控制P1.0引脚输出低电平来点亮LED。那么如何通过C语言程序控制LED闪烁呢?

1. LED闪烁功能实现分析

如图1-1所示,LED的阳极通过220Ω限流电阻连接到5V电源上,P1.0引脚接LED的阴极。当P1.0引脚输出低电平时,LED点亮;当输出高电平时,LED熄灭。

LED闪烁功能的实现过程如下所示。

(1)P1.0引脚输出低电平,LED点亮。

(2)延时,使得LED保持点亮一段时间。

(3)P1.0引脚输出高电平,LED熄灭。

(4)延时,使得LED保持熄灭一段时间。

(5)重复第一步(循环),这样就可以实现LED闪烁。

2. LED闪烁控制程序设计

从以上分析可以得出,LED闪烁控制的C语言程序如下:

#include <reg52.h>          //包含reg52.h头文件 
sbit LED=P1^0;              //定义LED是P1.0 位对应的引用符号 
void  Delay()               //延时函数 
{ 
  unsigned char i, j; 
      for (i=0;i<255;i++) 
         for (j=0;j<255;j++); 
} 
void main() 
{  
   while(1) 
    { 
       LED = 0;             //P1.0=0,LED 点亮 
       Delay();             //延时 
       LED = 1;             //P1.0=1,LED 熄灭 
       Delay(); 
    } 
 }
 

程序说明如下。

(1)由于单片机执行指令的速度很快,如果不设置延时,点亮之后将马上就熄灭,熄灭之后马上就点亮,速度太快,由于人眼存在视觉暂留效应,根本无法分辨,所以在控制LED闪烁的时候需要延时一段时间,否则就看不到“LED闪烁”的效果了。

(2)延时函数是定义在前,使用在后。这里使用了两条for语句构成双重循环(外循环和内循环),循环体是空的,用来实现延时的目的。如果想改变延时时间,可以改变循环次数。

如果延时函数是使用在前,定义在后,程序该如何编写呢?

(3)“unsigned char i, j;”语句是定义i和j两个变量为无符号字符型,取值范围0~255。

3. LED闪烁控制调试及生成HEX文件

LED闪烁程序设计好以后,还需要进行调试,看看是否与设计相符。首先要生成“LED闪烁.hex”文件,在以后的任务中不再详细叙述具体过程。

(1)建立工程项目文件,选择单片机。将工程文件命名为“LED闪烁”,选择单片机型号为STC的STC89C52RC。

(2)建立源文件,加载源文件。将源文件命名为“LED闪烁.c”。

(3)设置工程的配置参数。在“目标”选项卡将晶振频率设为12MHz,在“输出”选项卡将“生成HEX文件”复选框选中。

(4)进行编译和连接。

(5)进入调试模式,打开P1口对话框。单击快捷工具栏的调试按钮50421-00-031-1,进入调试模式。然后单击菜单栏“Peripherals”→“I/O-Ports”→“Port 1”,打开P1口对话框;

(6)程序运行与调试。在调试模式中,单击调试工具栏的运行按钮50421-00-031-2,通过P1口对话框观察P1.0引脚的电平变化状态,以间接分析LED闪烁规律是否与设计相符。程序运行与调试窗口如图1-24所示。

图1-24 程序运行与调试窗口

4. LED闪烁控制Proteus仿真运行调试

用Proteus仿真运行调试LED闪烁控制与任务1基本一样。以后不再详细叙述具体的仿真运行调试过程。

(1)运行Proteus软件,打开LED闪烁Proteus仿真电路。

(2)加载Keil生成的“LED闪烁.hex”文件。

(3)单击仿真工具栏的“运行”按钮50421-00-031-4,单片机全速运行程序。

通过编辑区的LED闪烁电路图观察LED闪烁规律是否与设计要求相符。同时还可以通过P1.0引脚的电平变化状态来间接分析LED闪烁规律。LED闪烁Proteus仿真运行如图1-25所示。

图1-25 LED闪烁Proteus仿真运行