51单片机应用开发典型范例——基于Proteus仿真(含DVD光盘1张)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-29 11:35:30

点击下载

作者:刘波

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

51单片机应用开发典型范例——基于Proteus仿真(含DVD光盘1张)

51单片机应用开发典型范例——基于Proteus仿真(含DVD光盘1张)试读:

前言

学习单片机的最终目的是将其应用于实际系统设计中。

鉴于目前大多数单片机书籍都是介绍理论知识较多,而实际开发项目的讲解较少,本书以实用为宗旨,以单片机的功能模块为起点,以每个模块的硬件、软件设计为主线,通过大量实例的介绍来达到理论联系实际的目的,让读者能迅速开发出实际的应用系统。

本书共23章,各章内容分述如下。

第1章讲解51系列单片机的硬件基础知识,包括单片机各个I/O口的介绍、寄存器的讲解及汇编指令介绍。

第2章讲解C51编程和常用单片机开发软件的使用方法,重点讲解Keil、Protel 99se、Proteus的应用。

第3章讲解单片机实现LED灯显示,介绍了LED灯的工作原理、驱动方法,并且结合具体的实例介绍了Keil中程序调试的方法。

第4章讲解单片机实现数码管的显示,介绍了七段数码管的工作原理,单片机的驱动方法,并且利用定时器中断设计了简单秒钟。

第5章讲解单片机实现LCD液晶显示,介绍了自带中文字库的12864液晶的使用方法,并且设计了在12864液晶中显示汉字诗歌的实例。

第6章讲解单片机设计图标菜单,介绍了不带中文字库的12864液晶的使用方法,并且给出了液晶显示点阵数据的获取方法,详细讲解了菜单的软件设计原理。

第7章讲解单片机实现TFT彩屏的使用,重点介绍了TFT彩屏的图片显示方法。

第8章和第9章分别讲解独立键盘和矩阵键盘的使用。

第10章讲解基于DS18B20的温度采集系统的设计,重点讲解DS18B20的使用方法,给出了温度采集系统的硬件和软件设计。

第11章讲解单片机的串口通信,重点讲解了串口通信的原理、单片机串口通信的电平转换、单片机和PC通信的实现,以及单片机多机通信的实现。22

第12章讲解单片机实现EPROM的读/写,重点讲解IC总线的使用方法和AT24C02的使用方法。

第13章讲解单片机实现继电器的控制,重点讲解继电器的工作原理、单片机驱动继电器的方法、驱动三极管的选择,最后设计了继电器控制直流电动机系统。

第14章讲解A/D转换,重点讲解A/D转换的原理,以及常用的A/D转换芯片ADC0809的使用,介绍了ADC0809查询方法和中断读取转换结果的方法。

第15章讲解D/A转换,重点讲解D/A转换原理,DAC0832的使用,并且设计了基于DAC0832的简易波形发生器,给出了完善的硬件和软件设计。

第16章讲解步进电动机开环控制系统的设计,重点讲解了单片机如何控制步进电动机,包括脉冲的产生,脉冲的分配及驱动电路的设计。

第17章讲解单片机实现直流伺服电动机的控制,重点讲解了直流伺服电动机的重要种类——舵机的工作原理和控制方法。

第18章讲解万年历的设计,利用DS1302时钟芯片设计了参数可调节的万年历。

第19章讲解基于NRF905的无线温度采集系统设计,重点讲解了NRF905的使用方法、无线温度采集系统的硬件和软件设计。

第20章讲解基于ISD4004的简易语音录放系统设计,比较了常见语音录放设计思路的优劣,介绍了ISD4004的使用方法,给出了语音录音系统完整的硬件和软件设计过程。

第21章讲解基于数字电位器的数控电压源的设计,重点讲解数字电位器X9241的使用方法。

第22章讲解交通灯的设计,通过讲解交通灯设计中容易忽视的各种细节问题,让读者理会实际设计系统时全面考虑问题的重要性。

第23章讲解抢答器的设计,通过比较常见抢答器的设计方案优劣,提醒读者设计产品时应该有质疑精神和创新精神。

和其他类似书籍相比,本书具有以下几个特点。(1)功能模块众多:本书讲解的功能模块涵盖单片机使用的各个应用场合,在每个功能模块中,详细讲解了其应用场合、工作原理、实现该功能的主要元器件,并且给出了原理图和完整程序代码。(2)实例讲解翔实:选用常见的实例作为讲解对象,在每个实例中,分析了常见设计思路的优劣,介绍了主要元器件的使用方法及完整的硬件、软件设计,读者只要稍作修改就可以应用于实际项目中。(3)设计得到仿真验证:本书对绝大多数功能模块和实例都进行了Proteus仿真验证,并且将仿真过程穿插于内容讲解中,这样既提高了设计的正确性,也为读者设计实际系统提供了验证设计思路的方法。

