1、第1章 单片机基础知识U 难点 单片机的概念及组成 单片机的特点及应用领域 计算机中数据的表示方法及其运算过程 要求 掌握 微处理器、微机、微机系统的概念 典型的单片机产品系列及各系列之间的区别 单片机系统的一般开发过程 计算机中数据的表示方法及其运算过程 了解 微型计算机的基本工作过程 ATMEL公司单片机系列 单片机系统的应用方向 1.1 微型计算机的组成及工作原理 1.2 典型单片机产品简介 1.3 单片机的应用模式 1.4 单片机的应用 1.5 数制与编码 1.6 计算机数值数据表示与运算 1.1 微型计算机的组成及工作原理1.1.1 微型计算机中的基本概念 1. 微处理器(Micro
2、processor) 微处理器通常指中央处理器,简写为CPU。它由算术逻辑运算部件(ALU)、寄存器、程序计数器、控制器、内部总线等组成。它采用大规模集成电路(LSI)和超大规模集成电路(VLSI)制作,具有体积小、功能强等特点。 典型的微处理器有Intel公司的80X86和Pentium系列,Zilog公司的Z系列,Motorola公司的M6800系列,IBM公司的PowerPC604和PC620,以及NEC公司的UPD78系列等。不同类型的CPU其特性不尽相同,如指令系统、运算速度、内部寄存器、存储寻址能力等,这些特性在微机应用系统设计选型中常常涉及。 2. 微型计算机 微型计算机又简称微
3、机,从结构上分析,以CPU为中心,再配置上RAM、ROM、输入输出接口和总线便构成了微机。微型计算机具有运算、存储和与外部设备进行数据交换等功能,还可配有适当的外部设备,如键盘、显示器等。微型计算机的这一灵活的应用特点,是目前应用最广泛的。概括地说,微型计算机可分为单片微处理机和通用微型计算机两大类。 (1)单片微处理机 单片微处理机就是把CPU、存储器、定时器/计数器和输入输出接口等部件都集成在一个电路芯片上,并具备一套功能完善的指令系统,有的型号的单片微处理机同时还具备数/模和模/数转换等功能部件。通常这些高性能的芯片都能应用在不同场合独立地处理程序,故简称单片机或单片处理机。 典型的单片
4、处理机有Intel公司的MCS-51、MCS-96系列,Motorola公司的MC68HC11,Rockwell公司的65系列等。有些高性能的单片机还支持高级语言,它们广泛应用在家用电器、智能化仪器和工业控制等领域。 (2)通用微型计算机 将不同用途的外设接口设计为独立的适配卡作为微机的接口配件,在微机内则采取总线插槽的形式,为外部设备提供总线接口。这样,在一台基本主机上就可以根据应用的要求,配置不同用途的外部设备。这种微机被称为通用微型计算机。 3. 微型计算机系统 在通用微型计算机上配上相应的软件系统,就构成了能适应不同应用要求的微型计算机系统。因此,在科学计算、企业管理、家庭和娱乐等方面
5、得到了广泛应用。 1.1.2 微机基本结构 微型计算机的基本组成如图1-1所示,它由中央处理器(CPU)、存储器(Memory)、输入输出接口(I/O接口)和系统总线(BUS)构成。 图1-1 微型计算机的基本组成1.1.3 微型计算机的基本工作过程 每种型号的CPU都有自己的指令系统,每条指令一般由指令操作码(规定指令的操作类型)和操作数(规定指令的操作对象)两部分组成。用户根据要完成的任务预先编好程序,再通过输入设备(如键盘)将程序送入存储器中。微型计算机开始工作后,首先将该程序在存储器中的起始地址送入微处理器中的程序计数器(PC)中,微处理器根据PC中的地址值找到对应的存储单元,并取出存
6、放在其中的指令操作码送入微处理器中的指令寄存器(IR)中,由指令译码器(ID)对操作码进行译码,并由微操作控制电路发出相应的微操作控制脉冲序列去取出指令的剩余部分(如果指令不止1个字节的长度),同时执行指令赋予的操作功能。在取指过程中,每取出1个单元的指令,PC自动加1,形成下一个存储单元的地址。以上为一条指令的执行过程,如此不断重复上述过程,直至执行完最后一条指令为止。 综上所述,微型计算机的基本工作过程是执行程序的过程,也就是CPU自动从程序存放的第1个存储单元起,逐步取出指令、分析指令,并根据指令规定的操作类型和操作对象,执行指令规定的相关操作。如此重复,周而复始,直至执行完程序的所有指
7、令,从而实现程序的基本功能,这就是微型计算机的基本工作原理。1.2 典型单片机产品简介 1.2.1 MCS-51单片机系列 MCS-51系列单片机是Intel公司在1980年推出的高性能8位单片机,在目前单片机市场中,8位单片机仍占主导地位。MCS-51系列单片机以其良好的性能价格比,仍是目前单片机开发和应用的主流机型。 MCS-51可分为两个子系列和4种类型,如表1-1所示。按资源的配置数量,MCS-51系列分为51和52两个子系列,其中51子系列是基本型,而52子系列属于增强型。 表1-1 MCS-51系列单片机分类 80C51单片机系列是在MCS-51系列的基础上发展起来的。早期的80C
8、51只是MCS-51系列众多芯片中的一类,但是随着后来的发展,80C51已经形成独立的系列,并且成为当前8位单片机的典型代表。 l 80C51与8051的比较 (1)MCS-51系列芯片采用HMOS工艺,而80C51芯片则采用CHMOS工艺。CHMOS工艺是COMS和HMOS的结合,(2)80C51芯片具有COMS低功耗的特点。例如8051芯片的功耗为630mW,而80C51的功耗只有120mW,这样低的功耗,用一粒纽扣电池就可以工作。低功耗对单片机在便携式、手提式或野外作业的仪器仪表设备上使用十分有利。 (3)从80C51在功能增强方面分析,主要在以下几个方面做了增强。首先,为进一步降低功耗
9、,80C51芯片增加了待机和掉电保护两种工作方式,以保证单片机在掉电情况下能以最低的消耗电流维持。 (4)此外,在80C51系列芯片中,内部程序存储器除了ROM型和EPROM型外,还有E2PROM型,例如89C51就有4KB E2PROM。并且随着集成技术的提高,80C51系列片内程序存储器的容量也越来越大,目前已有64KB的芯片了。另外,许多80C51芯片还具有程序存储器保密机制,以防止应用程序泄密或被复制。 1.2.2 MCS-96系列单片机 MCS-96系列单片机是Intel公司在1983年推出的16位单片机,它与8位机相比,具有集成度高、运算速度快等特点。它的内部除了有常规的I/O接口
10、、定时器计数器、全双工串行口外,还有高速I/O部件、多路AD转换和脉宽调制输出(PWM)等电路,其指令系统比MCS-51更加丰富。 MCS-96系列单片机的主要性能如表1-2所示。 表1-2 MCS-96系列单片机主要性能 1.2.3 ATMEL公司单片机 ATMEL公司于1992年推出了全球第一个3V超低压F1ash存储器,并于1994年以E2PROM技术与Intel公司的80C31内核进行技术交换,从此拥有了80C31内核的使用权,并将ATMEL特有的Flash技术与80C31内核结合在一起,生产出AT89C51系列单片机。 ATMEL公司的AT89C51系列单片机均以MCS-51系列单片
11、机作为内核,同时,该系列的各种型号的产品又具有十分突出的个体特色,已经成为广大MCS-51系列单片机用户进行电子设计与开发的优选单片机品种,表1-3列出了AT89C51系列单片机的主要性能。 表1-3 AT89C51系列单片机主要性能 AT89C51系列单片机是一种低功耗高性能CMOS型8位单片机,它除了具有与MCS-51系列单片机完全兼容的若干特性外,最为突出的优点就是其片内集成了4KB的F1ashPEROM(Programmable Erasable Read Only Memory)用来存放应用程序,这个Flash程序存储器除允许用一般的编程器离线编程外,还允许在应用系统中实现在线编程,
12、并且还提供了对程序进行三级加密保护的功能。AT89C51系列单片机的另一个特点是工作速度更高,晶振频率可高达24MHz,1个机器周期仅500ns,比MCS-51系列单片机快了1倍。AT89C51系列单片机除了40脚DIP封装品种外,还提供了TQFP、SOIC和PQFP等多种封装形式的产品,它同时提供商业级、工业级、汽车用产品和军用级等四类产品。1.3 单片机的应用模式1.3.1 单片机应用系统的结构单片机应用系统的结构通常分为以下三个层次。(1)单片机:通常指应用系统主处理机,即所选择的单片机器件。(2)单片机系统:指按照单片机的技术要求和嵌入对象的资源要求而构成的基本系统。时钟电路、复位电路
13、和扩展存储器等与单片机共同构成了单片机系统。(3)单片机应用系统:指能满足嵌入对象要求的全部电路系统。在单片机系统的基础上加上面向对象的接口电路,如前向通道、后向通道、人机交互通道(键盘、显示器、打印机等)和串行通信口(RS232)以及应用程序等。单片机应用系统三个层次的关系如图1.2所示。图1.2 单片机应用系统三个层次的关系1.3.2 单片机系统的开发过程通常开发一个单片机系统可按以下6个步骤进行。(1) 明确系统设计任务,完成单片机及其外围电路的选型工作。(2) 设计系统原理图和PCB板,经仔细检查PCB板后送工厂制作。(3) 完成器件的安装焊接。(4) 根据硬件设计和系统要求编写应用程
14、序。(5) 在线调试软硬件。(6)使用编程器烧写单片机应用程序,独立运行单片机系统。1.4 单片机的应用单片机具有体积小、重量轻、价格便宜、功耗低、控制功能强、运算速度快、控制灵活、抗干扰能力强、电源电压范围宽等特点,故在国民经济建设、军事及家用电器、自动测控系统、智能仪表、机器人等领域均得到了广泛的应用。 根据目前的情况,单片机的应用大致可分成以下几类:1.单片机在机、电、仪一体化等智能产品中的应用 单片机具有小巧、低功耗、控制功能强的优点。把它做到产品的内部,取代部分电子元器件,可使产品体积缩小,功能增强,实现不同程度的智能化,这是其它任何计算机无法比拟的。=日常生活中含单片机的电器产品电
15、子秤、便携式心率监护仪、中频电疗仪、高级玩具、电视机、洗衣机、电冰箱、电磁炉、微波炉、空调、家用防盗报警器等产品中都有单片机的用武之地。=智能化的仪器仪表这是国内目前应用单片机最多、最活跃的领域。在各类仪器仪表中(包括温度、湿度、流量、流速、电压、频率、功率、厚度、角度、长度、硬度、元素测定等),引入单片机,使仪器仪表数字化、智能化、微型化,功能大大提高。如:精密数字温度计、湿度控制仪、智能流量监测控制仪、便携式流速仪、频率计、智能电度表、智能示波器、智能转速数字显示、黑匣子等。2.单片机在工业测控中的应用 单片机I/O线多,位指令丰富,逻辑操作能力强,特别适用于实时控制,既可作单机控制,又可
16、作多级控制的前沿处理机,应用领域相当广泛。如:汽车工业中的应用(点火控制、反锁、牵引、转向、防盗等方面控制)、液压机的控制、报警系统中的应用、烟叶水份测量仪、水电厂单元微机监控系统、啤酒生产线、汽车生产线、集体供暖锅炉自动控制、数控机床等方面。3.单片机在通信技术中的应用 比较高档的单片机都具有通信接口,为单片机在计算机网络与通信设备中的应用创造了很好的条件。如:在通信中完成频率合成、系统监控、信道搜索及自动调谐等任务、无线遥控、调制解调器、移动电话、程控交换技术、电话自动分路器等方面。 1.5 数制与编码1.5.1 数制的表示1.常用数制 在日常生活中人们最熟悉的是十进制数,但在计算机中,采
17、用二进制数“0”和“1”可以很方便的表示机内的数据与信息。(1)十进制数 我们熟悉的十进制数有两个主要特点: 有十个不同的数字符号:0、1、2、9; 低位向高位进、借位的规律是“逢十进一”“借一当十”的计数原则进行计数。 例如:1234.45=1103210231014100410-1510-2式中的10称为十进制数的基数, 103、102、101、100、10-1称为各数位的权。十进制数用D结尾表示。 (2)二进制数 在二进制中只有两个不同数码:0和1,进位规律是“逢二进一”“借一当二”的计数原则进行计数。二进制数用B结尾表示。例如,二进制数11011011.01可表示为(11011011.
18、01)2=12712602512412302212112002-112-2(3)八进制数 在八进制中有0、1、2、7八个不同数码,采用“逢八进一”“借一当八”的计数原则进行计数。八进制数用Q结尾表示。 例如,八进制数(503.04)Q可表示为(503.04)Q=582+081+380+08-1+48-2(4)十六进制数 在十六进制中有0、1、2、9、A、B、C、D、E、F共十六个不同的数码,采用“逢十六进一”“借一当十六”的计数原则进行计数。十六进制数用H结尾表示。 例如十六进制数(4E9.27)H可表示为(4E9.27)H=4162141619160216-1716-2 2不同进制数之间的相
19、互转换 表1-4列出了二、八、十、十六进制数之间的对应关系,熟记这些对应关系对后续内容的学习会有较大的帮助。 表1-4 各种进位制的对应关系 十进制 二进制 八进制 十六进制 十进制 二进制 八进制 十六进制 0 0 0 0 9 1001 11 9 1 1 1 1 10 1010 12 A 2 10 2 2 11 1011 13 B 3 11 3 3 12 1100 14 C 4 100 4 4 13 1101 15 D 5 101 5 5 14 1110 16 E 6 110 6 6 15 1111 17 F 7 111 7 7 16 10000 20 10 8 1000 10 8 17 1
20、0001 21 11 (1)二、八、十六进制数转换成为十进制数 根据各进制的定义表示方式,按权展开相加,即可转换为十进制数。 【例1-1】将(10101)B,(72)Q,(49)H转换为十进制数。(10101)B=124023122021120=37(72)Q=781+280=58(49)H=41619160=73 (2)十进制数转换为二进制数 十进制数转换二进制数,需要将整数部分和小数部分分开,采用不同方法进行转换,然后用小数点将这两部分连接起来。 整数部分:除2取余法。 具体方法是:将要转换的十进制数除以2,取余数;再用商除以2,再取余数,直到商等于0为止,将每次得到的余数按倒序的方法排列
21、起来作为结果。 【例1-2】将十进制数25转换成二进制数 小数部分:乘2取整法。 具体方法是:将十进制小数不断地乘以2,直到积的小数部分为零(或直到所要求的位数)为止,每次乘得的整数依次排列即为相应进制的数码。最初得到的为最高有效数位,最后得到的为最低有效数字。 【例1-3】将十进制数0.625转换成二进制数。 【例1-4】将十进制数25.625转换成二进制数,只要将上例整数和小数部分组合在一起即可,即(25.625)D=(11001.101)B例如:将十进制193.12转换成八进制数。 (3) 二进制与八进制之间的相互转换 由于23=8,故可采用“合三为一”的原则,即从小数点开始向左、右两边
22、各以3位为一组进行二-八转换:若不足3位的以0补足,便可以将二进制数转换为八进制数。反之,每位八进制数用三位二进制数表示,就可将八进制数转换为二进制数。 【例1-5】将(10100101.01011101)2转换为八进制数。 即 (10100101.01011101)B =(245.272)Q 【例1-6】将(756.34)Q转换为二进制数。 7 5 6 . 3 4 111 101 110 . 011 100即 (756.34)Q=(111101110.0111)B (4) 二进制与十六进制之间的相互转换 由于24=16,故可采用“合四为一”的原则,即从小数点开始向左、右两边各以4位为一组进行
23、二十六转换,若不足4位的以0补足,便可以将二进制数转换为十六进制数。反之,每位十六进制数用四位二进制数表示,就可将十六进制数转换为二进制数。 【例1-7】将(1111111000111.100101011)B转换为十六进制数。 0001 1111 1100 0111 . 1001 0101 1000 1 F C 7 . 9 5 8即 (111111000111.100101011)B =(1FC7.958)H 【例1-8】将(79BD.6C)H转换为二进制数。7 9 B D . 6 C 0111 1001 1011 1101 . 0110 1100即 (79BD.6C)H=(111100110
24、111101.011011)B 1.5.2 常用的信息编码 1.二十进制BCD码(Binary-Coded Decimal) 二十进制BCD码是指每位十进制数用4位二进制数编码表示。由于4位二进制数可以表示16种状态,可丢弃最后6种状态,而选用00001001来表示09十个数符。这种编码又叫做8421码。见表1-5所示。 表1-5 十进制数与BCD码的对应关系 十进制数 BCD码 十进制数 BCD码 0 0000 10 00010000 1 0001 11 00010001 2 0010 12 00010010 3 0011 13 00010011 4 0100 14 00010100 5 0
25、101 15 00010101 6 0110 16 00010110 7 0111 17 00010111 8 1000 18 00011000 9 1001 19 00011001 【例1-9】将69.25转换成BCD码。 6 9 . 2 5 0110 1001 . 0010 0101 结果为69.25=(01101001.00100101)BCD 【例1-10】将BCD码100101111000.01010110转换成十进制数。 1001 0111 1000 . 0101 01109 7 8 . 5 6 结果为(100101111000.01010110)BCD=978.56 2.字符编码
26、(ASCII码) 计算机使用最多、最普遍的是ASCII(American Standard Code For Information Interchange)字符编码,即美国信息交换标准代码,如表1.6所示。 ASCII码的每个字符用7位二进制数表示,其排列次序为d6d5d4d3d2d1d0, d6为高位,d0为低位。而一个字符在计算机内实际是用8位表示。正常情况下,最高一位d7为“0”。7位二进制数共有128种编码组合,可表示128个字符,其中数字10个、大小写英文字母52个、其他字符32个和控制字符34个。 表1-6 七位ASCII代码表 d3 d2 d1d0位 0 d6 d5d4位 00
27、0 001 010 011 100 101 110 111 0000 NUL DEL SP 0 P p 0001 SOH DC1 ! 1 A Q a q 0010 STX DC2 2 B R b r 0011 ETX DC3 3 C S c s 0100 EOT DC4 4 D T d t 0101 ENQ NAK 5 E U e u 0110 ACK SYN 6 F V f v 0111 BEL ETB 7 G W g w 1000 BS CAN 8 H X h x 1001 HT EM 9 I Y i y 1010 LF SUB : J Z j z 1011 VT ESC K k 1100
28、 FF FS , L l 1101 CR GS M m 1110 SO RS N n 1111 SI HS O o DEL 要确定某个字符的ASCII码,在表中可先查到它的位置,然后确定它所在位置的相应列和行,最后根据列确定高位码(d6d5d4),根据行确定低位码(d3d2d1d0),把高位码与低位码合在一起就是该字符的ASCII码。例如数字9的ASCII码为00111001B,即十六进制为39H;字符A的ASCII码为01000001,即十六进制为41H等等。 数字09的ASCII码为30H39H。 大写英文字母AZ的ASCII码为41H5AH。 小写英文字母az的ASCII码为61H7AH
29、。 对于ASCII码表中的0、A、a的ASCII码30H、41H、61H应尽量记住,其余的数字和字母的ASCII码可按数字和字母的顺序以十六进制的规律写出。 ASC码主要用于微机与外设的通信。当微机接收键盘信息、微机输出到打印机、显示器等信息都是以ASCII码形式进行数据传输。 3.奇偶校验码 奇偶校验是一种常用的简单校验方法,如在计算机内作存储器读写校验、ASCII字符传送中的校验等。 奇偶校验码是在传送的代码上附加一个校验位,作为代码的比较校验。这样在接收方,先对信息代码按双方的校验规定求奇偶校验码,然后再与收到的附加校验位作比较,若相等则认为接收的代码是正确的,否则为错。 奇偶校验就是鉴
30、别代码中有奇数个“1,还是有偶数个“1。例如,有效信息为1011001,若采用偶校验码记为“0”的话,则有效代码为1011001 0;采用奇校验码记为“1”的话,有效代码则为1011001 1。有效代码的最后的那个数位,就是奇偶校验位。当接受方收到这组代码后,便根据奇、偶校验的约定和有效代码中“1”的个数形成校验码,然后再与接收的校验位作比较。比较相等的话,说明接受的信息正确;反之,则认为出现了错误。 奇偶校验只能发现一位错,但不能确定出错的位置,对偶数个错位便无能为力了。但在实际应用中,一位出错的概率比多位出错的概率高,因此,奇偶校验码还是很实用的。1.6 计算机数值数据表示与运算1.6.1
31、 二进制数在计算机内的表示 1. 机器数 在计算机中,因为只有“0”和“1”两种形式,所以数的正、负号,也必须以“0”和“1”表示。通常把一个数的最高位定义为符号位,用0表示正,1表示负,称为数符:其余位仍表示数值。把在机器内存放的正、负号数码化的数称为机器数,把机器外部由正、负号表示的数称为真值数。 【例1-11】真值为(-0101100)B的机器数为10101100,存放在机器中,如图1.3所示。 图1.3 机器数 要注意的是,机器数表示的范围受到字长和数据的类型的限制。字长和数据类型定了,机器数能表示的数值范围也就定了。 例如,若表示一个整数,字长为8位,则最大的正数为01111111,
32、最高位为符号位,即最大值为127。若数值超出127,就要“溢出”。最小负数为10000000,最高位为符号位,即最小值为-128。 2.数的定点和浮点表示 计算机内表示的数,主要分成定点小数、定点整数与浮点数三种类型。 (1)定点小数是指小数点准确固定在数据某一个位置上的小数。一般把小数点固定在最高数据位的左边,小数点前边再设一位符号位。按此规则,任何一个小数都可以写成: N=NSN1N2NM, NS为符号位即在计算机中用M+1个二进制位表示一个小数,最高(最左)一个二进制位表示符号(如用0表示正号,则1就表示负号),后面的m个二进制位表示该小数的数值。小数点不用明确表示出来,因为它总是定在符
33、号位与最高数值位之间。对用m+1个二进制位表示的小数来说,其值的范围|N|12M。定点小数表示法主要用在早期的计算机中。(2)整数的表示法 整数所表示的数据的最小单位为1,可以认为它是小数点定在数值最低位右面的一种表示法。整数分为带符号和不带符号两类。对带符号的整数,符号位放在最高位。可以写成: N=NSNnNn1N2 N1 N0, NS为符号位对于用n+l位二进制位表示的带符号整数,其值的范围为: |N|2n-1。 对于不带符号的整数,所有的n+1个二进制位均看成数值,此时数值表示范围为, 0N2n+1-1。在计算机中,一般用8位、16位和32位等表示数据。一般定点数表示的范围和精度都较小,
34、在数值计算时,大多数采用浮点数。 (3)浮点数的表示方法 浮点表示法对应于科学(指数)计数法,如数110.011可表示为 N=110.011=1.100112+10=11001.1210=0.1100112+11在计算机机中一个浮点数由两部分构成:阶码和尾数,阶码是指数,尾数是纯小数。其存储格式如图1.4所示。 阶符 阶码 数符 尾数 图1.4 浮点数存储格式 阶码只能是一个带符号的整数,它用来指示尾数中的小数点应当向左或向右移动的位数,阶码本身的小数点约定在阶码最右面。尾数表示数值的有效数字,其本身的小数点约定在数符和尾数之间。在浮点数表示中,数符和阶符都各占一位,阶码的位数随数值表示的范围
35、而定,尾数的位数则依数的精度要求而定。 【例1-12】设尾数为4位,阶码为2位,则二进制数N=211l011的浮点数表示形式为: 应当注意:浮点数的正、负是由尾数的数符确定,而阶码的正、负只决定小数点的位置,即决定浮点数的绝对值大小。 3.带符号数的表示 在计算机中,带符号数可以用不同方法表示,常用的有原码、反码和补码。 (1)原码 【例1-13】当机器字长n=8时: +1原0 0000001, -1原1 0000001 +127原0 1111111, -127原1 111111l 由此可以看出,在原码表示法中: l 最高位为符号位,正数为0,负数为1,其余n-1位表示数的绝对值。 l 在原码
36、表示中,零有两种表示形式,即:+000000000,-010000000。 (2)反码 【例1-14】当机器字长n=8时: +1反00000001, -1反11111110 +127反01111111, -127反10000000 由此看出,在反码表示中: l 正数的反码与原码相同,负数的反码只需将其对应的正数按位求反即可得到。 l 机器数最高位为符号位,0代表正号,1代表负号。 l 反码表示方式中,零有两种表示方法: +0反00000000, -0反11111111。 (3)补码 【例1-15】当机器字长n8时, +1补00000001, -1补11111111 +127补01111111,
37、 -127补10000001 由此看出,在补码表示中: l 正数的补码与原码、反码相同,负数的补码等于它的反码加l。 l 机器数的最高位是符号位,0代表正号,1代表负号。 l 在补码表示中,0有唯一的编码: 0补0补00000000。 补码的运算方便,二进制的减法可用补码的加法实现,使用较广泛。 【例1-16】假定计算机字长为8位,试写出122的原码、反码和补码。 122原122反122补01111010B 【例1-17】假定计算机字长为8位,试写出45的原码、反码和补码。 45原10101101B 45反11010010B 45补11010011B 对于用补码表示的负数,首先认定它是负数,而
38、后用求它的补码的方法可得到它的绝对值,即可求得该负数的值。例如,补码数(11110011)B是一个负数,求该数的补码为(00001101)B,该数相应的十进制数为13,故求出(11110011)B为(13)D。【例1-18】试写出原码11011001的真值。 (原码)补(原码)反110100111B39 1.6.2 补码的运算 在微处理机中,使用补码进行运算是十分方便的,它使同一个微处理机中既能运算带符号数又能运算不带符号的数。而且,在采用补码表示带符号数的情况下,两个数的减法可以用加法来实现。下面我们将会看到这一点。 一个数,是带符号的数还是不带符号的数是人为规定的。而对微处理机来说,它对输
39、入的二进制数进行运算时,并不知道输入的二进制数是带符号的数还是不带符号的数。但是,当用不带符号的数或用补码数来解释带符号的数时,微处理机运算的结果都是正确的。【例1-19】有两个二进制数10000100和00001110,当规定它们是不带符号的数时,则它们分别表示(132)10和(14)10。将这两个二进制数相加: 得到一个无符号的二进制数10010010,该数为十进制数146。也就是说,按照无符号数去解释,运算的结果是正确的。 同样上述两个数,如果规定它们是带符号的数,其十进制值分别为(124)10和(+14)10。两个带符号的数(10000100)2和(00001110)2相加,得到带符号
40、的数(10010010)2,此结果用符号数进行解释,刚好为(110)10,其结果也是正确的。 在微处理器中,一般都不设置专门的减法电路。遇到两个数相减时,处理器就自动地将减数取补,而后将被减数和减数的补码相加来完成减法运算。例如,(69)10(26)10?可以写成(69)10+(26)10。利用(69)10的原码和(26)10的补码相加,即可以得到正确的结果。 在进行带符号数的加减运算时,应把参与运算的数据转换成补码形式进行运算。当使用8位二进制数表示带符号的数时,它所能表示的数值范围在(-128)10(+127)10之间,如果相加结果超出了这个范围,就会导致错误发生。X+Y补=X补+Y补 X
41、-Y补=X补+-Y补 由上述可以看到,采用补码法进行运算时,在微处理器中只用加法电路就可以实现加法或减法运算。但是,必须强调指出,在进行两个同符号的数(即两数同为正数或同为负数)相加时,一定要特别注意其结果不能超出所规定的数值范围,否则将产生溢出。【例1-20】两个带符号的数(01000001)2(十进制数+65)与(01000011)2(十进制数+67) 例中是两个正数相加,但结果却是一个负数符号位为1。显然,这个结果是错误的,出现这种错误的原因就在于这两个数相加的结果超过了8位二进制带符号数所能表示的数值范围。【例1-21】两个负数(10001000)2和(11101110)2的相加情况。
42、 由于规定用8位二进制数来表示带符号的数,故忽略作为进位位的第九位。按8位二进制数来解释这两个符号数的相加,其结果为一个正数。很明显,结果是错误的。 以上两种情况叫做补码运算的溢出。当两个同符号的数相加时,如果相加的结果超过了微处理机所能表示的数值范围,就将发生溢出,其结果就是错误的。因此,在微处理机中设有专门的电路 用以判断运算结果是否产生溢出,并以某种标志告诉人们这次运算的结果是否存在溢出。只要溢出没有发生,运算的结果总是正确的。 此外,在微处理机中还会遇到不带符号数的运算。【例1-22】两个无符号数(11111101)2和(00000011)2相加: 从相加计算的结果来看,如果微处理机只
43、有8位,也就是用8位二进制数来解释运算的结果,则将出现错误。因此,在微处理机中设有专门的一位,称为进位位,它将用于保存第九位以防丢失信息。当考虑了这一位以后,用9位二进制数来解释相加的结果,则计算的结果仍然是正确的。总之,由于微处理机中有专门的进位位,无符号数的加法运算总可以得到正确的结果。1.6.3 逻辑运算(1)“与”运算。“与”运算的运算规则是: 00=0 01=0 10=0 11=1【例1-23】 二进制数01011101B和11010101B相与。 (2)“或”运算。“或”运算的运算规则是: 0 0=0 01=1 10=1 11=1【例1-24】二进制数10101101和01010000相或。 (3)“