第一章 微型计算机基础知识
1.1 微型计算机的组成及工作原理 1.1.1 微型计算机中的基本概念 1. 微处理器 2. 微型计算机 (1)单片微处理机 1.1.1 微型计算机中的基本概念 1. 微处理器 2. 微型计算机 (1)单片微处理机 (2)通用微型计算机 3. 微型计算机系统
1.1.2 微机基本结构 微型计算机的基本组成如图1.1所示,它由中央处理器(CPU)、存储器(Memory)、输入输出接口(I/O接口)和系统总线(BUS)构成。 图1.1 微型计算机的基本组成
1.1.3 微型计算机的基本工作过程 微型计算机的基本工作过程是执行程序的过程,也就是CPU自动从程序存放的第1个存储单元起,逐步取出指令、分析指令,并根据指令规定的操作类型和操作对象,执行指令规定的相关操作。如此重复,周而复始,直至执行完程序的所有指令,从而实现程序的基本功能,这就是微型计算机的基本工作原理。
1.2 典型单片机产品简介 1.2.1 MCS-51单片机系列 MCS-51可分为两个子系列和4种类型,如表1-1所示。按资源的配置数量,MCS-51系列分为51和52两个子系列,其中51子系列是基本型,而52子系列属于增强型。 表1-1 MCS-51系列单片机分类 资 源 配 置 子 系 列 片内ROM的形式 片内 ROM 容量 RAM 定时器 与 计数器 中 断 源 无 EPROM E2PROM 8×51系列 8031 8051 8751 8951 4KB 128B 2×16 5 8×C51系列 80C31 80C51 87C51 89C51 8×52系列 8032 8052 8752 8952 8KB 256B 3×16 6 8×C252系列 80C232 80C252 87C252 89C252 7
80C51与8051的比较 (1)MCS-51系列芯片采用HMOS工艺,而80C51芯片则采用CHMOS工艺。CHMOS工艺是COMS和HMOS的结合, (2)80C51芯片具有COMS低功耗的特点。例如8051芯片的功耗为630mW,而80C51的功耗只有120mW。 (3)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接口、定时器/计数器、全双工串行口外,还有高速I/O部件、多路A/D转换和脉宽调制输出(PWM)等电路,其指令系统比MCS-51更加丰富。 1.2.3 ATMEL公司单片机 ATMEL公司于1992年推出了全球第一个3V超低压F1ash存储器,并于1994年以E2PROM技术与Intel公司的80C31内核进行技术交换,从此拥有了80C31内核的使用权,并将ATMEL特有的Flash技术与80C31内核结合在一起,生产出AT89C51系列单片机。
1.3 单片机的应用模式 1.3.1 单片机应用系统的结构 单片机应用系统的结构通常分为以下三个层次。 1.3 单片机的应用模式 1.3.1 单片机应用系统的结构 单片机应用系统的结构通常分为以下三个层次。 (1)单片机:通常指应用系统主处理机,即所选择的单片机器件。 (2)单片机系统:指按照单片机的技术要求和嵌入对象的资源要求而构成的基本系统。时钟电路、复位电路和扩展存储器等与单片机共同构成了单片机系统。 (3)单片机应用系统:指能满足嵌入对象要求的全部电路系统。在单片机系统的基础上加上面向对象的接口电路,如前向通道、后向通道、人机交互通道(键盘、显示器、打印机等)和串行通信口(RS232)以及应用程序等。
单片机应用系统三个层次的关系如图1.2所示 图1.2 单片机应用系统三个层次的关系
1.3.2 单片机系统的开发过程 通常开发一个单片机系统可按以下6个步骤进行。 (1) 明确系统设计任务,完成单片机及其外围电路的选型工作。 1.3.2 单片机系统的开发过程 通常开发一个单片机系统可按以下6个步骤进行。 (1) 明确系统设计任务,完成单片机及其外围电路的选型工作。 (2) 设计系统原理图和PCB板,经仔细检查PCB板后送 工厂制作。 (3) 完成器件的安装焊接。 (4) 根据硬件设计和系统要求编写应用程序。 (5) 在线调试软硬件。 (6) 使用编程器烧写单片机应用程序,独立运行单片机系统。
1.4 单片机的应用 1.单片机在机、电、仪一体化等智能产品中的应用 日常生活中含单片机的电器产品 智能化的仪器仪表 1.4 单片机的应用 1.单片机在机、电、仪一体化等智能产品中的应用 日常生活中含单片机的电器产品 智能化的仪器仪表 2.单片机在工业测控中的应用 3.单片机在通信技术中的应用
1.5 数制与编码 1.5.1 数制的表示 1.常用数制 (1)十进制数 我们熟悉的十进制数有两个主要特点: 1.5 数制与编码 1.5.1 数制的表示 1.常用数制 (1)十进制数 我们熟悉的十进制数有两个主要特点: 有十个不同的数字符号:0、1、2、…、9; 低位向高位进、借位的规律是“逢十进一”“借一当十”的计数原则进行计数。 例如: 1234.45=1×103+2×102+3×101+4×100+4×10-15×10-2 式中的10称为十进制数的基数, 103、102、101、100、10-1称为各数位的权。十进制数用D结尾表示。
(2)二进制数 在二进制中只有两个不同数码:0和1,进位规律是“逢二进一”“借一当二”的计数原则进行计数。二进制数用B结尾表示。 例如,二进制数11011011.01可表示为: (11011011.01)2==1×27+1×26+0×25+1×24+1×23+0×22+1×21+1×20+0×2-1+1×2-2 (3)八进制数 在八进制中有0、1、2…、7八个不同数码,采用“逢八进一”“借一当八”的计数原则进行计数。八进制数用Q结尾表示。 例如,八进制数(503.04)Q可表示为: (503.04)Q=5×82+0×81+3×80+0×8-1+4×8-2
(4)十六进制数 在十六进制中有0、1、2…、9、A、B、C、D、E、F共十六个不同的数码,采用“逢十六进一”“借一当十六”的计数原则进行计数。十六进制数用H结尾表示。 例如,十六进制数(4E9.27)H可表示为 (4E9.27)H=4×162+14×161+9×160+2×16-1+7×16-2 2.不同进制数之间的相互转换 表1-4列出了二、八、十、十六进制数之间的对应关系,熟记这些对应关系对后续内容的学习会有较大的帮助。
表1-4 各种进位制的对应关系 十进制 二进制 八进制 十六进制 9 1001 11 1 10 1010 12 A 2 1011 13 B 9 1001 11 1 10 1010 12 A 2 1011 13 B 3 1100 14 C 4 100 1101 15 D 5 101 1110 16 E 6 110 1111 17 F 7 111 10000 20 8 1000 10001 21
(1)二、八、十六进制数转换成为十进制数 根据各进制的定义表示方式,按权展开相加,即可转换为十进制数。 【例1-1】将(10101)B,(72)Q,(49)H转换为十进制数。 (10101)B=1×24+0×23+1×22+0×21+1×20=37 (72)Q=7×81+2×80=58 (49)H=4×161+9×160=73 (2)十进制数转换为二进制数 十进制数转换二进制数,需要将整数部分和小数部分分开,采用不同方法进行转换,然后用小数点将这两部分连接起来。
①整数部分:除2取余法。 具体方法是:将要转换的十进制数除以2,取余数;再用商除以2,再取余数,直到商等于0为止,将每次得到的余数按倒序的方法排列起来作为结果。 【例1-2】将十进制数25转换成二进制数 所以(25)D=11001B
②小数部分:乘2取整法。 具体方法是:将十进制小数不断地乘以2,直到积的小数部分为零(或直到所要求的位数)为止,每次乘得的整数依次排列即为相应进制的数码。最初得到的为最高有效数位,最后得到的为最低有效数字。 【例1-3】将十进制数0.625转换成二进制数。 所以(0.625)D=0.101B
【例1-4】将十进制数25.625转换成二进制数,只要将上例整数和小数部分组合在一起即可,即(25.625)D=(11001.101)B 例如:将十进制193.12转换成八进制数。 所以(193.12)D (301.075)Q
(3) 二进制与八进制之间的相互转换 由于23=8,故可采用“合三为一”的原则,即从小数点开始向左、右两边各以3位为一组进行二-八转换:若不足3位的以0补足,便可以将二进制数转换为八进制数。反之,每位八进制数用三位二进制数表示,就可将八进制数转换为二进制数。 【例1-5】将(10100101.01011101)2转换为八进制数。 010 100 101.010 111 010 2 4 5 . 2 7 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位为一组进行二—十六转换,若不足4位的以0补足,便可以将二进制数转换为十六进制数。反之,每位十六进制数用四位二进制数表示,就可将十六进制数转换为二进制数。
1.5.2 常用的信息编码 【例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=(111100110111101.011011)B 1.5.2 常用的信息编码 二—十进制BCD码(Binary-Coded Decimal) 二—十进制BCD码是指每位十进制数用4位二进制数编码表示。由于4位二进制数可以表示16种状态,可丢弃最后6种状态,而选用0000~1001来表示0~9十个数符。这种编码又叫做8421码。见表1-5所示。
表1-5 十进制数与BCD码的对应关系 十进制数 BCD码 0000 10 00010000 1 0001 11 00010001 2 0000 10 00010000 1 0001 11 00010001 2 0010 12 00010010 3 0011 13 00010011 4 0100 14 00010100 5 0101 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 0110 9 7 8 . 5 6 结果为(100101111000.01010110)BCD=978.56 2. 字符编码(ASCII码) 计算机使用最多、最普遍的是ASCII(American Standard Code For Information Interchange)字符编码,即美国信息交换标准代码,如表1.6所示。
表1-6 七位ASCII代码表 d3 d2 d1d0位 0 d6 d5d4位 000 001 010 011 100 101 110 111 0000 NUL DEL SP @ 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 FF FS , < L \ l | 1101 CR GS - = M ] m } 1110 SO RS · > N ↑ n ~ 1111 SI HS / ﹖ O ← o
ASCII码的每个字符用7位二进制数表示,其排列次序为d6d5d4d3d2d1d0, d6为高位,d0为低位。而一个字符在计算机内实际是用8位表示。正常情况下,最高一位d7为“0”。7位二进制数共有128种编码组合,可表示128个字符,其中数字10个、大小写英文字母52个、其他字符32个和控制字符34个。 数字0~9的ASCII码为30H~39H。 大写英文字母A~Z的ASCII码为41H~5AH。 小写英文字母a~z的ASCII码为61H~7AH。 对于ASCII码表中的0、A、a的ASCII码30H、41H、61H应尽量记住,其余的数字和字母的ASCII码可按数字和字母的顺序以十六进制的规律写出。
3. 奇偶校验码 奇偶校验码是在传送的代码上附加一个校验位,作为代码的比较校验。这样在接收方,先对信息代码按双方的校验规定求奇偶校验码,然后再与收到的附加校验位作比较,若相等则认为接收的代码是正确的,否则为错。奇偶校验就是鉴别代码中有奇数个“1,还是有偶数个“1。例如,有效信息为1011001,若采用偶校验码记为“0”的话,则有效代码为1011001 0;采用奇校验码记为“1”的话,有效代码则为1011001 1。有效代码的最后的那个数位,就是奇偶校验位。当接受方收到这组代码后,便根据奇、偶校验的约定和有效代码中“1”的个数形成校验码,然后再与接收的校验位作比较。比较相等的话,说明接受的信息正确;反之,则认为出现了错误。
1.6 计算机数值数据表示与运算 1.6.1 二进制数在计算机内的表示 1.机器数 1.6 计算机数值数据表示与运算 1.6.1 二进制数在计算机内的表示 1.机器数 在计算机中,因为只有“0”和“1”两种形式,所以数的正、负号,也必须以“0”和“1”表示。通常把一个数的最高位定义为符号位,用0表示正,1表示负,称为数符:其余位仍表示数值。把在机器内存放的正、负号数码化的数称为机器数,把机器外部由正、负号表示的数称为真值数。
【例1-11】真值为(-0101100)B的机器数为10101100,存放在机器中,如图1.3所示。 要注意的是,机器数表示的范围受到字长和数据的类型的限制。字长和数据类型定了,机器数能表示的数值范围也就定了。 例如,若表示一个整数,字长为8位,则最大的正数为01111111,最高位为符号位,即最大值为127。若数值超出127,就要“溢出”。最小负数为10000000,最高位为符号位,即最小值为-128。
2. 数的定点和浮点表示 计算机内表示的数,主要分成定点小数、定点整数与浮点数三种类型。 (1)定点小数的表示法 定点小数是指小数点准确固定在数据某一个位置上的小数。一般把小数点固定在最高数据位的左边,小数点前边再设一位符号位。按此规则,任何一个小数都可以写成: N=NSN-1N-2···N-M, NS为符号位 (2)整数的表示法 整数所表示的数据的最小单位为1,可以认为它是小数点定在数值最低位右面的一种表示法。整数分为带符号和不带符号两类。对带符号的整数,符号位放在最高位。可以写成: N=NSNnNn-1···N2 N1 N0, NS为符号位
一般定点数表示的范围和精度都较小,在数值计算时,大多数采用浮点数。 (3)浮点数的表示方法 浮点表示法对应于科学(指数)计数法,如数110.011可表示为: N=110.011=1.10011×2+10=11001.1×2-10=0.110011×2+11 在计算机机中一个浮点数由两部分构成:阶码和尾数,阶码是指数,尾数是纯小数。其存储格式如图1.4所示。 阶符 阶码 数符 尾数 图1.4 存储格式 【例1-12】设尾数为4位,阶码为2位,则二进制数N=211×l011的浮点数表示形式为:
应当注意:浮点数的正、负是由尾数的数符确定,而阶码的正、负只决定小数点的位置,即决定浮点数的绝对值大小。 带符号数的表示 在计算机中,带符号数可以用不同方法表示,常用的有原码、反码和补码。 (1)原码 【例1-13】当机器字长n=8时: [+1]原=0 0000001, [-1]原=1 0000001 [+127]原=0 1111111, [-127]原=1 111111l
由此可以看出,在原码表示法中: 最高位为符号位,正数为0,负数为1,其余n-1位表示数的绝对值。 在原码表示中,零有两种表示形式,即: [+0]=00000000, [-0]=10000000。 (2)反码 【例1-14】当机器字长n=8时: [+1]反=00000001, [-1]反=11111110 [+127]反=01111111, [-127]反=10000000 由此看出,在反码表示中: 正数的反码与原码相同,负数的反码只需将其对应的正数按位求反即可得到。
机器数最高位为符号位,0代表正号,1代表负号。 反码表示方式中,零有两种表示方法: [+0]反=00000000, [-0]反=11111111。 (3)补码 【例1-15】当机器字长n=8时, [+1]补=00000001, [-1]补=11111111 [+127]补=01111111, [-127]补=10000001 由此看出,在补码表示中: 正数的补码与原码、反码相同,负数的补码等于它的反码加l。 机器数的最高位是符号位,0代表正号,1代表负号。 在补码表示中,0有唯一的编码: [+0]补=[-0]补=00000000。 补码的运算方便,二进制的减法可用补码的加法实现,使用较广泛。
【例1-16】假定计算机字长为8位,试写出122的原码、反码和补码。 [122]原=[122]反=[122]补=01111010B 【例1-17】假定计算机字长为8位,试写出-45的原码、反码和补码。 [-45]原=10101101B [-45]反=11010010B [-45]补=11010011B 对于用补码表示的负数,首先认定它是负数,而后用求它的补码的方法可得到它的绝对值,即可求得该负数的值。例如,补码数(11110011)B是一个负数,求该数的补码为(00001101)B,该数相应的十进制数为13,故求出(11110011)B为(-13)D。 【例1-18】试写出原码11011001的真值。 (原码)补=(原码)反+1=10100111B=-39
1.6.2 补码的运算 在微处理机中,使用补码进行运算是十分方便的,它使同一个微处理机中既能运算带符号数又能运算不带符号的数。而且,在采用补码表示带符号数的情况下,两个数的减法可以用加法来实现。下面我们将会看到这一点。 在进行带符号数的加减运算时,应把参与运算的数据转换成补码形式进行运算。当使用8位二进制数表示带符号的数时,它所能表示的数值范围在(-128)10~(+127)10之间,如果相加结果超出了这个范围,就会导致错误发生。 [X+Y]补=[X]补+[Y]补 [X-Y]补=[X]补+[-Y]补
【例1-20】两个带符号的数(01000001)2(十进制数+65)与(01000011)2(十进制数+67) 例中是两个正数相加,但结果却是一个负数——符号位为1。显然,这个结果是错误的,出现这种错误的原因就在于这两个数相加的结果超过了8位二进制带符号数所能表示的数值范围。 【例1-21】两个负数(10001000)2和(11101110)2的相加情况。
由于规定用8位二进制数来表示带符号的数,故忽略作为进位位的第九位。按8位二进制数来解释这两个符号数的相加,其结果为一个正数。很明显,结果是错误的。 【例1-22】两个无符号数(11111101)2和(00000011)2相加: 从相加计算的结果来看,如果微处理机只有8位,也就是用8位二进制数来解释运算的结果,则将出现错误。因此,在微处理机中设有专门的一位,称为进位位,它将用于保存第九位以防丢失信息。
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)“异或”运算。“异或”运算的运算规则是: 00=0 01=1 10=1 11=0 【例1-25】二进制数10101101和01101110相异或。