本书讲解深入浅出,实例内容翔实,绝大多数模块、实例都有Proteus仿真验证,所有的模块和实例都有详细的硬件和软件设计。力求既能让单片机初学者快速入门,又能让中高级开发人员的基础得到进一步提升,非常适合各类高校自动控制、电气工程、自动化、机械电子专业的学生使用,同时也可供从事单片机系统开发的广大技术人员参考阅读。

本书主要由刘波编写,在编写过程中得到了父母、同事及朋友们的支持和鼓励,在此表示衷心的感谢!参与本书编写的还有张玉兰、李龙、魏勇、王华、李辉、刘峰、徐浩、李建国、马建军、唐爱华、苏小平、朱丽云、马淑娟、周毅等。

由于时间仓促,加之作者水平有限,虽多次修改,但书中纰漏之处在所难免,望读者批评指正,在此一并表示感谢。

编 著 者第1章 51单片机开发基础

单片机又称微控制器(Micro Controller Uint,MCU),是一片集成了CPU、存储器、各种输入/输出接口的芯片。该芯片具有体积小、价格低、开发应用方便的特点,在工业自动化、智能仪器仪表、消费电子产品等方面得到广泛的应用。1.1 51单片机的硬件基础

单片机的学习可以从了解单片机内部硬件结构,掌握单片机基本模块的硬件电路和软件编程,了解常见应用系统设计三个方面着手。本章讲解单片机的内部硬件结构,读者只要把这部分作为资料查阅,刚开始时看一两遍即可。考虑到很多读者都是单片机初学者,因此本章介绍单片机内部硬件结构时,尽量将语音通俗、形象化。1.1.1 51单片机概述

1.51单片机实物图

最常见的AT89C51单片机如图1-1所示,左侧小片的AT89C2051也是常见的单片机。

单片机就是一片普通而又有点特殊的芯片。普通是因为它和其他芯片一样有引脚,工作时需要通电(好像还没有发现不通电也能工作的芯片,呵呵),但是它又有一点特殊,通电后必须往芯片内输入程序才能工作,而且想要它实现什么功能,只要编写实现这些功能的程序,然后把这些程序输入该芯片内,我们的设想就实现了。图1-1 常见单片机实物图

51单片机的主要生产厂商如表1-1所示。表1-1 51单片机主要生产厂商

有单片机基础的读者可能会问:以前书上说的8031,8051单片机到哪里去了?上面表格怎么没有,其实上述单片机大多数都是以8051单片机内核为基础,即8051单片机就是上述大多数单片机的核心部件,只是它们增加了一些储存器的外设而已。

2.51单片机命名规则

每款单片机都有一个独一无二的名字,这就是它的身份标识,生产厂家为便于用户选择元器件,通常有一套同样的命名规则。

以图1-1的AT89S51单片机为例,该款单片机上的标号为AT89S51-24PC,标号上各部分意义解释如下:(1)AT——公司前缀,表示该芯片为Atmel公司生产,绝大多数单片机生产厂商都会把自己公司的字母缩写放到芯片名字的最前端,单片机如此,其他模拟、数字芯片更是如此。这样一方面给自己公司做了无形的广告,另一方面方便读者选择自己公司生产的芯片。(2)8——表示该芯片内核为8051。2(3)9——表示内部含Flash EPROM存储器。类似于80C51中的0表示内含掩膜存储器(Mask ROM),87C51中的7表示内含紫外线可擦除存储器(EPROM)。(4)S——表示该芯片具有ISP在线编程功能。具有该功能的单片机,PC上编写好的程序可以通过串口通信直接写入单片机内部,无须把单片机从设计好的电路板上拔下,放到专门的编程器上。类似于80C51中的C表示该芯片为CMOS产品。还有,表1-1中AT89LV51的LV表示该芯片为低电压产品,可以在3.3V电压下工作,而通常单片机的工作电压为5V。(5)5——有资料显示该位是固定不变的。(6)1——表示该芯片内部程序存储器的空间大小。1为4KB,89C52中的2为8KB。(7)24——表示可支持最高为24MHz的系统时钟。(8)P——表示该芯片的封装形式。P为DIP封装,A为TQFP封装,J为PLCC封装。(9)U——表示应用级。C为商业级,I为工业级(有铅)、U为工业级(无铅)。不同应用级的芯片工作温度范围不同。

小贴士:芯片不同级的工作温度范围

C:表示商业用产品,温度范围为0~+70℃。

I:表示工业用产品,温度范围为-40~+85℃。

A:表示汽车用产品,温度范围为-40~+125℃。

M:表示军用产品,温度范围为-55~+150℃。

