迄今为止,所有计算机都是以二进制形式进行算术运算和逻辑运算的,微型计算机也不例外。因此,用户在键盘上输入的十进制数字和符号命令,微型计算机都必须先把它们转换成二进制形式进行识别、运算和处理,然后再把运算结果还原成十进制数字和符号在CRT显示器上显示出来。
虽然上述过程十分烦琐,但都是由微型计算机自动完成的。为了使读者弄清计算机的这一工作机理,我们先对微型计算机中常用的数制和数制间的转换进行讨论。
所谓数制是计数的制式,是人们利用符号计数的一种科学方法。数制是人类在长期的生存斗争和社会实践中逐步形成的。数制有很多种,微型计算机中常用的数制有十进制、二进制和十六进制3种。
十进制是大家很熟悉的进位计数制,它共有0、1、2、3、4、5、6、7、8和9这10个数字符号。这10个数字符号又称为数码,每个数码在数中最多可有两个值的概念。例如:十进制数45中数码4,其本身的值为4,但它实际代表的值为40。在数学上,数制中数码的个数定义为基数,故十进制的基数为10。
十进制是一种科学的计数方法,它所能表示的数的范围很大,可以从无限小到无限大。十进制数通常具有如下两个主要特点:
(1)它有0~9共10个不同的数码,这是构成所有十进制数的基本符号。
(2)它是逢十进位的。十进制数在计数过程中,当它的某位计满10时就要向它相邻的高位进一。
因此,任何一个十进制数不仅和构成它的每个数码本身的值有关,而且还和这些数码在数中的位置有关。这就是说,任何一个十进制数都可以展开成幂级数形式。例如:
123.45=1×102+2×101+3×100+4×10-1+5×10-2
式中,指数102、101、100、10-1和10-2在数学上称为权;10为它的基数;整数部分中每位的幂是该位位数减1;小数部分中每位的幂是该位小数的位数。
二进制比十进制更为简单,它是随着计算机的发展而发展起来的。二进制数也有如下两个主要特点:
(1)它共有0和1两个数码,任何二进制数都是由这两个数码组成的。
(2)二进制数的基数为2,它遵守逢二进一的进位计数原则。
因此,二进制数同样也可以展开成幂级数形式,不过内容有所不同罢了。例如:
10110.11B=1×24+0×23+1×22+1×21+0×20+1×2-1+1×2-2
=1×24+1×22+1×21+1×2-1+1×2-2
=22.75
式中,指数24、23、22、21、20、2-1和2-2为权;2为基数;其余和十进制时相同。
十六进制是人们学习和研究计算机中二进制数的一种工具,它是随着计算机的发展而广泛应用的。十六进制数也有两个主要特点:
(1)它有0、1、2、…、9、A、B、C、D、E、F共16个数码,任何一个十六进制数都是由其中的一些或全部数码构成的。
(2)十六进制数的基数为16,进位计数为逢十六进一。
十六进制数也可展开成幂级数形式。例如:
70F.B1H=7×162+F×160+B×16-1+1×16-2=1807.6914
在微型计算机内部,数的表示形式是二进制的,这是因为二进制数只有0和1两个数码,人们采用晶体管的导通和截止、脉冲的高电平和低电平等都是很容易表示它的。此外,二进制数运算简单,便于用电子线路实现。
人们采用十六进制可以大大减轻阅读和书写二进制数时的负担。例如:
11011011B=DBH
1001001111110010B=93F2H
显然,采用十六进制数描述一个二进制数特别简短,尤其是在被描述二进制数位数较长时更令计算机工作者感到方便。
在阅读和书写不同数制的数时,如果不在每个数上外加一些辨认标记,就会混淆而无法分清。通常,标记方法有两种:一种是把数加上方括号,并在方括号右下角标注数制代号,如[101]16、[101]2和[101]10分别表示十六进制、二进制和十进制;另一种是用英文字母标记,加在被标记数的后面,分别用B、D和H表示二进制、十进制和十六进制数,如89H为十六进制数、101B为二进制数等。其中,十进制数中的D标记可以省略。十进制、二进制和十六进制数的对照如表1-1所示。
表1-1 十进制、二进制和十六进制的对照表
整 数 |
小 数 | ||||
十 进 制 |
二 进 制 |
十六进制 |
十 进 制 |
二 进 制 |
十六进制 |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000 |
0 1 2 3 4 b 6 7 8 9 A B C D E F 10 |
0 0.5 0.25 0.125 0.0625 0.03125 0.015625
|
0 0.1 0.01 0.001 0.0001 0.00001 0.000001
|
0 0.8 0.4 0.2 0.1 0.08 0.04
|
微型计算机是采用二进制数操作的,但人们习惯于使用十进制数,这就要求计算机能自动对不同数制的数进行转换。我们暂且不讨论微型计算机是如何进行这种转换的,先来看看数学上是如何进行上述3种数制间数的转换的。
(1)二进制数转换成十进制数:只要把欲转换数按权展开后相加即可,也可以从小数点开始每4位一组后按十六进制的权展开并相加。例如:
11010.01B=1×24+1×23+1×21+1×2-2=26.25
(2)十进制数转换成二进制数:本转换过程是上述转换过程的逆过程,但十进制整数和小数转换成二进制整数和小数的方法是不相同的。现分别进行介绍。
① 十进制整数转换成二进制整数的方法有很多种,最常用的是“除2取余法”。
“除2取余法”法则是:用2连续去除要转换的十进制数,直到商小于2为止,然后把各次余数按最后得到的为最高位和最早得到的为最低位,依次排列起来所得到的数便是所求的二进制数。现举例加以说明。
【例1-1】试求出十进制数215的二进制数。
解:把215连续除以2,直到商数小于2,相应竖式为:
把所得余数按箭头方向从低到高排列起来便可得到(最高位为3/2剩的1):
215=11010111B
② 十进制小数转换成二进制小数通常采用“乘2取整法”。
“乘2取整法”法则是:用2连续去乘要转换的十进制小数,直到所得积的小数部分为0或满足所需精度为止,然后把各次整数按最先得到的为最高位和最后得到的为最低位,依次排列起来所对应的数便是所求的二进制小数。现结合实例加以介绍。
【例1-2】试把十进制小数0.6879转换为二进制小数。
解:把0.6879不断地乘2,取每次所得乘积的整数部分,直到乘积的小数部分满足所需精度,相应竖式是:
0.6879
×2
1.3758 取得整数1
0.3758
×2
0.751 6 取得整数0
×2
1.5032 取得整数1
0.5032
×2
1.0064 取得整数1
把所得整数按箭头方向从高到低排列后得到:
0.6879D≈0.101 1B
对同时有整数和小数两部分的十进制数,其转换成二进制数的方法可以把它的整数和小数部分分开转换后,再合并起来。例如,把例1-1和例1-2合并起来便可得到:
215.6879≈11010111.1011B
应当指出:任何十进制整数都可以精确转换成一个二进制整数,但十进制小数却不一定可以精确转换成二进制小数。例1-2中的情况就是一例。
二进制和十六进制数间的转换十分方便,这就是为什么人们要采用十六进制形式来对二进制数加以表达的内在原因。
(1)二进制数转换成十六进制数:可采用“四位合一位法”。
“四位合一位法”法则是:从二进制数的小数点开始,或左或右每4位一组,不是4位以0补足之,然后分别把每组用十六进制数码表示,并按序相连。
【例1-3】若要把1101111100011.10010100B转换为十六进制数,则有:
0001 1011 1110 0011.1001 0100
1 B E 3 9 4
1101111100011.10010100B=1BE3.94H
(2)十六进制转换成二进制数:这种转换方法是把十六进制数的每位分别用4位二进制数码表示,然后把它们连成一体。
【例1-4】若要把十六进制数3AB.7A5转换为一个二进制数,则有:
3 A B. 7 A 5
0011 1010 1011 0111 1010 0101
3AB.7A5H=1110101011.011110100101B
自1976年单片机诞生以来,其产品在30多年里得到了迅猛发展,形成了多公司、多系列、多型号的局面。在国际上影响较大的公司及其产品如表1-2所示。
表1-2 世界上较为著名的8位单片机的生产厂家和主要机型
公 司 |
典型产品系列 |
Intel(美国英特尔)公司 |
MCS-51及其增强型系列 |
Philips(荷兰飞利浦)公司 |
8XC552及89C66x系列 |
Motorola(摩托罗拉)公司 |
6801系列和6805系列 |
ATMEL |
与MCS系列兼容的51系列 |
Fairchild(美国仙童)公司 |
F8系列和3870系列 |
续上表 | |
公 司 |
典型产品系列 |
Rockwell(美国洛克威尔)公司 |
6500/1系列 |
TI(美国德克萨斯仪器仪表)公司 |
TMS7000系列 |
NS(美国国家半导体)公司 |
NS8070系列 |
RCA(美国无线电)公司 |
CDPl80系列 |
NEC(日本电气)公司 |
PD7800系列 |
HITACHI(日本日立)公司 |
HD6301、HD63L05、HD6305 |
Microchip |
PICl6 C5X系列 |
Zilog(美国齐洛格)公司 |
Z8系列及Super8 |
除上述公司及其产品外,还有一些其他公司也生产各种类型的单片机,如Siemens、OKI、Mostek公司等。
Intel公司的系列单片机可分为MCS-51、MCS-96两个系列。Intel单片机的每一类芯片的ROM根据型号一般有片内掩膜ROM、片内EPROM和外接EPROM这3种方式,这是Intel公司首创的,现已成为单片机的统一规范。最近Intel公司又推出片内带E2PROM型单片机。片内掩膜ROM型单片机适合于已定型的产品,可以大批量生产;片内带EPROM型、外接EPROM型及片内带E2PROM型单片机适合于研制产品和生产产品样机。MCS-51系列单片机的性能如表1-3所示。
表1-3 MCS-51系列单片机性能
型 号 |
程序存储器 |
RAM/B |
I/O口线 |
定时器/个×位 |
中 断 源 |
晶振/MHz | |
8051 |
8051AH/BH |
4KB ROM |
128 |
32 |
2×16 |
5 |
2~12 |
8751AH/BH |
4KB EPROM |
128 |
32 |
2×16 |
5 |
2~12 | |
8031 AH |
无 |
128 |
32 |
2×16 |
5 |
2~12 | |
8052 |
8052AH |
8KB ROM |
256 |
32 |
3×16 |
6 |
2~12 |
8752AH |
8KB EPROM |
256 |
32 |
3×16 |
6 |
2~12 | |
8032AH |
无 |
256 |
32 |
3×16 |
6 |
2~12 | |
80C51 |
80C51BH |
4KB ROM |
128 |
32 |
2×16 |
5 |
2~12 |
87C51BH |
4KB EPROM |
128 |
32 |
2×16 |
5 |
2~12 | |
80C31BH |
无 |
128 |
32 |
2×16 |
5 |
2~12 | |
80C52 |
80C52 |
8KB ROM |
256 |
32 |
3×16 |
6 |
2~12 |
80C32 |
无 |
256 |
32 |
3×16 |
6 |
2~12 | |
80C54 |
87C54 |
16KB ROM |
256 |
32 |
3×16 |
6 |
2~20 |
80C54 |
16KB ROM |
256 |
32 |
3×16 |
6 |
2~20 | |
80C58 |
87C58 |
32KB ROM |
256 |
32 |
3×16 |
6 |
2~20 |
Philips公司生产与MCS-51兼容的80C51系列单片机,片内具有12C总线、A/D转换器、定时监视器等。其主要产品有80C51、80C52、80C31、80C32、80C528、80C552、80C562、80C751等,其中80C552功能最强,80C751体积最小。
Philips单片机的特点是具有12C总线,这是一种串行通信总线。可以通过12C总线对系统进行扩展,使单片机系统结构更简单,体积更小。12C总线也可用于多机通信。
Motorola公司的单片机从应用角度可以分成两类,即高性能的通用型单片机和面向家用消费领域的专用型单片机。MC68HC05系列单片机的特性如表1-4所示。
表1-4 MC68HC05系列单片机特性
型 号 |
片内ROM |
片内 RAM |
I/O接口 |
监视 定时器 |
输入 捕捉 |
输出 比较 |
A/D |
引脚 系数 | |||
ROM |
E2 PROM |
并行I/O |
计数器 |
串行I/O | |||||||
68HC05B6 |
6KB |
256 |
176 |
32 |
16位 |
SCI |
可 |
2 |
2 |
可 |
48/52 |
68HC05C5 |
5KB |
|
176 |
32 |
16位 |
SIOP |
可 |
1 |
1 |
|
40/44 |
68HC05C8
|
8KB
|
|
176
|
31
|
16位
|
SPI SCI |
|
1
|
1
|
|
40/44
|
通用型单片机具有代表性的是MC68HCll系列,有几十种型号。其典型产品为MC68HCllA8,具有准16位的CPU、8KB ROM、256B RAM、512B EPROM、16位9功能定时器、38位I/O口线、两个串行口、8位脉冲累加器、8路8位A/D转换器、WatchDog、17个中断向量等,可单片工作,也可以扩展方式工作。
专用型单片机性能价格比较高,应用时一般采用“单片”形式,原则上一块单片机就是整个控制系统。这类单片机无法外接存储器,如MC68HC05/MC68HC04系列。
ATMEL公司生产的CMOS型51系列单片机,具有MCS-51内核,用Flash ROM代替ROM作为程序存储器,具有价格低、编程方便等优点。例如,89C51就是拥有4KB Flash ROM的单片机。
ATMEL公司生产的单片机主要有89C51、89F51、89C52、89LV52、89C55等。
Microchip公司推出了PICl6C5X系列单片机。它的典型产品PICl6C57具有8位CPU、2K×12位EPROM程序存储器、80×8位RAM、一个8位定时器/计数器、21根I/O口线等硬件资源。指令系统采用RISC指令,拥有33条基本指令,指令长度为12位,工作速度较高。其主要产品有PICl6C54、PICl6C56等。
Zilog公司推出的Z8系列单片机是一种中档8位单片机。它的典型产品为Z8601,具有8位CPU、2KB ROM、124B RAM、两个8位定时器/计数器、32位I/O口线、一个异步串行通信口、6个中断向量等。其主要产品型号有Z8600/10、Z8601/11、Z86C06、Z86C21、Z86C40、Z86C93等。