第2章 智能仪器中的微机系统
在第1章中已提到,智能仪器的主要特征就是仪器与微机系统的结合。这种结合主要采取的方式有两大类:一类是利用PC加上专用的外围测控设备;另一类则是采用嵌入式的单片机构成专用的智能仪器。这里主要讨论第二类嵌入到智能仪器中的微机系统即单片机。
单片机的种类至少有上千种,8位、16位和32位的单片机是目前的主流机型。实际上单片机有过一个别名,叫CSIC(用户定义的集成电路),当某种需求有了一定的数量,用户就可以要求单片机供应商针对这种需求设计一款单片机。因此单片机可实现的功能和单片机的种类也就越来越多。世界上有很多著名的单片机公司,每个公司都有几个、几十个单片机系列,每个单片机系列有几个、几十个不同的单片机品种。智能仪器中所选用的单片机往往对仪器的智能程度起到决定性的作用。
由于单片机的类型及各公司开发的单片机所使用的机器码指令都不相同,在学习和使用单片机时要掌握单片机的主要性能、引脚定义、接口要求和编程方法,以便在智能仪器中应用它。
2.1 MCS-51系列单片机
国际市场上众多类型的单片机中8位单片机因其成本低、易开发、功能相对强大,可以符合一般智能仪器的控制要求而受到欢迎。到目前为止,Intel公司的MCS-51系列在我国仍是应用最为广泛的单片机系列,且MCS-51系列单片机自身近年来也有了很大的发展,如Intel公司推出的CMOS增强型单片机8XC51FA/FB、8XC452等的集成度更高,在片内集成了更多的功能部件,如A/D、PWM等以及高速的I/O口等。其他如飞利浦公司、西门子公司等也都推出了以80C51为核心,与80C51兼容的8位单片机。因此,这里从智能测量控制仪器的角度来讨论MCS-51系列单片机的结构原理、指令系统等基本知识,并简单介绍MCS-51系列单片机的开发过程,为后面智能仪器的分析和设计打下基础。
2.1.1 MCS-51系列单片机的结构与特点
MCS-51系列单片机的基本型包括8031、8051、8751、8951等不同的芯片,它们的不同点只在于内部存储器构造不同,而其余组成部分全部相同。
(1)片内带掩模ROM型(8051):在器件内部集成有一定容量的只读存储器(掩模ROM),适合于定型大批量应用产品的生产。
(2)片内带EPROM型(8751):片内含有一定容量可供用户一次编程的EPROM存储器,适合小批量自制产品。
(3)片内带E2PROM型(8951):片内含有一定容量可供用户多次擦写编程的E2PROM存储器,适合于研制产品样机和学习开发。
(4)外接EPROM型(8031):片内无ROM,必须外接程序存储器,适用于研制新产品及学习开发。
(5)近年来,内部自带Flash程序存储空间的MCS-51系列单片机产品应用越来越广,因为其开发容易,功能也越来越多,可以根据需要选用。
8051单片机的基本构成如图2.1所示。除CPU外,在片内集成了以下部件。
图2.1 8051单片机的基本构成
1.片内数据存储器RAM
MCS-51的内部数据存储器共有256个(字节)单元,地址为00H~FFH。其中地址为00H~7FH的前128个单元用于存放可读写的数据;而地址为80H~FFH的后128个单元被专用寄存器占用,不能供用户使用。
2.片内程序存储器ROM
8051内部共有4KB的掩模ROM,用于存放程序、原始数据或表格。
8751内部共有4KB的EPROM,用户可以将程序固化在EPROM之中。
8951内部共有4KB的E2PROM,E2PROM是可以多次写入、擦除的芯片,用户可以通过开发机把程序固化在E2PROM之中。
8958单片机内部有高达32KB的Flash程序存储空间。
8031内部没有ROM,但外接一片EPROM就相当于8051。
3.定时器/计数器
8051内部共有两个16位的定时器/计数器T0、T1,每个定时器/计数器都可以设置成定时或计数方式,并以其定时或计数结果实现对计算机的控制。
4.并行I/O口
MCS-51共有四个8位并行I/O口(P0、P1、P2、P3),用来实现数据的并行输入或输出,且每个口可以用做输入,也可以用做输出。
5.串行口
一个全双工URAT(通用异步接收发送器)串行I/O口,可以实现单片机和其他设备之间的串行通信。
6.中断控制系统
MCS-51单片机的中断功能较强,8051共有5个中断源,每个中断分为高级和低级两个优先级。
● 片外中断2个。
● 片内定时器/计数器中断2个。
● 片内串行中断1个。
7.片内振荡器和时钟产生电路
8051内部有为单片机产生时钟脉冲序列的时钟电路,但其石英晶体和微调电容需外接。基本的单片机系统允许的最高晶体振荡频率为12MHz,8951单片机的最高振荡频率可达33MHz。
8051单片机的功能方框图如图2.2所示,单片机内部最核心的部分是CPU,它是单片机的心脏。CPU的主要功能是产生各种控制信号,控制存储器、输入/输出端口的数据传送、数据的算术运算以及位操作处理等。
图2.2 8051单片机的功能方框图
2.1.2 MCS-51系列单片机的引脚及功能
在单片机开发中,硬件的构成决定了整个单片机系统的存储器及外部输入/输出设备的地址,是软件编程的基础,而硬件电路构成时必须了解单片机的引脚定义及功能。MCS-51系列单片机中各种芯片的引脚是相互兼容的,共有40条引脚,采用的是标准的双列直插式集成电路芯片。如图2.3所示,其中图2.3(a)为其引脚图,图2.3(b)为其逻辑符号图。
图2.3 MCS-51系列单片机的引脚及逻辑符号图
在40条引脚中,2条用于电源引脚,2条用于外接晶体引脚,4条用于控制引脚,32条为I/O引脚。各信号引脚及功能说明如下。
1.电源引脚Vcc和Vss(2条)
Vcc:接工作电源端+5V。
Vss:接地端。
2.时钟电路引脚XTAL1和XTAL2(2条)
XTAL1、XTAL2外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容。
当使用芯片外部时钟时,此二引线端用于接外部时钟脉冲信号。
3.端口线(32条)
P0.0~P0.7:P0口8位双向I/O口线,P0口是一个漏极开路的8位双向I/O端口,如图2.3所示。P0口既可作为通用I/O端口(对于内部有ROM或EPROM的单片机8051、8751)使用,又可作为地址/数据总线使用(外部扩展存储器时,一方面作为8位数据输入/输出口,另一方面用来输出外部存储器的低8位地址)。作为I/O输出口时,必须外接上拉电阻,才有高电平输出。
P1.0~P1.7:P1口8位双向I/O口线,P1口是一个带内部上拉电阻的8位准双向I/O口,通常作为通用输入/输出口使用。
P2.0~P2.7:P2口8位双向I/O口线。当访问外部程序存储器或外部数据存储器时,P2口用做输出地址的高8位,与P0口一起构成16位的地址总线,因此MCS-51系列单片机的最大程序存储量为64KB,最大外接数据存储器的存储量也是64KB。如果不需要输出高8位地址时,P2口可作为通用I/O口,每一位可以独立地定义为输入或输出。
P3.0~P3.7:P3口8位双向I/O口线。P3口具有两种功能:第一功能与P1口一样,每一位可以独立地定义为输入或输出;第二功能是P3口的8条I/O线可独立地作为串行输入/输出口和其他控制信号线,如图2.3(a)所示。
4.控制信号引脚(4条)
RST/VPD:复位信号输入端/备用电源输入端。
RST:复位信号输入端,高电平有效。当振荡器正常运行时,在此引脚上保持至少两个机器周期(24个时钟振荡周期)的高电平即可使单片机复位。
VPD:备用电源输入端。Vcc掉电期间,此引脚用于接备用电源,当电压降低到下限值时,备用电源经此引脚向内部RAM提供电压,以保护内部RAM中的信息不丢失。
EA/VPP:访问程序存储器控制信号/固化编程电压输入端。
EA:访问程序存储器控制信号。
当EA引脚接低电平时,对ROM的读操作只访问外部程序存储器(对8031来说,因内部无ROM,所以该引脚必须接地)。
当EA引脚接高电平时,对ROM的读操作从内部程序存储器0000H单元开始,当PC超过0FFFH时(对8051、8751来说),自动转向外部程序存储器,最大寻址范围为0FFFFH,即64KB。
VPP:固化编程电压输入端。对于EPROM型单片机,在EPROM编程写入(固化程序)期间,此引脚用于输入(一般21V)编程电源。
ALE/PROG:地址锁存允许信号/EPROM编程脉冲输入端。
ALE:地址锁存允许信号。当CPU访问外部存储器时,ALE信号(高电平有效)用于控制把P0口输出的低8位地址锁存到锁存器中,以实现低位地址和数据的隔离(因为P0口是地址/数据分时复用口)。即使不访问外部存储器,ALE端仍以固定的频率(振荡器频率的1/6)输出正脉冲,作为外部时钟或外部定时脉冲使用。
如果想知道8051/8031芯片的好坏,可用示波器查看ALE端是否有脉冲信号输出,如有,则表明芯片基本上是好的。
PROG:EPROM编程脉冲输入端。对于EPROM型单片机,在EPROM编程写入(固化程序)期间,此引脚用于输入编程脉冲(PROG)。
PSEN:外部程序存储器读选通信号。
在读外部ROM期间,每个机器周期PSEN二次有效(低电平),而访问外部RAM时,是由RD、WR信号控制的,因此可以看出MCS-51系列单片机的程序和数据是可以存放在不同的外部存储器中的,可以分别寻址。
如果想查看一个8051/8031小系统上电后CPU能否正常,到EPROM/ROM中读取指令码,也可用示波器查看PSEN端有无脉冲输出,如有,则说明基本上工作正常。
2.1.3 CHMOS增强型单片机8XC51FA的主要特点
8XC51FA又称为8XC252,是以8051为核心的一种CHMOS增强型单片机,它与8051芯片的指令系统和引脚兼容,其主要特点是增加了一个可编程的计数器阵列PCA (Programable Counter Array)。PCA由一个16位的定时器/计数器和5个16位的比较/捕捉模块所组成,逻辑结构如图2.4所示,16位定时器/计数器作为比较/捕捉模块的定时标准,因此主要作为定时器使用。每个比较/捕捉模块都可用做捕捉外部引脚CEXn上输入电平发生跳变的时间、软件定时器、高速输出、脉冲宽度调制PWM输出,而模块4还可用做系统的监视定时器WDT(Watch Dog Timer,又称为看门狗)。与基本型芯片不同的是,8XC51FA的P1口为双功能口,其中P1.3~P1.7的第二功能为PCA的输入/输出线CEX0~CEX4。
图2.4 PCA的逻辑结构图
PCA定时器/计数器由特殊功能寄存器CH、CL组成,CPU在任何时候都可以对它们进行读/写。PCA定时器/计数器的计数脉冲可以编程为下列4个信号中的任意一个。
① 振荡器的12分频信号。
② 振荡器的4分频信号。
③ 定时器T0溢出信号。
④ 外部引脚ECI(P1.2)上输入信号。
PCA的定时器/计数器是个加1计数器,计数器溢出时置“1”中断请求标志CF,8XC51FA处于空闲方式时,可以允许或停止PCA定时器/计数器的计数,与它有关的特殊功能寄存器还有方式寄存器CMOD和控制寄存器CCON。
控制寄存器CCON用来启动和停止PCA的定时器/计数器,地址为0D8H;方式寄存器CMOD用来设置PCA定时器/计数器的运行方式,地址为09DH(注意到在基本型8051单片机中,这两个单元是不用的)。
PCA中有5个比较/捕捉模块,每一个模块都有一个自己的方式寄存器CCAPM0~4,它们都是特殊的功能寄存器,其地址分别为0DAH~0DEH,这些寄存器分别控制对应模块的工作方式,其格式完全相同,如表2.1所示。
表2.1 PCA寄存器定义表
通过这5个捕捉模块使单片机具有一些特殊的功能。
1.16位捕捉方式
PCA中的比较/捕捉模块采样外部引脚(CEX0~CEX4)上的输入电平,当检测到一个有效跳变时,由硬件将PCA定时器的计数值装入模块捕捉寄存器,捕捉寄存器中的数值反映了外部引脚输入发生跳变时PCA定时器的计数值,也就是记录了发生跳变的时间。利用PCA模块的捕捉方式可以测量多达5个不同输入脉冲的周期、宽度、占空比和相位差。
2.软件定时器和高速输出方式
5个模块都可以工作于高速输出方式,这种高速输出方式比一般中断方式的软件定时输出在时间上更为精确,因为中断等时间不影响高速输出的操作。
3.脉冲宽度调制器PWM方式
这种方式可用做D/A转换器,PWM输出脉冲的频率取决于PCA定时器的计数脉冲,若振荡器的频率为16MHz,则输出波形的最高频率为15.6kHz。
4.监视定时器WDT(Watch Dog Timer)
监视定时器WDT的作用是当系统工作不正常时会自动产生一个复位信号,迫使系统恢复,一般用在外界干扰信号较大的场合,只有模块4才可以编程为WDT方式。
8XC51FA中与编程计数器阵列PCA有关的特殊功能寄存器一共有19个,均为基本型单片机中不用的单元。8XC51FA的中断源有7个,其中5个是基本型中所具有的,还有一个定时器T2中断,与8052相同,此外还有它所独有的PAC中断。
2.1.4 MCS-51系列单片机的指令系统
指令系统是一套控制单片机执行操作的编码,是单片机能直接识别的命令,要开发任何一种单片机,都必须详细了解这种单片机的指令功能,才能编写出高效的软件程序。
MCS-51指令系统具有功能强、寻址方式多、执行速度快等特点,特别适合于控制。
MCS-51系列单片机的指令是机器码指令,即用二进制代码(或十六进制数)表示的指令,也称目标代码指令。只有机器码指令才能够被计算机硬件直接识别和执行,但要记住这些机器码指令显然是很麻烦的。为此,人们想了很多办法,汇编语言就是其中之一。
汇编语言指令是用助记符来表示的指令。助记符一般为英语单词的缩写,如用“ADD”表示加法,用“MOV”表示传送等。下面是两条分别用代码和助记符形式书写的指令:
代码指令 助记符 功能 74 0A MOV A,#0AH 将十六进制数0AH送到累加器A中 24 14 ADD A,#14H 累加器A中的数与十六进制数14H相加,结果存入累加器A
汇编语言指令不能被计算机硬件直接识别和执行,必须通过汇编把它变成机器码指令才能被机器执行。汇编语言指令容易记忆,便于程序的编写和阅读,是单片机中常用的指令形式。汇编语言的每一条指令都可以通过查表找到与其相对应的机器码,这个过程称为汇编,现在有专门的编译程序把汇编语言编写的程序转换成机器码指令程序,所以只要掌握汇编语言指令及其编写程序的方法,就可以编写程序控制单片机执行相应的工作。
另外,还有可以通过C语言编写MCS-51系列单片机的程序,通过编译程序转换成相应的机器码指令程序,限于篇幅,这里不再讨论。
计算机指令大多是通过对数据的操作来完成的。这些被操作的数据,叫做操作数。所谓寻址方式,就是寻找操作数所在地址的方式。这里的地址一般是某个存储单元或寄存器。
MCS-51指令系统的寻址方式有7种,分别是立即寻址、寄存器寻址、间接寻址、直接寻址、变址寻址、相对寻址和位寻址。
MCS-51系列单片机的指令系统由111条指令构成,按字节数可分为:单字节指令49条,双字节指令45条,三字节指令17条。按指令执行周期分为:单机器周期指令64条,双机器周期指令45条,两条四机器周期指令分别为乘法和除法指令。当主频为12MHz时,一个机器周期为1μs。MCS-51系列单片机的指令系统按指令功能可分为算术运算指令、逻辑操作指令、数据传送指令、控制转移指令及位操作指令共5大类,主要功能介绍如下。
1.数据传送指令
数据传送操作是一种最基本、最主要的操作。MCS-51的数据传送操作可以在累加器A、工作寄存器R0~R7、内部数据存储器、外部数据存储器和程序存储器之间进行,其中对A、R0~R7的操作最多。数据传送指令一般是把源操作数传送到目标操作数,指令执行后,源操作数不变,目标操作数为源操作数。传送指令不影响标志位(写PSWP除外)。
数据传送指令可分为以下几类。
① 内部RAM数据传送指令。
② 外部RAM数据传送指令。
③ 查表指令。
2.算术运算指令
MCS-51的算术操作类指令可分为加法、带进位加、带借位减、加1、减1以及其他运算指令共6组。每组有4条指令,除最后一组外,4条指令的源操作数分别采用寄存器寻址、直接寻址、寄存器间接寻址及立即寻址,而目的操作数都是累加器A(若有两个操作数的话)。
3.逻辑操作指令
逻辑操作类指令包括逻辑与、逻辑或、逻辑异或运算及累加器A清零、求反和移位。
逻辑运算是按位进行的,不产生进位。逻辑与运算中,与“1”相与结果不变,与“0”相与结果为0;逻辑或运算中,与“1”相或结果为1,与“0”相或结果不变;逻辑异或运算中,与“1”相异或结果取反,与“0”相异或结果不变。
4.控制转移指令
转移指令是通过改变程序计数器PC的值,使PC有条件或无条件地或通过其他方式,从当前的位置转移到一个指定的地址单元去,从而改变程序的执行方向。
转移指令分为4大类:无条件转移指令、条件转移指令、调用指令及返回指令。
5.位操作指令
位操作指令是以位(bit)作为单位来进行运算和操作的。MCS-51系统在硬件方面有一个位处理器,它实际上是一个一位微处理器。它以进位位CY(程序状态字PSW.7)作为累加器C,以内部RAM和SFR内的位寻址区的单位作为操作数。与此相应,有一个专门处理位变量(又称为布尔变量)的指令子集,以完成对布尔变量的传送、运算、转移、控制等操作。由于MCS-51系统中有了这个颇具特色的位变量处理子系统,使得程序设计变得更加方便和灵活。例如,在许多情况下可以避免不必要的大范围的数据传送、屏蔽字节、测试和转移,在外围控制的“位−检测”应用中,提供了最佳的代码和速度。利用位逻辑运算指令,可以实现对各种组合逻辑电路的模拟,即用软件方法来获得组合电路的逻辑功能。所有这些都是MCS-51单片机的一个很重要的特点。
位操作指令包括位传送、条件传送、位运算等。所有的位访问均为直接寻址。
MCS-51中的位地址有以下几种方式:直接使用位地址00H~FFH、位寄存器定义名,如20H、C、OV等;用字节寄存器名后加位数,如PSW.4、P1.5等;用字节地址和位数表示,如20H单元位0到位7,可写成20.0~20.7。
从MCS-51系列单片机的指令系统中可以看到,这种8位的单片机适用于控制系统,但遇到复杂的数据处理和程序设计就需要选用其他类型的单片机了。
为了便于查询,附录A给出了MCS-51系列单片机的全部指令。