同一种芯片的不同应用级除了工作温度范围不同外,根据各自领域的应用特点,芯片设计生产时也会有所偏重。像汽车类电子芯片可能会对芯片体积,抗振性能有特殊的要求,而军用产品可能会对芯片的抗电磁干扰能力,工作时输出信号的精度有要求,并且不同级的芯片价格相差很大,一般是军用产品价格最高。1.1.2 引脚说明

PDIP封装的51单片机封装引脚图如图1-2所示,该封装类型的51单片机有40个引脚,这40个引脚可以分为三类:单片机最小系统所需引脚,编程控制引脚,I/O引脚。下面详细介绍这三类引脚。图1-2 51单片机PDIP封装引脚图

1.单片机最小系统所需引脚

单片机最小系统所需引脚:VCC,GND,XTAL1,XTAL2,RST,EA/VPP。

所谓单片机最小系统,指的是在外接元器件最少的情况下,能让单片机正常工作的系统。比如,我们也可以给手机定义一个最小系统,能让手机正常工作必须包括电源,无线通信收发器,话筒,键盘,有这四部分就可以打电话和接电话了。下面详细讲解单片机最小系统所需引脚:(1)VCC——单片机工作电源正极连接端。多数单片机工作电压为+5V,也有+3.3V的工作电压,需要查看单片机使用手册确定。(2)GND——单片机工作电源地连接端。(3)XTAL1,XTAL2——外接时钟引脚。

XTAL1为片内振荡电路的输入端,XTAL2为片内振荡电路输出端。51单片机的时钟有两种方式,一种是片内时钟振荡方式,需要在这两个引脚间外接石英晶体和振荡电容,电容一般取值为10~30pF。另一种是外部时钟方式,该方式下将XTAL1接地,外部时钟信号从XTAL2输入。(4)RST——单片机复位引脚。当输入连续两个机器周期以上高电平时有效,复位后程序计数器PC=0000H。(5)EA/VPP——访问程序存储器控制引脚。该引脚接高电平时,CPU读取内部程序存储器(ROM);接低电平时,CPU读取外部程序存储器(ROM)。STC89C52有内部ROM,因此,在设计电路时该脚要接高电平,而8031单片机内部是没有ROM的,那么在应用8031单片机时,这个引脚是一直接低电平的。8751烧写内部EPROM时,利用此脚输入21V的烧写电压。

2.编程控制引脚(1)/PSEN——程序存储器允许输出控制端。在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。由于现在单片机的ROM都比较大,几乎没有人去扩展外部ROM,因此该引脚使用较少。(2)ALE/PROG——地址锁存控制引脚。在系统扩展时,ALE用于把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。ALE有可能是高电平也有可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号负跳变(即由正变负),将P0口上低8位地址信号送入锁存器;当ALE是低电平时,P0口上的内容和锁存器输出一致。关于锁存器将在第3章介绍。

在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器以1/12振荡周期输出(12分频)。从这里可以看到,当系统没有进行扩展时ALE会以1/6振荡周期的固定频率输出,因此可以作为外部时钟或者外部定时脉冲使用。

PORG为编程脉冲的输入端,我们已知道,在51单片机内部有一个4KB或8KB的程序存储器(ROM),ROM的作用就是存放用户需要执行的程序,那么,是怎样把编写好的程序存入ROM中?实际上通过编程脉冲输入才能写进,这个脉冲的输入端就是PROG。

3.I/O引脚

单片机具有P0,P1,P2,P3四组I/O引脚,每组8个共32个引脚这些I/O引脚既可以作为信息输入也可以作为信息输出口,这四组I/O引脚将在1.1.5节中详述。1.1.3 CPU

51单片机中有一个8位的CPU,该CPU包括运算器和控制器两大部分,并且单片机的CPU还特别增加了面向控制的处理功能,即不仅可处理字节数据,还可以进行位变量的处理,例如,位处理、查表、状态检测、中断处理等。下面详细介绍CPU的运算器和控制器。

1.运算器

运算器主要用来对操作数进行算术、逻辑运算和位操作。包括算术逻辑运算单元ALU,累加器A,寄存器B,位处理器,程序状态字寄存器PSW及BCD码修正电路等。由于BCD码修正电路和实际应用关系不大,下面就不讲解。

1)算术逻辑单元ALU

CPU的运算器以ALU为中心,单片机所要进行加、减、乘、除等基本算术运算,以及逻辑与、或、异或、循环、求补和清零等逻辑运算都在ALU中执行。

ALU中不存储运算结果,根据不同运算类型,运算结果会存储到累加器ACC,B寄存器等其他CPU的寄存器中。

2)累加器ACC

