本书系统地介绍了MCS51系列单片机的结构、指令系统、程序设计、中断系统、定时器/计数器、串行口、系统扩展及实用I/O接口技术等基本原理及初步应用; 还介绍了基于单片机的嵌入式系统开发流程; 重点介绍了几种常用单片机开发应用软件(Keil、Altium Designer、Proteus),以利于读者边学习边实践; 而且,对目前常用的几种单片机进行了简单介绍。 本书含有丰富的实例详解及习题,特别适合作为大中专院校单片机原理及应用课程的教材,还可作为单片机爱好者的自学用书,也可作为单片机应用开发技术人员、智能仪表开发技术人员及研究生的设计参考用书。
单片机原理及应用教程(第2版是教育部高等学校机械类专业教学指导委员会规划教材之一。
第1章微型计算机基础知识
1.1微型计算机的组成
1.2计算机中数据的表示方法
1.2.1进位计数制
1.2.2数制间的相互转换
1.2.3二进制数的运算
1.2.4数值数据的表示
1.2.5非数值数据的表示
1.3单片机概述
1.3.1单片机的基本结构
1.3.2单片机的发展
1.3.3单片机的特点及应用
习题
第2章MCS51系列单片机的硬件结构
2.1单片机的内部结构
2.1.1内部结构框图
2.1.2引脚与功能
2.2单片机的存储器结构
2.2.1程序存储器
2.2.2数据存储器
2.2.3特殊功能寄存器
2.3单片机的并行I/O口
2.3.1I/O口的特点
2.3.2I/O口的内部结构
2.3.3I/O口的功能
2.3.4I/O口的负载能力
2.4单片机的时钟与时序
2.4.1时钟电路
2.4.2CPU时序
2.5单片机的复位
2.6单片机最小系统
习题
第3章MCS51系列单片机的指令系统
3.1指令系统简介
3.1.1指令格式
3.1.2指令分类
3.2单片机寻址方式及实例解析
3.2.1直接寻址
3.2.2立即寻址
3.2.3寄存器寻址
3.2.4寄存器间接寻址
3.2.5变址寻址
3.2.6相对寻址
3.2.7位寻址
单片机原理及应用教程(第2版)
目录
3.3单片机指令系统及实例解析
3.3.1数据传送指令
3.3.2算术指令
3.3.3逻辑指令
3.3.4转移指令
3.3.5位操作指令
3.3.6伪指令
3.4MCS51单片机C51语言
3.4.1C51语言概述
3.4.2C51语言的程序结构、数据与存储类型
3.4.3C51语言的头文件与库函数
3.4.4C51语言中地址的访问
3.4.5C51语言编程方法
习题
第4章汇编语言程序设计
4.1汇编语言源程序汇编
4.2程序设计的基本步骤
4.3顺序程序的设计
4.4分支程序设计
4.4.1单分支程序
4.4.2多分支程序
4.5循环程序设计
4.5.1单循环
4.5.2多重循环
4.5.3按条件转移控制的循环
4.6查表程序设计
4.7子程序设计和调用
4.8应用控制流程设计
习题
第5章MCS51系列单片机的中断系统
5.1中断的概念
5.2中断源
5.3中断控制寄存器
5.4中断的优先级
5.5中断的响应
5.6由中断模块程序认知中断处理过程
5.6.1外部中断模块代码
5.6.2定时器中断模块代码
5.7通过实例掌握外部中断
习题
第6章MCS51系列单片机的定时器/计数器
6.1定时器/计数器的结构
6.1.1计数功能
6.1.2定时功能
6.2定时器/计数器的相关寄存器
6.2.1定时器/计数器的方式寄存器TMOD
6.2.2定时器/计数器的控制寄存器TCON
6.2.3中断允许寄存器IE
6.2.4中断优先级寄存器IP
6.3定时器/计数器的工作方式
6.4定时器/计数器的知识扩展
6.4.1定时器的溢出同步问题
6.4.2运行中读取定时器/计数器
6.4.3由定时器/计数器模块程序认知定时器/计数器处理过程
6.5通过实例掌握定时器(例程: 定时器与LED)
6.5.1采用中断处理方式的程序
6.5.2采用查询方式处理的程序
6.6通过实例掌握计数器(例程: 计数器与LED)
习题
第7章MCS51系列单片机的串行口
7.1串行通信的概念
7.2MCS51系列单片机串行口的结构
7.2.1串行口的结构
7.2.2串行口控制寄存器
7.2.3串行口的工作方式
7.2.4串行通信的波特率
7.3串行口通信
7.3.1双机通信
7.3.2多机通信
7.4通过实例掌握串行口通信(例程: PC控制数码管)
7.4.1硬件设计
7.4.2软件设计
7.4.3PC与单片机串行通信的实现
习题
第8章MCS51系列单片机系统扩展及实用I/O接口技术
8.1常用缓冲/驱动接口芯片介绍
8.1.1SN7407缓冲/驱动芯片
8.1.2达林顿晶体管阵列ULN2003A
8.1.3光电耦合器
8.1.4串行通信接口RS485
8.2开关量输入接口设计
8.2.1键盘接口
8.2.24×4矩阵键盘扫描实例
8.2.3继电器输入接口
8.2.4行程开关输入接口
8.2.5光电编码器输入接口
8.3开关量输出接口设计
8.3.1蜂鸣器输出接口
8.3.2继电器输出接口
8.3.3固态继电器输出接口
8.4液晶显示模块接口设计
8.4.1LCD的基本结构与驱动原理
8.4.2段式LCD
8.4.3点阵LCD
8.5常用A/D转换接口设计
8.5.1TLC2543与单片机接口实例
8.5.2ADC0832与单片机接口实例
8.5.3A/D转换器(TLC2543)应用实例
8.6常用D/A转换接口设计
8.6.1TLC5618与单片机接口实例
8.6.2MAX518与单片机接口实例
习题
第9章MCS51系列单片机开发流程
9.1总体方案设计
9.1.1系统功能要求
9.1.2硬件总体方案
9.1.3软件总体方案
9.2硬件和软件细分设计
9.2.1硬件设计
9.2.2软件设计及调试
9.3系统的仿真与调试
9.3.1Keil软件简介
9.3.2利用Keil进行程序调试
9.3.3Proteus软件使用简介
9.3.4利用Proteus绘制电路原理图
9.3.5在Proteus中调试程序
9.3.6Altium Designer简介
9.3.7利用Altium Designer设计电路板
9.4系统调试
9.4.1单片机应用系统的一般调试方法
9.4.2数码管显示系统调试
第10章常用单片机简介及应用举例
10.1STC15系列单片机
10.1.1STC15系列单片机简介
10.1.2STC15W4K32S4应用举例
10.2AVR系列单片机
10.2.1AVR系列单片机简介
10.2.2ATmega64单片机应用举例
10.3MSP430系列单片机
10.3.1MSP430系列单片机简介
10.3.2MSP430F149单片机应用举例
10.4Kinetis K60系列单片机
10.4.1Kinetis K60系列单片机简介
10.4.2MK60DN512ZVLQ10单片机应用举例
10.5STM32系列单片机
10.5.1STM32系列单片机简介
10.5.2STM32F103VET6单片机应用举例
第11章数字电子钟设计实例
11.1设计要求
11.2硬件设计
11.2.1按键电路设计
11.2.2时钟芯片DS1302的性能特点和工作原理
11.2.3时钟芯片DS1302与单片机的连接
11.2.4总体电路原理图
11.3软件设计
11.3.1显示子程序流程图
11.3.2显示子程序的代码
11.3.3主函数程序流程图
11.3.4总的汇编语言源程序代码
第12章LED阵列动态显示设计实例
12.1设计要求
12.2硬件设计
12.2.174HC595简介
12.2.2点阵LED简介
12.2.3总体电路原理图
12.3软件设计
12.3.1程序流程图
12.3.2源程序代码
第13章数字温度计设计实例
13.1设计要求
13.2硬件设计
13.2.1温度芯片DS18B20简介
13.2.2一线式总线的概念
13.2.3总体电路原理图
13.3软件设计
13.3.1DS18B20子程序流程图
13.3.2DS18B20子程序代码
13.3.3数码管串行方式显示子程序流程图
13.3.4数码管串行方式显示子程序代码
13.3.5主程序流程图
13.3.6整体源程序代码
第14章小型直流电动机驱动设计实例
14.1设计要求
14.2硬件设计
14.2.1L298N双H桥电动机驱动芯片
14.2.2L298N与单片机接口设计
14.2.3总体电路原理图
14.3软件设计
14.3.1单片机产生脉宽调制信号
14.3.2源程序代码
第15章步进电机驱动设计实例
15.1设计要求
15.2硬件设计
15.2.1步进电机概述
15.2.2TA8435步进电机专用驱动芯片
15.2.3TA8435细分驱动原理
15.2.4总体电路原理图
15.3软件设计
15.3.1程序流程图
15.3.2源程序代码
附录AASCII码字符表(常规字符集)
附录BMCS51系列单片机汇编指令表
参考文献
第1章
微型计算机基础知识
本章主要介绍微型计算机,特别是单片机的概念和组成,同时也对计算机中数据的表示方式进行系统的介绍,为读者以后的学习奠定一定的基础。在本章中,读者主要了解微型计算机与单片机的概念和组成,熟悉进位计数制、数值信息与非数值信息的表示方法,掌握不同进制之间的转换规则。
1.1微型计算机的组成一个完整的微型计算机系统包括两大部分,即硬件系统和软件系统。硬件是指构成计算机的物理设备,即由机械、电子器件构成的具有输入、存储、计算、控制和输出功能的实体部件。软件指的是为了管理、维护计算机以及为完成用户的某种特定任务而编写的各种程序的总和。1946年美籍匈牙利科学家冯 诺依曼提出存储程序原理,把程序本身当作数据来对待,程序和数据用同样的方式存储,并确定了存储程序计算机的五大组成部分和基本工作方法。这一组成结构与工作方法对计算机的发展有着不可磨灭的影响,一直沿用至今。将指令和数据同时存放在存储器中,是冯 诺依曼体系结构的主要特点。该体系结构的计算机应由控制器、运算器、存储器、输入设备、输出设备5部分组成。冯 诺依曼体系结构系统框图如图11所示。
图11冯 诺依曼体系结构系统框图
1. 运算器运算器又称算术逻辑单元(arithmetic logic unit,ALU),是计算机对数据进行加工处理的部件,它的主要功能是对二进制数码进行加、减、乘、除等算术运算和与、或、非等基本逻辑运算,实现逻辑判断。此外,它还能暂时存放运算的中间数据和结果。运算器在控制器的控制下实现其功能,运算结果由控制器指挥送到内存储器中。2. 控制器
单片机原理及应用教程(第2版)
第1章微型计算机基础知识
控制器主要由指令寄存器、译码器、程序计数器和操作控制器等组成。控制器是计算机中执行控制指令的部件,它的作用是使计算机各部件能够协调工作,并且保障整个处理过程有条不紊地进行。它的基本功能就是从内存中读取指令和执行指令,即控制器按程序计数器指出的指令地址从内存中取出该指令进行译码,然后根据该指令格式和功能向有关部件发出控制命令,并执行该指令。另外,控制器在工作过程中,还要接收各部件反馈回来的信息。通常,计算机内部会把运算器与控制器集成在一块芯片上,称为中央处理器(central processing unit,CPU)。微型计算机的CPU称为微处理器(microprocessor)。表征微型计算机运算速度的指标是CPU的主频,即CPU的时钟频率。一般来说,主频越高,微型计算机运算速度越快。3. 存储器存储器具有记忆功能,用来保存信息,如数据、指令和运算结果等。存储器由内存储器(主存储器)、外存储器(辅助存储器)与高速缓冲存储器组成。(1) 内存储器内存储器简称主存或内存,它直接与CPU相连接,存储容量较小,但速度快,用来存放当前运行程序的指令、原始数据、中间数据与结果,并直接与CPU交换信息。计算机在执行程序时,CPU会自动而连续地从内存储器中取出要执行的指令,并执行指令规定的操作。就是说,计算机每完成一条指令,至少有一次为了取指令而访问内存储器的操作。在微型计算机中,通常用半导体存储器作为内存储器。内存储器由许多存储单元组成,每个单元能存放一个二进制数,或一条由二进制编码表示的指令。为了便于对存储器进行访问,存储器的存储容量以字节为基本单位,每个字节都有自己的编号,称为地址,如要访问存储器中的某个信息,就必须知道它的地址,然后再按地址存入或取出信息。内存按功能可分为两种: 只读存储器(read only memory,ROM)和随机存取存储器(random access memory,RAM)。ROM中存储的信息只能被读取,不能被写入,断电后信息不会丢失,一般用来存放专用或固定的程序和数据,如系统引导程序等。RAM中的数据可读可写,用于存放将要被CPU执行的用户程序、数据以及部分系统程序,断电后存储的内容丢失。(2) 外存储器外存储器简称外存,又称辅助存储器,它是内存的扩充,通常是磁性介质或光盘,像硬盘、软盘、U盘、磁带、CD等,能长期存储信息,且不需要保持供电,读写速度与内存储器相比慢很多。外存的存储容量大,价格低,但存储速度较慢,一般用来存放大量暂时不用的程序、数据和中间结果,需要时,可成批地与内存储器进行信息交换。外存只能与内存交换信息,不能被计算机系统的其他部件直接访问。(3) 高速缓冲存储器高速缓冲存储器(cache)是存在于主存储器与CPU中央处理器之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小,但读写速度远高于内存的读写速度、接近于CPU的读写速度。它的出现是为了解决内存读写速度与CPU处理速度的不匹配所导致的系统运行速度慢的问题。CPU访问指令和数据时,先访问高速缓存,如果目标内容已在高速缓存中(这种情况称为命中),CPU将直接从高速缓存中读取数据,否则CPU将从主存中读取,同时将读取的内容存于高速缓存中。高速缓存可看成是主存中面向CPU的一组高速暂存存储器,这种技术使微机的性能大幅度提高。某些机器中设计了二级,甚至三级缓存,每级缓存比前一级缓存速度慢且容量大。CPU可以在全速运行的状态下读取存放在一级高速缓存中的指令或数据。如果在一级缓存中没有找到所需要的指令或数据,处理器会查看容量更大的二级缓存。二级缓存既可以被集成到CPU芯片内部,也可以作为外部缓存。4. 输入/输出设备输入/输出设备简称I/O(input/output)设备,也称作外设。外设的种类很多,有机械式、电子式、机电式、光电式等,一般来说,与CPU相比,外设的工作速度较低。外设处理的信息有数字量、模拟量、开关量等,而计算机只能处理数字量。另外,外设与计算机工作的逻辑时序也可能不一致。由于上述原因,计算机与外设之间的连接及信息的交换不能直接进行,而需要设计一个I/O接口作为计算机与外设之间的桥梁。用户通过输入设备将程序和数据输入计算机,输出设备将计算机处理的结果(如数字、字母、符号和图形)显示或打印出来。计算机常用的输入设备有键盘、鼠标、扫描仪、A/D转换器等,程序、数据及现场信息要通过输入设备输入给计算机。微机常用的输出设备有显示器、打印机、绘图仪、D/A转换器等,计算机的处理结果要通过输出设备输出,以便用户使用。5. 总线计算机的各硬件资源通过接口与总线连接而组成系统。总线是计算机中各功能部件间传送信息的公共通道,是微型计算机的重要组成部分。所有硬件设备之间的通信都需要经过总线,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。微型计算机是以总线结构来连接各个功能部件的。根据所传送信息内容与作用的不同,总线可分为地址总线、数据总线与控制总线3类,分别用来传输地址、数据和控制信号,这3种总线统称为系统总线。(1) 地址总线地址总线(address bus)用于传送地址,由于寻址操作只能由CPU向存储器或I/O端口进行,所以地址总线是单向总线。CPU需要对存储器或I/O端口进行访问时,首先需要在地址总线上传送出要访问存储单元或I/O端口的地址信息,选中要访问的存储单元或I/O端口,以便进行之后的数据传输。地址总线的位数决定了CPU可直接寻址的内存空间大小。例如,8086系列微处理器的地址总线为20位,可寻址空间为220=1M。(2) 数据总线数据总线(data bus)用于从存储器取指令或读写数据。数据总线是双向三态形式的总线,既可以通过数据总线把CPU的数据传送到存储器或I/O接口等部件,也可以将其他部件的数据传送到CPU。数据总线的位数是微型计算机的一个重要指标,通常与微处理器的字长相一致。例如8086系列微处理器字长16位,其数据总线宽度也是16位。需要指出的是,数据总线中传输的“数据”是广义的,它可以是真正的数据,也可以是指令代码、状态信息或者控制信息。常见的数据总线种类有ISA、EISA、VESA、PCI等。在一些系统中,数据总线和地址总线是分时复用的,即总线根据控制信号的不同,在某些时候作为数据总线而在其他情况下用作地址总线。例如,在MCS51系列单片机中,地址总线和数据总线就是分时复用的。(3) 控制总线控制总线(control bus)用于传送各种控制或状态信息。这些控制信息中,有些需要从微处理器送往存储器和I/O接口电路,如读/写信号、片选信号、中断响应信号等; 有些需要从其他部件反馈给CPU,如中断申请信号、复位信号、总线请求信号、设备就绪信号等。因此,控制总线一般是双向的,其具体传送方向由具体控制信号决定。
1.2计算机中数据的表示方法1.2.1进位计数制
进位计数制是利用固定的数字符号和统一的规则来计数的科学方法。在计算机中,任何信息必须转换成二进制形式数据后才能由计算机进行处理、存储和传输。在计算机中常用的数制有二进制、十进制与十六进制。为了区分不同进制的数,我们在书写时用( )数制表示不同进制的数。例如,用( )10表示十进制数,用( )2表示二进制数。在计算机中,为了区分不同的数制,通常在数字的后面加上数制的英文首字母以表示该数的进制。如二进制(binary)的首字母b、十进制(decimal)的首字母d以及十六进制(hexadecimal)的首字母h。在进位计数制中有数位、基数和位权三个要素。数位是指数码在一个数中所处的位置。基数是指在某种进位计数制中,每个数位上所能使用的数码的个数。对于多位的数,处在某一位上的1所表示的数值的大小,称为该位的位权。例如,二进制第2位的位权为21,第3位的位权为22。二进制是计算机中最基本的一种数制。二进制数据是用0和1两个数码来表示的数,进位规则为逢二进一。而逻辑电路的两个状态恰好可以用1和0表示。二进制计数适合逻辑运算,可以简化运算规则,提高运算速度,同时也易于与十进制、十六进制进行转换。十进制是我们日常生活中最常用的数制,也是我们在编写程序代码时习惯使用的数制。十进制是由十个数码0~9来表示的数,其基数为10,逢十进一。虽然在计算机中使用二进制可以更直观地解决问题,但二进制数的缺点是数据位数太多。例如,占用2字节的整型变量(0~65535)使用二进制表示时将会有16位数据。为了缩短数据的表达长度,我们使用十六进制对计算机中的数进行表达,这样不仅缩短了二进制数,同时也保留了二进制数的表达特点。
1.2.2数制间的相互转换计算机不能直接处理非二进制数的数据,必须先把数据转化成二进制数才能被计算机所接受。计算机直接计算出的结果也为二进制数,需要转换成十进制数才便于用户阅读。这就要求我们在不同进制数之间进行转换。1. 十进制数与二进制数之间的转换把一个十进制整数转换为二进制整数,只需把被转换的十进制整数反复地除以2,直到商为0,所得的余数的逆序就是这个数的二进制表示,这种方法也叫除2取余法。例11将(218)10转换成二进制整数。将(218)10转换成二进制整数的过程如图12所示。
图12十进制整数转换为二进制整数的过程
即(218)10=(1101 1010)2。把一个十进制小数转换为二进制小数,其整数部分的转换规则与整数的转换相同,而对其小数部分需要连续乘2,直到满足精度要求为止,,把每次所进位的整数,按从上往下的顺序写出,这种方法简称乘2取整法。例12将十进制小数(0.7782)10转换为四位二进制小数。0.7782×2=1.55640.5564×2=1.11280.1128×2=0.22560.2256×2=0.4502即(0.7782)10=(0.1100)2。把一个二进制数转换为十进制数只需将二进制数按权展开即可。例13将二进制数(1101.0010)2转换为十进制数。(1101.0010)2=1×23 1×22 0×21 1×20 0×2-1 0×2-2 1×2-3 0×2-4=(13.125)10
2. 二进制数与十六进制数之间的转换由于二进制数和十六进制数之间存在对应关系,即每4位二进制数对应1位十六进制数,因此二者之间的转换非常便捷。二进制数转换为十六进制数的方法是,将二进制数从小数点开始,整数部分从右向左4位一组,小数部分从左向右4位一组,不足四位用0补足,每组对应一位十六进制数即可得到十六进制数。同理,十六进制数转换成二进制数只需以小数点为界,向左或向右每一位十六进制数用相应的四位二进制数取代,然后将其连在一起即可。例14将以下十六进制数转换为二进制数。(3100) 16=(0011 0001 0000 0000)2(1AFF.F1)16=(0001 1010 1111 1111.1111 0001)2例15将以下二进制数转换为十六进制。(1011 0011)2=(B3)16(1100 0011.1111 0010)2=(C3.F2)16
1.2.3二进制数的运算1. 二进制数的算术运算
二进制数的算术运算与十进制的算术运算一样,包括了加、减、乘、除四则运算,计算方法也大致相同,区别在于: 十进制加法是“逢十进一”,而二进制加法为“逢二进一”; 十进制减法是“借一得十”,二进制减法则是“借一得二”。二进制数乘、除法过程也可仿照十进制数的乘、除法进行。2. 二进制数的逻辑运算逻辑运算也称为布尔运算,包括与、或、非3种基本逻辑运算以及这3种运算组合而成的或非、与非、同或、异或逻辑。(1) 逻辑与(AND)运算也称逻辑乘,运算符为 或∧。其逻辑为: 只有输入都为高电平时,输出才是高电平。与逻辑表达式为F=A∧B。运算规律如下: 0∧0=00∧1=01∧1=1(2) 逻辑或(OR)运算也称逻辑加,运算符为 或∨。其逻辑为: 只要输入中有一个或一个以上为高电平,输出便为高电平。或逻辑表达式为F=A∨B。运算规律如下: 0∨0=00∨1=11∨1=1(3) 逻辑非(NOT)运算的逻辑关系是: 输出与输入的电平相反。非逻辑表达式为F=。运算规律如下: 0=11=0(4) 逻辑异或(XOR)是常用的复合逻辑,由或运算和非运算组合而成,即: 当两个输入电平相同时,输出为低电平; 当两个输入电平不同时,输出为高电平。异或的逻辑表达式为A⊕B=B A。运算规律如下: 0⊕1=11⊕1=00⊕0=01.2.4数值数据的表示数值可分为有符号数(整数)和浮点数两大类,有符号数又可分为正数和负数。由于计算机内只能进行二进制运算,有符号数与浮点数需要在计算时以二进制的形式表示。1. 有符号数的表示由于计算机只能识别0和1,因此,我们通常在表示一个二进制无符号数时,将其较高位用作符号位来表示这个数的正负,并规定符号位为0时表示正,为1时表示负。在无符号数中,所有二进制位全部用来表示数的大小。而有符号数的较高位为符号位,其余位为数值位,表示数的大小。这种把一个数及其符号位在机器中用一组二进制数来表示的形式,称为机器数。机器数所表示的值为该数的真值。常用的机器数有原码、补码、反码3种。如果用一个字节来表示无符号数,其取值范围是0~255; 表示一个有符号数,其取值范围是-128~127。(1) 原码正数的符号位用0表示,负数的符号位用1表示,数值部分用真值的值来表示的二进制机器数称为原码。例如,18的原码为0001 0010,-20的原码为1110 1100。原码表示直观,与真值转换很方便,但是不便于进行加减运算。(2) 反码正数的反码与原码相同,负数的反码为原码除符号位外按位求反。例如,18的反码与原码相同,为0001 0010,-20的反码为1001 0011。反码一般是作为求补码的中间过程。(3) 补码正数的补码与其原码和反码相同,负数的补码为其反码加1。例如,18的补码为0001 0010,-20的补码为1001 0100。在计算机中最常用的运算为加减运算,能否快速地进行加减运算决定了计算机的运行效率。计算机在进行加减运算时,如果遇到了数据已是能表示的较大值,但仍需加1的情况,较高位将产生进位。如果该数据是一个字节型数据,进位的值28=256将被丢失,这种运算称为按模运算。其中,模指的是一个系统的量程,在计算机中指的是变量能表达的较大的数。例如,要将指针式钟表的时针从11点拨向6点,可以正拨7格或者反拨5格。按模运算可以使正数加负数转化成正数加正数,并得到正确的结果。负数的补码即是该数的原码加上模,即对原码除符号位按位取反后再加1。补码的加减运算即是其原码的按模运算。引入补码后,计算机进行加减运算的效率可以大大提高。例16写出字节型数据(5f)16、(-100)10的原码、反码与补码。(5f)16=(0101 1111)2,原码: 0101 1111,反码: 0101 1111,补码: 0101 1111(-100)10=(1001 1100)2,原码: 1001 1100,反码: 1110 0011补码: 1110 01002. 浮点数的表示实数一般用浮点数表示,因为它的小数点位置不固定,所以称为浮点数。它是包括了整数部分与小数部分的数。在数学计算中,通过科学记数法,我们可以将一个数表示为a×10n的形式。在计算机中浮点数的存储方式也是如此。当我们要存储或运算某个较大或较小且位数较多的浮点数时,用科学记数法可以节省许多存储空间。在计算机中存放的浮点数由指数(阶码)和尾数两部分组成,其存储形式如下:
阶符阶码数符尾数
其中,尾数表示数值的有效数字,小数点约定在尾数之前; 阶码用来指示尾数中的小数点应当向左或向右移动的位数; 阶符和数符分别是阶码与尾数的符号位。例如,101.01可表示为23×0.10101,它计算机中的存储形式为:
011010101
3. BCD码(二十进制编码)BCD(binary code decimal)码是用若干个二进制数表示一个十进制数的编码,BCD码有多种编码方法,常用的有8421码。8421码是将十进制数码0~9中的每个数分别用4位二进制编码表示,从左至右每一位对应的数是8、4、2、1,这种编码方法比较直观、简要。对于多位数,只需将它的每一位数字按对应关系用8421码直接列出即可。BCD码与二进制之间不可直接转换,而是要先将BCD码表示的数按四位一组转换成十进制数,再将十进制数转换成二进制数。表11是十进制数0~9的8421 BCD编码表。
表11十进制数0~9的8421 BCD编码表
十进制数8421 BCD码十进制数8421 BCD码
0000010001200103001140100
5010160110701118100091001
例17将以下十进制数转换为BCD码。(2016) 10=(0010 0000 0001 0110)BCD(1988.34)10=(0001 1001 1000 1000.0011 0100)BCD例18将以下BCD码数转换为二进制数。(1001 0110 0011)BCD=(963)10=(11 1100 0011)2(0101 0101.0101)BCD=(55.5)10=(11 0111.1)21.2.5非数值数据的表示1. ASCII码
计算机并不能直接处理非数值的文字与符号,而是要先将其进行数字化处理,即用二进制编码来表示文字和符号。目前计算机中普遍采用的字符编码是ASCII(american standard code for information interchange)码,即美国信息交换标准代码。7位版本的ASCII码有128个字符,使用7个二进制位(27=128)表示,其中控制字符34个,阿拉伯数字10个,大小写英文字母52个,各种标点符号和运算符号32个。在计算机中实际用8位表示一个字符,较高位为0。常用的ASCII码见表12。附录A列出了全部128个符号的ASCII码。
表12常用的ASCII码
ASCII码字符ASCII码字符ASCII码字符
30H041HA61Ha31H142HB62Hb38H859HY69Hy39H95AHZ6AHz
2. 汉字码汉字也是字符,与西文字符比较,汉字数量大、字形复杂、同音字多,这就给汉字在计算机内部的存储、传输、交换、输入、输出等带来了一系列的问题。为了能直接使用西文标准键盘输入汉字,必须为汉字设计相应的编码,以适应计算机处理汉字的需要。常用的汉字码有国标码、机内码与字形码。(1) 国标码1980年我国颁布了国家标准《信息交换用汉字编码字符集基本集》(GB 2312—1980),是国家规定的用于汉字信息处理使用的代码依据,这种编码称为国标码。在国标码的字符集中共收录了6763个常用汉字和682个非汉字字符(图形、符号),其中一级汉字3755个,以汉语拼音为序排列,二级汉字3008个,以偏旁部首进行排列。但考虑到汉字编码与其他国际通用编码,如ASCII码的兼容,国标采用了加以修正的两字节汉字编码方案: 只用两个字节的低7位,即较高位为0; 每个字节中都不能出现ASCII码中的34个控制功能码,即每个字节只能有94个编码。国家标准GB 2312—1980规定,所有的国标汉字与符号组成一个94×94的矩阵,在此方阵中,每一行称为一个“区”(区号为01~94),每一列称为一个“位”(位号为01~94),该方阵实际组成了一个94个区,每个区内有94个位的汉字字符集,每一个汉字或符号在码表中都有一个的位置编码,叫做该字符的区位码。使用区位码方法输入汉字时,必须先在表中查找汉字并找出对应的代码,才能输入。区位码输入汉字的优点是无重码,而且输入码与内部编码的转换方便。(2) 机内码汉字的机内码是计算机系统内部对汉字进行存储、处理、传输统一使用的代码,又称为汉字内码。同国标码一样,汉字的机内码也需要两个字节来存放。国标码是汉字信息交换的标准编码,但国标码的各字节的较高位均为0,直接存储将会与ASCII码产生冲突。于是,汉字的机内码采用变形国标码,其变换方法为: 将国标码的每个字节较高位由0改1,其余7位不变。(3) 字形码每一个汉字的字形都必须预先存放在计算机内,GB 2312—1980的所有字符的形状描述信息集合在一起,称为字形信息库,简称字库。字库通常分为点阵字库和矢量字库。在计算机中常用的汉字显示方式是点阵式,即用点阵表示的汉字字形代码。根据汉字输出精度的要求,可以有不同密度点阵,如16×16点阵、32×32点阵等。汉字字形点阵中每个点的信息用一位二进制码来表示,1表示对应位置处是黑点,0表示对应位置处是空白。字形点阵的信息量很大,所占存储空间也很大,例如16×16点阵每个汉字就要占32个字节,因此字形点阵只能用来构成“字库”,而不能用来存储。字库中存储了每个汉字的字形点阵代码,不同的字体对应着不同的字库。在输出汉字时,计算机要先到字库中去找到它的字形描述信息,然后再把字形送去输出。1.3单片机概述1.3.1单片机的基本结构
单片机(microcontroller)就是把中央处理器、存储器、输入/输出端口等基本部件微型化并集成到一块芯片上的微型计算机,只要再配置几个小器件,如电阻、电容、石英晶体、连接器等,即成为完整的微型计算机系统。图13所示为MCS51系列单片机的基本组成示意图。从图中可以看出,单片机虽然只是一个芯片,但一般计算机的基本部件它都有,因此单片机实际上就是一个简单的微型计算机。
图13MCS51系列单片机组成示意图
随着单片机的发展,现在的单片机芯片中都着力扩展了各种控制