第一章
微型计算机基础知识
1.1 微型计算机的组成及工作原理
1.1.1 微型计算机中的基本概念
1,微处理器
2,微型计算机
(1)单片微处理机
(2)通用微型计算机
3,微型计算机系统
1.1.2 微机基本结构
微型计算机的基本组成如图 1.1所示, 它由中央处理器
( CPU), 存储器 ( Memory), 输入输出接口 ( I/O接口 )
和系统总线 ( BUS) 构成 。
C
P
U
总
线
形
成
电
路 接口 接口 接口
内存 内存
外设 外设 外设
系 统 总 线
图 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
容量
定时器
与
计数器
中
断
源无 ROM EPROM E
2PRO
M
8× 51系列 8031 8051 8751 8951 4KB 128B 2× 16 5
8× C51系列 80C31 80C51 87C51 89C51 4KB 128B 2× 16 5
8× 52系列 8032 8052 8752 8952 8KB 256B 3× 16 6
8× C252系列 80C232 80C252 87C252 89C252 8KB 256B 3× 16 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内核结合在一起, 生产出
AT 89C51系列单片机 。
1.3 单片机的应用模式
1.3.1 单片机应用系统的结构
单片机应用系统的结构通常分为以下三个层次 。
(1)单片机:通常指应用系统主处理机, 即所选择的单片机器
件 。
(2)单片机系统:指按照单片机的技术要求和嵌入对象的资源
要求而构成的基本系统 。 时钟电路, 复位电路和扩展存储器
等与单片机共同构成了单片机系统 。
(3)单片机应用系统:指能满足嵌入对象要求的全部电路系统 。
在单片机系统的基础上加上面向对象的接口电路, 如前向通
道, 后向通道, 人机交互通道 (键盘, 显示器, 打印机等 )和
串行通信口 (RS232)以及应用程序等 。
后向通道
单片机
单片机系统
单片机应用系统
人机交互通道
前向通道
应用程序
串行通信口
单片机应用系统三个层次的关系如图 1.2所示
图 1.2 单片机应用系统三个层次的关系
1.3.2 单片机系统的开发过程
通常开发一个单片机系统可按以下 6个步骤进行 。
(1) 明确系统设计任务, 完成单片机及其外围电路的选型工作 。
(2) 设计系统原理图和 PCB板, 经仔细检查 PCB板后送
工厂制作 。
(3) 完成器件的安装焊接 。
(4) 根据硬件设计和系统要求编写应用程序 。
(5) 在线调试软硬件 。
(6) 使用编程器烧写单片机应用程序,独立运行单片机系统。
1.4 单片机的应用
1.单片机在机, 电, 仪一体化等智能产品中的应用
?日常生活中含单片机的电器产品
?智能化的仪器仪表
2.单片机在工业测控中的应用
3.单片机在通信技术中的应用
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 各种进位制的对应关系
十进制 二进制 八进制 十六进制 十进制 二进制 八进制 十六进制
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 10001 21 11
( 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转换成二进制数 2 52
1 2 12
2 6 0
2 3 0
2 1 1
0 1
余数
最低位
最高位
所以( 25) D=11001B
② 小数部分:乘 2取整法。
具体方法是:将十进制小数不断地乘以 2,直到积的小
数部分为零(或直到所要求的位数)为止,每次乘得的整数
依次排列即为相应进制的数码。最初得到的为最高有效数位,
最后得到的为最低有效数字。
【 例 1-3】 将十进制数 0.625转换成二进制数。0.625
2
1.250
2
0.5
2
1.0
1
0
1
最高位
最低位
所以( 0.625) D=0.101B
【 例 1-4】 将十进制数 25.625转换成二进制数,只要将上例整数
和小数部分组合在一起即可,即 (25.625)D=(11001.101)B
例如:将十进制 193.12转换成八进制数。
1 9 3
2 4 1
3 0
0 3
8
8
8
余数
最高位
最低位
0.12
8
0.96 0
8
7.68 7
8
5.44 5
取整
最高位
最低位
所以( 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-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码 十进制数 BCD码
0 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 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 FF FS, < L \ l |
1101 CR GS - = M ] m }
1110 SO RS · > N ↑ n ~
1111 SI HS / ﹖ O ← o DEL
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.机器数
在计算机中,因为只有,0”和,1”两种形式,所以数的
正、负号,也必须以,0”和,1”表示。通常把一个数的最
高位定义为符号位,用 0表示正,1表示负,称为数符:其
余位仍表示数值。把在机器内存放的正、负号数码化的数
称为机器数,把机器外部由正、负号表示的数称为真值数。
【 例 1-11】 真值为 (-0101100)B的机器数为 10101100,存
放在机器中,如图 1.3所示。
1 0 1 0 1 1 0 0
符 号 位
图 1.3 真值 B在机器中的存放
要注意的是,机器数表示的范围受到字长和数据的类型
的限制。字长和数据类型定了,机器数能表示的数值范围也
就定了。
例如,若表示一个整数,字长为 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的浮点数表示形式为:
0 1 1 0 1 0 1 1
阶
符
阶
码
数
符
尾
数
应当注意:浮点数的正、负是由尾数的数符确定,
而阶码的正、负只决定小数点的位置,即决定浮点数
的绝对值大小。
带符号数的表示
在计算机中,带符号数可以用不同方法表示,常
用的有原码、反码和补码。
(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的相加情况。
+
01000001
01000011
10000100
10001000
11101110
01110110
+
1
由于规定用 8位二进制数来表示带符号的数,故忽略作
为进位位的第九位。按 8位二进制数来解释这两个符号数的
相加,其结果为一个正数。很明显,结果是错误的。
【 例 1-22】 两个无符号数 (11111101)2和 (00000011)2相加:
+
1
11111101
00000011
00000000
从相加计算的结果来看,如果微处理机只有 8位,也就是
用 8位二进制数来解释运算的结果,则将出现错误。因此,
在微处理机中设有专门的一位,称为进位位,它将用于保存
第九位以防丢失信息。
1.6.3 逻辑运算
( 1)“与”运算。“与”运算的运算规则是:
0?0=0 0?1=0
1?0=0 1?1=1
【 例 1-23】 二进制数 01011101B和 11010101B相与。
01011101
11010101
01010101
( 2)“或”运算。“或”运算的运算规则是:
0? 0=0 0?1=1
1?0=1 1?1=1
【 例 1-24】 二进制数 10101101和 01010000相或。
10101101
01010000
11111101
( 3)“异或”运算。“异或”运算的运算规则是:
0?0=0 0?1=1
1?0=1 1?1=0
【 例 1-25】 二进制数 10101101和 01101110相异或。
10101101
01101110
11000011
+
微型计算机基础知识
1.1 微型计算机的组成及工作原理
1.1.1 微型计算机中的基本概念
1,微处理器
2,微型计算机
(1)单片微处理机
(2)通用微型计算机
3,微型计算机系统
1.1.2 微机基本结构
微型计算机的基本组成如图 1.1所示, 它由中央处理器
( CPU), 存储器 ( Memory), 输入输出接口 ( I/O接口 )
和系统总线 ( BUS) 构成 。
C
P
U
总
线
形
成
电
路 接口 接口 接口
内存 内存
外设 外设 外设
系 统 总 线
图 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
容量
定时器
与
计数器
中
断
源无 ROM EPROM E
2PRO
M
8× 51系列 8031 8051 8751 8951 4KB 128B 2× 16 5
8× C51系列 80C31 80C51 87C51 89C51 4KB 128B 2× 16 5
8× 52系列 8032 8052 8752 8952 8KB 256B 3× 16 6
8× C252系列 80C232 80C252 87C252 89C252 8KB 256B 3× 16 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内核结合在一起, 生产出
AT 89C51系列单片机 。
1.3 单片机的应用模式
1.3.1 单片机应用系统的结构
单片机应用系统的结构通常分为以下三个层次 。
(1)单片机:通常指应用系统主处理机, 即所选择的单片机器
件 。
(2)单片机系统:指按照单片机的技术要求和嵌入对象的资源
要求而构成的基本系统 。 时钟电路, 复位电路和扩展存储器
等与单片机共同构成了单片机系统 。
(3)单片机应用系统:指能满足嵌入对象要求的全部电路系统 。
在单片机系统的基础上加上面向对象的接口电路, 如前向通
道, 后向通道, 人机交互通道 (键盘, 显示器, 打印机等 )和
串行通信口 (RS232)以及应用程序等 。
后向通道
单片机
单片机系统
单片机应用系统
人机交互通道
前向通道
应用程序
串行通信口
单片机应用系统三个层次的关系如图 1.2所示
图 1.2 单片机应用系统三个层次的关系
1.3.2 单片机系统的开发过程
通常开发一个单片机系统可按以下 6个步骤进行 。
(1) 明确系统设计任务, 完成单片机及其外围电路的选型工作 。
(2) 设计系统原理图和 PCB板, 经仔细检查 PCB板后送
工厂制作 。
(3) 完成器件的安装焊接 。
(4) 根据硬件设计和系统要求编写应用程序 。
(5) 在线调试软硬件 。
(6) 使用编程器烧写单片机应用程序,独立运行单片机系统。
1.4 单片机的应用
1.单片机在机, 电, 仪一体化等智能产品中的应用
?日常生活中含单片机的电器产品
?智能化的仪器仪表
2.单片机在工业测控中的应用
3.单片机在通信技术中的应用
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 各种进位制的对应关系
十进制 二进制 八进制 十六进制 十进制 二进制 八进制 十六进制
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 10001 21 11
( 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转换成二进制数 2 52
1 2 12
2 6 0
2 3 0
2 1 1
0 1
余数
最低位
最高位
所以( 25) D=11001B
② 小数部分:乘 2取整法。
具体方法是:将十进制小数不断地乘以 2,直到积的小
数部分为零(或直到所要求的位数)为止,每次乘得的整数
依次排列即为相应进制的数码。最初得到的为最高有效数位,
最后得到的为最低有效数字。
【 例 1-3】 将十进制数 0.625转换成二进制数。0.625
2
1.250
2
0.5
2
1.0
1
0
1
最高位
最低位
所以( 0.625) D=0.101B
【 例 1-4】 将十进制数 25.625转换成二进制数,只要将上例整数
和小数部分组合在一起即可,即 (25.625)D=(11001.101)B
例如:将十进制 193.12转换成八进制数。
1 9 3
2 4 1
3 0
0 3
8
8
8
余数
最高位
最低位
0.12
8
0.96 0
8
7.68 7
8
5.44 5
取整
最高位
最低位
所以( 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-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码 十进制数 BCD码
0 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 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 FF FS, < L \ l |
1101 CR GS - = M ] m }
1110 SO RS · > N ↑ n ~
1111 SI HS / ﹖ O ← o DEL
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.机器数
在计算机中,因为只有,0”和,1”两种形式,所以数的
正、负号,也必须以,0”和,1”表示。通常把一个数的最
高位定义为符号位,用 0表示正,1表示负,称为数符:其
余位仍表示数值。把在机器内存放的正、负号数码化的数
称为机器数,把机器外部由正、负号表示的数称为真值数。
【 例 1-11】 真值为 (-0101100)B的机器数为 10101100,存
放在机器中,如图 1.3所示。
1 0 1 0 1 1 0 0
符 号 位
图 1.3 真值 B在机器中的存放
要注意的是,机器数表示的范围受到字长和数据的类型
的限制。字长和数据类型定了,机器数能表示的数值范围也
就定了。
例如,若表示一个整数,字长为 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的浮点数表示形式为:
0 1 1 0 1 0 1 1
阶
符
阶
码
数
符
尾
数
应当注意:浮点数的正、负是由尾数的数符确定,
而阶码的正、负只决定小数点的位置,即决定浮点数
的绝对值大小。
带符号数的表示
在计算机中,带符号数可以用不同方法表示,常
用的有原码、反码和补码。
(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的相加情况。
+
01000001
01000011
10000100
10001000
11101110
01110110
+
1
由于规定用 8位二进制数来表示带符号的数,故忽略作
为进位位的第九位。按 8位二进制数来解释这两个符号数的
相加,其结果为一个正数。很明显,结果是错误的。
【 例 1-22】 两个无符号数 (11111101)2和 (00000011)2相加:
+
1
11111101
00000011
00000000
从相加计算的结果来看,如果微处理机只有 8位,也就是
用 8位二进制数来解释运算的结果,则将出现错误。因此,
在微处理机中设有专门的一位,称为进位位,它将用于保存
第九位以防丢失信息。
1.6.3 逻辑运算
( 1)“与”运算。“与”运算的运算规则是:
0?0=0 0?1=0
1?0=0 1?1=1
【 例 1-23】 二进制数 01011101B和 11010101B相与。
01011101
11010101
01010101
( 2)“或”运算。“或”运算的运算规则是:
0? 0=0 0?1=1
1?0=1 1?1=1
【 例 1-24】 二进制数 10101101和 01010000相或。
10101101
01010000
11111101
( 3)“异或”运算。“异或”运算的运算规则是:
0?0=0 0?1=1
1?0=1 1?1=0
【 例 1-25】 二进制数 10101101和 01101110相异或。
10101101
01101110
11000011
+