累加器ACC是一个8位的寄存器,也是CPU中使用最频繁的一个寄存器。累加器ACC的作用有两个:一是作为ALU单元的数据输入寄存器,当运算结束后,运算结果也存储到ALU中;二是作为外部寄存器和CPU中数据传送的桥梁,外部寄存器数据要通过累加器ACC才能传送到CPU的ALU中进行运算。

3)B寄存器

寄存器B是为执行乘法和除法操作设置的,乘法中,ALU的两个输入分别为累积器ACC,B寄存器。运算结果存放在BA寄存器中,B寄存器存放乘积的高8位,ACC中放乘积的低8位。

除法中被除数取自ACC,除数取自B寄存器,商存放在ACC中,余数存于B寄存器中,在不执行乘、除法操作的情况下,可把它作为一个普通的寄存器使用。

4)程序状态字寄存器PSW

PSW是一个8位可读/写的寄存器,位于单片机的特殊寄存器区间。PSW主要用于存放程序状态信息及运算结果的标志,所以又称标志寄存器,其格式如下(D位没有定义):1表1-2 PSW寄存器定义

CY——进位标志位。

执行算术和逻辑指令时,CY可以被硬件或软件置位或清除,在位处理器中,它是位累加器。运算结束后,如果有进位或者借位发生,则CY=1,否则CY=0。

AC——辅助进位标志位。

当进行BCD码的加法或减法操作而产生的由低4位数(代表一个BCD码)向高4位进位或者借位时,AC将被硬件置1,否则被清零。AC被用于十进位调整,同DA指令结合起来用。

F0——用户标志位。

用户可自己定义该位的作用。

RS1、RS0——工作寄存器区选择控制位。

用于选择4组工作寄存器哪一组为当前工作寄存器,工作寄存器将稍后介绍。表1-3 工作寄存器的选择

OV——溢出标志位。

P——奇偶标志位。

该标志位用来表示累加器ACC中1的位数的奇偶。P=1,则ACC中1的位数为奇数;P=0,则ACC中1的位数为偶数。

2.控制器

控制器是由程序计数器PC、指令寄存器、译码器、定时与控制电路等组成的。

1)程序计数器PC

程序控制器PC是一个16位的寄存器,PC中的内容是下一条将要执行的指令代码的起始存放地址。当单片机复位后,PC内的值为0000H,这就引导CPU从0000H开始的地址读取指令代码,CPU每读取一字节的指令,PC的内容自动加1,以指向下一个地址。

2)指令寄存器、译码器、定时与控制电路

指令寄存器IR是用于存放指令操作码的专业寄存器。执行程序时,首先从程序存储器中读取指令操作,也就是根据PC给出的地址从程序存储器中读取指令,并送到指令寄存器IR中,IR的输出送指令译码器,然后由译码器对该指令进行译码,译码结果送定时控制逻辑电路,定时控制逻辑电路根据指令性质发出一系列的定时控制信号,控制单片机的各个组成部件进行相应的工作,执行指令。1.1.4 存储器结构

51单片机的存储器结构如图1-3所示,51单片机的存储器分为两大存储空间:程序存储器(ROM)和数据存储器(RAM),下面分别介绍。图1-3 51单片机存储器结构

1.程序存储器(ROM)

程序存储器主要用于存放程序和表格常数。

从前面的引脚讲解一节可知,当单片机的EA/VPP引脚接高电平时,单片机执行内部程序存储器里数据,也就是执行片内4KBROM中存储的程序,对于89C51单片机,4KBROM是自带的,在芯片里就有,因此EA/VPP接固定高电平即可。

那么,图中的片外4KB,60KB程序存储器是什么?那是8031单片机因为自己没有程序存储器,所以要进行程序存储器扩展,将EA/VPP接固定低电平。

那么,51单片机程序存储器不够时是不是需要扩展?作者认为21世纪的现在,如果51单片机程序存储器不够就用52,52还不够那就用其他有超大容量程序存储器的MCU,因为扩展的程序存储器芯片比单片机便宜不了多少,而且一个系统芯片多了,问题可能接踵而至。

程序存储器中有几个特殊单元,它们是中断服务程序的入口地址,见表1-4。表1-4 各中断源中断入口地址

小贴士:程序存储器总结

对于程序存储器明白以下三点即可。(1)对于AT89C51,STC89C51等单片机,内部自带了4KB的ROM,使用时将EA/VPP接固定高电平。(2)单片机的程序计数器PC在复位后PC=0000H,即指向程序存储器的开始地址。(3)不推荐扩展程序存储器,后面的数据存储器也不推荐扩展。如果空间不够就更换单片机类型。

2.数据存储器(RAM)

数据存储器主要用于存放程序执行过程中的各种数据。在51单片机内部自带了256B的数据存储器,00H~7FH为通用的数据存储区,80H~FFH为专用的特殊功能寄存器区。

低128B的内部数据存储器结构如图1-4所示。图1-4 内部RAM的低128B结构图

按其功能不同划分为3个区域。

1)工作寄存器区(00H~1FH)

该区均分为四个小区,任何时候,只有一个区的工作寄存器可以工作,称为当前工作寄存器区。当前区的选择可通过对寄存器PSW中的RS1、RS0两位的设置来进行,见表1-2。

2)位寻址区(20H~2FH)

位寻址区由16个单元组成,共128位,每位具有位地址,表1-3中表格数据是每位的位地址。每个单元也可作为一般的数据缓冲单元使用。

片内RAM的位寻址如图1-5所示。图1-5 片内RAM的位寻址

3)用户区(30H~7FH)

用户区为一般数据缓冲区,堆栈区通常也设置在这个区域内。

高128字节(特殊功能寄存器区)大多数用于存放特殊功能寄存器,51内部有21个特殊功能寄存器(简称SFR),它们均为8位的寄存器,离散分布在80H~FFH区域,剩下107个单元是没有定义的,用户不能使用。见表1-5。有11个SFR的字节地址可被8整除(地址以0和8结尾),可以位寻址(表中已给出它们的位地址)。表1-5 特殊功能寄存器地址对照表续表1.1.5 I/O端口

单片机有P0,P1,P2,P3四组I/O端口,下面分别详述每组端口。

1)P0—双向8位三态I/O口

每个口可以独立控制,数据可以双向传输,在使用时一定要外接10kΩ的上拉电阻。P0口还可以用来输出外部存储器的第8位地址。由于是分时输出,故应在外部加锁存器将地址数据锁存,地址锁存信号用ALE。

2)P1—准双向8位I/O口

每个口也可独立控制,内带上拉电阻,这种接口输出没有高阻态,输入也不能锁存,故不是真正的双向I/O口,称为准双向I/O口。当作为输入时,要先向该口进行写1操作。对于52单片机,P1.0口的第二功能为T2定时器/计数器的外部输入,P1.1口的第二功能是T2EX捕捉,重装触发端。

3)P2—准双向8位I/O口

P2口的功能和P1口类似,但是P2口还通常用于构建系统地址总线,并且作为总线的高8位。

4)P3—准双向8位I/O口

P3口功能和P1口类似,只是每个P3口都有第二功能,各引脚第二功能定义如表1-6所示。表1-6 P3口各引脚第二功能1.1.6 定时器/计数器

1.定时器/计数器模块概述

51单片机内部共有2个16位可编程的定时器/计数器,即定时器/计数器0,定时器/计数器1,52单片机内部还有定时器/计数器2,它们既有定时的功能又有计数的功能。通过设置与它们相关的特殊功能寄存器,可以选择启用定时功能或者计数功能。

定时器/计数器结构框图如图1-6所示。定时器/计数器的实质是加1计数器,由高8位和低8位两个寄存器组成。当通过TMOD,即定时器/计数器工作方式寄存器,设置好定时器/计数器的工作方式后,由TCON(控制寄存器)启动定时器/计数器,则定时器/计数器在机器周期脉冲的作用下,自动进行加1计数,这个加1过程无须人工干预,无须程序干预,单片机内部硬件电路自动执行。这一点对于明白后面的定时器中断概念很重要。也就是说定时器/计数器一旦被设置好并且启动后,它自动进行加1计数。图1-6 定时器/计数器结构图

2.定时器/计数器模块内部的寄存器

定时器/计数器模块内部有两个常用的寄存器:TMOD,方式设置寄存器,用于设置定时器/计数器模块的工作方式;TCON,控制寄存器,用于启动定时器/计数器模块内部各组成部分,并且还能指示各部分的工作状态。下面详细介绍这两个寄存器。

1)TMOD—方式寄存器

该寄存器位于单片机数据寄存器的特殊功能寄存器区间,字节地址为89H,不能用位寻址,该寄存器用于设置定时器的工作方式,其高4位用于设置定时器1,低4位用于设置定时0。单片机复位时该寄存器全部被清零。

表1-7列出了TMOD寄存器内部各位的标识,各位的定义如下所述。表1-7 TMOD寄存器

GATE——门控制位。

当GATE=0,定时器/计数器的启动和停止只受TCON寄存器的TRX(X=0,1)控制。当GATE=1,定时器/计数器的启动和停止由TCON寄存器的TRX(X=0,1)和外部中断引脚INT0或INT1上的电平状态共同控制。

C/T——定时器模式和计数器模式选择位。

C/T=1,计数器模式;C/T=0,定时器模式。

M1,M0——工作方式选择位。

M1,M0两位用于设置定时器/计数器的工作方式,每个定时器/计数器都有4种工作方式,对应关系如表1-8所示。表1-8 定时器/计数器的4种工作方式

下面详细介绍每种工作方式。

方式0:13位定时器/计数器。

在该方式下,定时器/计数器由TL低5位和TH的8位组成,TL低5位计数满时不向TL第6位进位,而是向TH进位,13位计满溢出,TF13置“1”。最大计数值2=8192。

方式1:16位定时器/计数器。

在该方式下,定时器/计数器由TL和TH组成,最大计数值为162=65 536。工作方式与方式0相似。

方式2:8位初值自动重装定时器/计数器。8

可自动装载的8位计数器,仅用TL计数,最大计数值为2=256,计满溢出后,一方面进位TF,使溢出标志TF=1;另一方面,使原来装在TH中的初值装入TL。在该方式下,定时初值可自动恢复,但是计数范围小,常作为串口波特率发生器。

方式3:方式3仅适用于T0,T1无方式3。T1停止计数,只是保持其值,T0分成两个独立的8位计数器TH0和TL0,此方式较特别。在方式3情况下,T0被拆成两个独立的8位计数器TH0、TL0。

TL0使用T0原有的控制寄存器资源:TF0,TR0,GATE,C/T,INT0,组成一个新的8位定时器/计数器;TH0借用T1的中断溢出标志TF1,运行控制开关TR1只能对单片机内部脉冲计数,组成另一个8位定时器(不能用作计数器)。当T0工作在方式3情况下,T1由于其TF1、TR1被T0的TH0占用,所以当T1的计数器溢出时,只能将输出信号送至串行口,即用作串行口波特率发生器。

2)TCON—控制寄存器

该寄存器位于单片机数据寄存器的特殊功能寄存器区间,字节地址为88H,可用位寻址,该寄存器用于设置定时器的启动、停止,指示定时器是否计数溢出及一些中断信号,单片机复位时该寄存器全部被清零,表1-9是TCON寄存器的说明。表1-9 TCON寄存器

该寄存器的高4位用于定时器/计数器控制,低4位用于外部中断控制,各位定义如下:

TF1——定时器1溢出标志位。

当定时器1计数满溢出时,由单片机内部硬件使TF1置1,并且申请中断,进入中断服务程序后,有硬件自动清零,需要注意的是,如果使用定时器中断,那么该位完全不用人为操作,但是用软件查询方式的话,当查询到该位置1后,需要用软件清零。

TR1——定时器1运行控制位。

当GATE=1,且INT1为高电平时,TR1置1启动定时器1,当GATE=0时,TR1置1启动定时器1。软件清零时关闭定时器1。

TF0——定时器0溢出标志。

和TF1操作方法类似。

TR0——定时器0运行控制位。

和TR1操作方法类似。

IE1——外部中断1请求标志。

当外部中断1引脚P3.3上的电平有效(电平何时有效将在IT1位讲解),IE由硬件置1,当CPU响应中断后,由硬件清零。

IT1——外部中断1触发方式选择位。

当IT1=1时,下降沿触发方式。外部中断1引脚P3.3上的电平由高到低的负跳变有效。当IT1=0时,电平触发方式,外部中断1引脚P3.3上出现低电平时有效。

IE0——外部中断0请求标志。

和IE1操作方法类似。

IT0——外部中断0触发方式选择位。

和IT1操作方法类似。

3.定时器/计数器使用方法

定时器/计数器的使用步骤是

1)设定定时器/计数器工作方式

利用TMOD寄存器设置定时器0或者定时器1的工作方式。一般定时时间较长时用方式0,1,单片机串行口通信时用方式2,方式3较少使用。

2)设定计数初值

根据定时要求设定计数初值。要明白定时器/计数器具有向上计数的特性,比如设置定时器0工作在方式0下,设置计数初值为5000,启动定时器0将从8192-5000=3192处开始计数,从3192一直计到8192共5000个数,产生溢出标志。而不是我们想象的从0计数到5000。也不是从5000计数到8192,这一点请读者引起注意。

具体的计数初值和定时时间的关系将在后面章节详细讲解。

3)启动定时器/计数器

启动定时器/计数器后,无须再干预,一旦定时时间到,单片机的IF1或者IF0产生溢出标志,根据实际需要在去处理即可。1.1.7 串行口

1.MCS-51单片机串行口简介

MCS-51单片机串行口具有两条独立的数据线:发送端TXD、接收端RXD,允许数据同时往两个相反的方向传输。一般通信时发送数据由TXD端输出,接收数据由RXD端输入。

2.串行口相关的寄存器

MCS-51单片机串行口是由缓冲器SBUF、串行口控制寄存器SCON、电源控制寄存器PCON及波特率发生器T1组成。

1)SBUF—串行口数据缓冲器。

MCS-51单片机内的串行接口部分,具有两个物理上独立的缓冲器:发送缓冲器和接收缓冲器,以便能以全双工的方式进行通信。串行口的接收由移位寄存器和接收缓冲器构成双缓冲结构,避免在接收数据过程中出现帧重叠。发送时因为CPU是主动的,不会发生帧重叠错误,所以发送结构是单缓冲的。

但是在逻辑上,串行口的缓冲器只有一个,它既表示接收缓冲器,也表示发送缓冲器。两者共用一个寄存器名SBUF,共用一个地址99H。

即在完成串行口初始化后,发送数据时,采用MOV SBUF,A指令,将要发送的数据输入SBUF,则CPU自动启动和完成串行数据的输出;接收数据时,采用MOV A,SBUF指令,CPU就自动将接收到的数据从SBUF中读出。

2)SCON—串行口控制寄存器。

串行口控制寄存器SCON包含:串行口工作方式选择位、接收发送控制位及串行口状态标志位,见表1-10。表1-10 SCON寄存器

各位定义如下:

SM0,SM1——串行口的工作方式选择位。

单片机的串行通信方式由SM0,SM1两位决定,如表1-11所示,四种工作方式将在后面的章节详细讲解。表1-11 串行口的工作方式

SM2——多机通信控制位。

在方式2或方式3中,若SM2=1,则只有当接收的第9位数据(RB8)为1时,才能将接收的数据送入SBUF,并使接收中断标志RI置位,向CPU申请中断,否则数据丢失;若SM2=0,则不论接收的第9位数据为1还是为0,都会把前8位数据装入SBUF中,并使接收中断标志RI置位,向CPU申请中断。在方式1,如SM2=1,则只有收到有效的停止位时才会使RI置位。在方式0,SM2必须为0。

REN——串行口接收允许位。

由软件置位以允许接收,由软件清零来禁止接收。

TB8——在方式2和方式3中为发送的第9位数据。

在多机通信中,常以该位的状态来表示主机发送的是地址还是数据。通常协议规定:TB8为0表示主机发送的是数据,为1表示发送的是地址。

RB8——在方式2和方式3中为接收的第9位数据。

它和SM2、TB8一起用于通信控制。

TI——发送中断标志。

由硬件在方式0串行发送第8位结束时置位,或在其他方式串行发送停止位的开始时置位,必须由软件清零。

RI——接收中断标志。

由硬件在方式0串行接收到第8位结束时置位,或在其他方式串行接收到停止位时置位,必须由软件清零。

3)PCON——电源控制寄存器

D7位SMOD是串行口波特率倍增位。SMOD为1时,串行口工作方式1、方式2、方式3的波特率加倍。PCON寄存器说明见表1-12。表1-12 PCON寄存器

4)波特率发生器T1

波特率发生器T1就是前面定时器/计数器模块当中的T1,当单片机工作在不同的串口通信方式下时,其通信波特率计算方法不同,具体的计算方法将在“单片机串口通信”一章详细讲解。1.1.8 中断系统

1.何为中断

在讲解51单片机的中断系统之前,先形象地讲解中断的概念。顾名思义,中断是指程序在执行过程中遇到随机发生的事情停下来,转去处理刚发生的事情,处理完后再接着执行刚停下来的程序。

单片机执行一次完整的中断服务程序包括5步:中断寄存器初始化,中断源请求中断、CPU中断响应、执行中断服务、中断返回。下面详细讲解这5步。

1)中断寄存器初始化

如果单片机在应用过程中要用到中断模块,必须先对中断相关寄存器进行初始化,比如开发哪种类型的中断源,触发该中断源的信号有什么要求等。

2)中断源请求

中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器IE中)置1。这些中断请求标志位是硬件自动置1的。

3)中断响应

CPU查询(检测)到某中断标志为1,在满足中断响应条件下响应中断。中断响应条件:该中断已经“开中”,CPU此时没有响应同级或更高级的中断;当前正处于所执行指令的最后一个机器周期;正在执行的指令不是RETI或者是访问IE、IP的指令,否则必须再另外执行一条指令后才能响应。

CPU响应中断后,进行下列操作:保护断点地址,撤除该中断源的中断请求标志,关闭同级中断,将相应中断的入口地址送入PC。

4)执行中断服务程序

中断服务程序应包含以下几部分:保护现场;执行中断服务程序主体,完成相应操作;恢复现场。

5)中断返回

在中断服务程序最后,必须安排一条中断返回指令RETI,当CPU执行RETI指令后,自动完成下列操作:恢复断点地址,开放同级中断,以便允许同级中断源请求中断。

2.中断的形象解释

读者刚接触中断时可能比较茫然,所以下面以一个例子来对中断进行形象的解释。

以MM约作者上街为例来说明中断的五个步骤。

比如,某天某位MM早上打电话给作者,告诉作者她今天会来找我出去上街,但是不确定什么时候来。这相当于单片机在编写中断程序时对中断源的初始化,即让单片机开放某个中断源,但是该中断什么时候发生单片机无法预知,就像作者无法预知该MM什么时候到俺家一样。

上面这段话就完成了中断的初始化:中断源为MM约作者上街;中断触发信号为MM来家时的敲门声(当然她也可以在楼下大喊作者的名字,这也可以作为中断触发信号)。

那这一天作者应该干什么呢?在家里傻等她的到来,什么事情都不干?如果在家傻等的话,相当于单片机采用查询中断标志位的方式,程序不断查询某个中断标志位,在中断没到来之前只是不停查询,不再执行其他程序,就像作者一样只是傻等该MM到来,其他任何事情都不做。

但是我显然不会这样傻等,当天该干什么还是干什么。作者选择在电脑中看电影。这就类似于单片机在初始化中断后,去执行相应的程序。

作者在看电影时不会去查问MM什么时候到,就像单片机执行程序时不会去查询中断是否到来一样(当然,使用查询的方法得到中断信号除外)。

当MM告诉作者她已经到达时,作者将所看电影进度保存,这相当于单片机在执行中断服务程序时先保存现场,然后陪MM上街,这相当于单片机执行中断服务程序。

但是由于电影实在是吸引人,作者上街一会就准备回来,这相当于单片机的中断服务程序不太长,回来后先将所看的保存电影打开,相当于单片机在执行完中断服务程序后先要恢复现场,然后在原来保存的进度上继续看电影,相当于单片机在原来保存现场的地方继续执行未完成的程序。

至此,单片机响应一次中断过程完成。

3.单片机5大中断源

51单片机共有5大中断源,分别是外部中断0、定时器0、外部中断1、定时器1、串口中断,下面分别介绍。

✧ 外部中断0,中断请求信号由P3.2输入。

✧ 外部中断1,中断请求信号由P3.3输入。

✧ 定时器/计数器0溢出中断,对外部脉冲计数由P3.4输入。

✧ 定时器/计数器1溢出中断,对外部脉冲计数由P3.5输入。

✧ 串行中断,包括串行接收中断RI和串行发送中断TI。

4.中断系统所涉及的寄存器

51单片机中涉及中断控制的寄存器有三类:分别是中断请求寄存器,这一类包括两个寄存器,即定时和外中断控制寄存器TCON,串行控制寄存器SCON;中断允许控制寄存器IE;中断优先级控制寄存器IP。

其中TCON和SCON已经在前面分别介绍,下面介绍IE和IP寄存器。

1)IE—中断允许控制寄存器

中断允许寄存器用来设定各个中断源的打开和关闭,IE位于特殊功能寄存器中,字节地址为A8H,可位寻址,IE寄存器说明见表1-13。表1-13 IE寄存器说明

EA——全局中断允许位。

EA=1,打开全局中断,相当于将中断的总开关打开。

EA=0,关闭全局中断。

ES——串行口中断允许位。

ES=1,打开串行口中断。

ES=0,关闭串行口中断。

ET1——定时器/计数器1中断允许位。

ET1=1,打开T1中断。

ET1=0,关闭T1中断。

EX1——外部中断1中断允许位。

EX1=1,打开外部中断1。

EX1=0,关闭外部中断1。

ET0——定时器/计数器0中断允许位。

ET0=1,打开T0中断。

ET0=0,关闭T0中断。

EX0——外部中断0中断允许位。

EX0=1,打开外部中断0。

EX0=0,关闭外部中断0。

2)IP—中断优先级寄存器

中断优先级寄存器位于特殊功能寄存器中,字节地址为B8H,可位寻址,用来设定各个中断源属于两个中断中的哪一级,单片机复位时清零,具体每位说明见表1-14。表1-14 IP寄存器

PS——串行口中断优先级控制位。

PS=1,串行口中断定义为高优先级。

PS=0,串行口中断定义为低优先级。

PT1——定时器/计数器1中断优先级控制位。

PT1=1,定时器/计数器1中断定义为高优先级。

PT1=0,定时器/计数器1中断定义为低优先级。

PX1——外部中断1中断优先级控制位。

PX1=1,外部中断1定义为高优先级。

PX1=0,外部中断1定义为低优先级。

PT0——定时器/计数器0中断优先级控制位。

PT0=1,定时器/计数器0中断定义为高优先级。

PT0=0,定时器/计数器0中断定义为低优先级。

PX0——外部中断0中断优先级控制位。

PX0=1,外部中断0定义为高优先级。

PX0=0,外部中断0定义为低优先级。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载