大学课件-单片机原理_第1页
大学课件-单片机原理_第2页
大学课件-单片机原理_第3页
大学课件-单片机原理_第4页
大学课件-单片机原理_第5页
已阅读5页,还剩252页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章预备知识(数制与码制)1.1进位计数制及各计数制间的转换1.2二进制数的运算1.3带符号数的表示方法——

原码、反码、补码1.4定点数与浮点数1.5BCD码和ASCII码

1.1进位计数制及各计数制间的转换

数制是人们对事物数量计数的一种统计规律。在日常生活中最常用的是十进制,但在计算机中,由于其电气元件最易实现的是两种稳定状态:器件的“开”与“关”;电平的“高”与“低”。因此,采用二进制数的“0”和“1”可以很方便地表示机内的数据运算与存储。在编程时,为了方便阅读和书写,人们还经常用八进制数或十六进制来表示二进制数。虽然一个数可以用不同计数制形式表示它的大小,但该数的量值则是相等的。1.1.1进位计数制当进位计数制采用位置表示法时,同一数字在不同的数位所代表的数值是不同的。每一种进位计数应包含两个基本的因素:(1)基数R(Radix):它代表计数制中所用到的数码个数。如:二进制计数中用到0和1两个数码;而八进制计数中用到0~7共八个数码。一般地说,基数为R的计数制(简称R进制)中,包含0、1、…、R-1个数码,进位规律为“逢R进1”。(2)位权W(Weight):进位计数制中,某个数位的值是由这一位的数码值乘以处在这一位的固定常数决定的,通常把这一固定常数称之为位权值,简称位权。各位的位权是以R为底的幂。如十进制数基数R=10,则个位、十位、百位上的位权分别为100,101,102。一个R进制数N,可以用以下两种形式表示:(1)并列表示法,或称位置计数法:

(N)R=(Kn-1Kn-2…K1K0K-1K-2…K-m)R(2)多项式表示法,或称以权展开式:(N)R=Kn-1Rn-1+Kn-2Rn-2+…+K1R1+K0R0+

K-1R-1+…+K-mR-m=

其中:m、n为正整数,n代表整数部分的位数;m代表小数部分的位数;Ki代表R进制中的任一个数码,0≤Ki≤R-1。

1.二进制数二进制数,R=2,Ki取0或1,进位规律为“逢2进1”。任一个二进制数N可表示为:(N)2=Kn-12n-1+Kn-22n-2+…+K121+K020+K-12-1+…+K-m2-m(1―1)

例如:(1001.101)2=1×23+0×22+0×21+1×20+1×2-1+0×2-22.八进制数八进制,R=8,Ki可取0~7共8个数码中的任意1个,进位规律为“逢8进1”。任意一个八进制数N可以表示为:(N)8=Kn-18n-1+Kn-28n-2+…+K181+K080+

K-18-1+…+K-m8-m(1―2)例如:(246.12)8=2×82+4×81+6×80+1×8-1+2×8-23.十六进制数十六进制数,R=16,Ki可取0~15共16个数码中的任一个,但10~15分别用A、B、C、D、E、F表示,进位规律为“逢16进1”。任意一个十六进制数N可表示为:

(N)16=Kn-116n-1+Kn-216n-2+…+K1161+K0160+K-116-1+…+K-m16–m(1―3)

例如:(2D07.A)16=2×163+13×162+0×161+7×160+10×16-1

表1―1给出了以上3种进制数与十进制数的对应关系。为避免混淆,除用(N)R的方法区分不同进制数外,还常用数字后加字母作为标注。其中字母B(Binary)表示二进制数;字母Q(Octal的缩写为字母O,为区别数字0故写成Q)表示八进制数;字母D(Decimal)或不加字母表示十进制数;字母H(Hexadecimal)表示十六进制数。表1―1二、八、十、十六进制数码对应表1.1.2各种进制数间的相互转换

1.各种进制数转换成十进制数各种进制数转换成十进制数的方法是:将各进制数先按权展成多项式,再利用十进制运算法则求和,即可得到该数对应的十进制数。例1:将数1001.101B,246.12Q,2D07.AH转换为十进制数。

1001.101B=1×23+0×22+0×21+1×20+1×21+0×2-2+1×2-3

=8+1+0.5+0.125=9.625246.12Q=2×82+4×81+6×80+1×8-1+2×8-2

=128+32+6+0.125+0.03125=166.156252D07.AH=2×163+13×162+0×161+7×160+10×16-1

=8192+3328+7+0.625=11527.6252.十进制数转换为二、八、十六进制数任一十进制数N转换成q进制数,先将整数部分与小数部分分为两部分,并分别进行转换,然后再用小数点将这两部分连接起来。

1)整数部分转换整数部分转换步骤为:第1步:用q去除N的整数部分,得到商和余数,记余数为q进制整数的最低位数码K0;

第2步:再用q去除得到的商,求出新的商和余数,余数又作为q进制整数的次低位数码K1;第3步:再用q去除得到的新商,再求出相应的商和余数,余数作为q进制整数的下一位数码Ki;第4步:重复第3步,直至商为零,整数转换结束。此时,余数作为转换后q进制整数的最高位数码Kn-1。2|1682|84余数0,K0=02|42余数0,K1=02|21余数0,K2=02|10余数1,K3=12|5余数0,K4=08|168

2|2余数1,K5=18|21余数0,K0=016|1682|1余数0,K6=08|2余数5,K1=51616|10余数8,K0=80余数1,K7=1

0余数2,K2=20余数10,K1=A168=10101000B168=250Q168=A8H2)小数部分转换小数部分转换步骤为:第1步:用q去乘N的纯小数部分,记下乘积的整数部分,作为q进制小数的第1个数码K-1;第2步:再用q去乘上次积的纯小数部分,得到新乘积的整数部分,记为q进制小数的次位数码K-i;第3步:重复第2步,直至乘积的小数部分为零,或者达到所需要的精度位数为止。此时,乘积的整数位作为q进制小数位的数码K-m。

例3:将0.686转换成二、八、十六进制数(用小数点后5位表示)。0.686×2=1.372K-1=10.686×8=5.488K-1=50.686×16=10.976K-1=A0.372×2=0.744K-2=00.488×8=3.904K-2=30.976×16=15.616K-2=F0.744×2=1.488K-3=10.904×8=7.232K-3=70.616×16=9.856K-3=90.488×2=0.976K-4=00.232×8=1.856K-4=10.856×16=13.696K-4=D0.976×2=1.952K-5=10.856×8=6.848K-5=60.696×16=11.136K-5=B0.686≈0.10101B0.686≈0.53716Q0.686≈0.AF9DBH

例4:将168.686转换为二、八、十六进制数。根据例2、例3可得:

168.686≈10101000.10101B168.686≈250.53716Q168.686≈A8.AF9DBH

从以上例子可以看出,二进制表示的数愈精确,所需的数位就愈多,这样,不利于书写和记忆,而且容易出错。另外,若用同样数位表示数,则八、十六进制数所表示数的精度较高。所以在汇编语言编程中常用八进制或十六进制数作为二进制数的缩码,来书写和记忆二进制数,便于人—机信息交换。在MCS-51系列单片机编程中,通常采用十六进制数。3.二进制数与八进制数之间的相互转换由于23=8,故可采用“合3为1”的原则,即从小数点开始分别向左、右两边各以3位为1组进行二—八换算;若不足3位的以0补足,便可将二进制数转换为八进制数。

例5:将1111011.0101B转换为八进制数。解:根据“合3为1”和不足3位以0补足的原则,将此二进制数书写为:

001111011.010100173.24

因此,其结果为1111011.0101B=173.24Q。

例6:将1357.246Q转换成二进制数。解:根据“1分为3”的原则,可将该十进制数书写为:

1357.246001011101111.010100110

其结果为1357.246Q=1011101111.01010011B。

4.二进制数与十六进制数之间的相互转换由于24=16,故可采用“合4为1”的原则,从小数点开始分别向左、右两边各以4位为1组进行二—十六换算;若不足4位以0补足,便可将二进制数转换为十六进制数。

例7:将1101000101011.001111B转换成十六进制数。解:根据“合4为1”的原则,可将该二进制数书写为:

0001101000101011.001111001A2B.3C

其结果为1101000101011.001111B=1A2B.3CH。反之,采用“1分为4”的原则,每位十六进制数用4位二进制数表示,便可将十六进制数转换为二进制数。

例8:将4D5E.6FH转换成二进制数。解:根据“1分为4”的原则,可将该十六进制数书写为:

4D5E.6F0100110101011110.01101111

其结果为4D5E.6FH=100110101011110.01101111B。1.2二进制数的运算1.2.1二进制数的算术运算二进制数不仅物理上容易实现,而且算术运算也比较简单,其加、减法遵循“逢2进1”、“借1当2”的原则。以下通过4个例子说明二进制数的加、减、乘、除运算过程。

1.二进制加法

1位二进制数的加法规则为:0+0=00+1=11+0=11+1=10(有进位)

例1:求11001010B+11101B。解:被加数11001010

加数11101

进位+)00110000

和11100111

则11001010B+11101B=11100111B。由此可见,两个二进制数相加时,每1位有3个数参与运算(本位被加数、加数、低位进位),从而得到本位和以及向高位的进位。2.二进制减法

1位二进制数减法规则为:1-0=11-1=00-0=00-1=1(有借位)

例2:求10101010B-10101B。

解:被减数10101010

减数10101

借位-)00101010

差10010101

则10101010B-10101B=10010101B。3.二进制乘法

1位二进制乘法规则为:0×0=00×1=01×0=01×1=1

例3:求110011B×1011B。

解:被乘数110011

乘数×)1011110011110011000000

+)110011

积1000110001

则110011B×1011B=1000110001B。由运算过程可以看出,二进制数乘法与十进制数乘法相类似,可用乘数的每1位去乘被乘数,乘得的中间结果的最低有效位与相应的乘数位对齐,若乘数位为1,则中间结果为被乘数;若乘数位为0,则中间结果为0,最后把所有中间结果同时相加即可得到乘积。显然,这种算法计算机实现时很不方便。对于没有乘法指令的微型计算机来说,常采用比较、相加、与部分积右移相结合的方法进行编程来实现乘法运算。4.二进制除法二进制除法的运算过程类似于十进制除法的运算过程。例4:求100100B÷101B。解:00011110110010010110001011101011

则100100B÷101B=111B,余1B。二进制数除法是二进制数乘法的逆运算,在没有除法指令的微型计算机中,常采用比较、相减、余数左移相结合的方法进行编程来实现除法运算。由于MCS-51系列单片机指令系统中包含有加、减、乘、除指令,因此给用户编程带来了许多方便,同时也提高了机器的运算效率。1.2.2二进制数的逻辑运算

1.“与”运算(AND)

“与”运算又称逻辑乘,运算符为·或∧。“与”运算的规则如下:0·0=00·1=1·0=01·1=1

例5:若二进制数X=10101111B,Y=01011110B,求

X·Y。

10101111∧0101111000001110

则X·Y=00001110B。2.“或”运算(OR)

“或”运算又称逻辑加,运算符为+或∨。“或”运算的规则如下:0+0=00+1=1+0=11+1=1

例6:若二进制数X=10101111B,Y=01011110B,求X

+Y。

10101111∨0101111011111111

则X+Y=11111111B。3.“非”运算(NOT)

“非”运算又称逻辑非,如变量A的“非”运算记作。“非”运算的规则如下:

例7:若二进制数A=10101111B,求。==01010000B

由此可见,逻辑“非”可使A中各位结果均发生反变化,即0变1,1变0。

4.“异或”运算(XOR)

“异或”运算的运算符为或,其运算规则如下:00=001=10=111=0

例8:若二进制数X=10101111B,Y=01011110B,求

XY。

1010111101011110

11110001

则XY=11110001B。1.3带符号数的表示方法——

原码、反码、补码1.3.1机器数与真值在1.2.1、1.2.2节中讨论的二进制数运算均为无符号数运算,但实际的数值是带有符号的,既可能是正数,也可能是负数,前者符号用“+”号表示,后者符号用“-”号表示,运算的结果也可能是正数,也可能是负数。于是在计算机中就存在着如何表示正、负数的问题。

由于计算机只能识别0和1,因此,在计算机中通常把一个二进制数的最高位作为符号位,以表示数值的正与负(若用8位表示一个数,则D7位为符号位;若用16位表示一个数,则D15位为符号位),并用0表示“+”;用1表示“-”。例如:N1=+1011,N2=-1011在计算机中用8位二进制数可分别表示为:D7D6D5D4D3D2D1D0

00001011符号

数值部分1.3.2原码、补码与反码

1.原码正数的符号位用0表示,负数的符号位用1表示,数值部分用真值的绝对值来表示的二进制机器数称之为原码,用[X]原表示。

(1)正数的原码。D7D6D5D4D3D2D1D010001011符号

数值部分若真值为正数X=+Kn-2Kn-3…K1K0(即n-1位二进制正数),

则[X]原=0Kn-2Kn-3…K1K0(1―4)2)负数的原码。若真值为负数X=-Kn-2Kn-3…K1K0(即n-1位二进制负数),

则[X]原=0Kn-2Kn-3…K1K0

=2n-1+Kn-2Kn-3…K1K0

=2n-1

-(-Kn-2Kn-3…K1K0)

=2n-1

-X(1―5)

例如:+115和-115在计算机中(设机器字长为8位),其原码可分别表示为:

[+115]原=01110011B;[-115]原=11110011B(3)零的原码。若真值为零,则原码有两种表示法:

[+0]原=000…00

[-0]原=100…00

由此可得原码与真值的关系为

X,0≤X<2n

2n-1-X-2n<X≤0(1―6)[X]原=2.补码与反码

1)补码的概念在日常生活中有许多“补”数的事例。如钟表,假设标准时间为6点整,而某钟表却指在9点,若要把表拨准,可以有两种拨法,一种是倒拨3小时,即9-3=6;另一种是顺拨9小时,即9+9=6。尽管将表针倒拨或顺拨不同的时数,但却得到相同的结果,即9-3与9+9是等价的。这是因为钟表采用12小时进位,超过12就从头算起,即:9+9=12+6,该12称之为模(mod)。

模(mod)为一个系统的量程或此系统所能表示的最大数,它会自然丢掉,如:9-3=9+9=12+6→6(mod12自然丢掉)

通常称+9是-3在模为12时的补数。于是,引入补数后使减法运算变为加法运算。

例如:11-7=11+5→4(mod12)+5是-7在模为12时的补数,减7与加5的效果是一样的。

一般情况下,任一整数X,在模为K时的补数可用下式表示:

[X]补数=X+K(modK)X0≤X<KK-|X|-K≤X≤0(1―7)=

由补码的概念引伸,当用n位二进制数表示整数X(1位为符号位,n-1位为数值位),模为2n时,数X的补码可表示为:X0≤X<2n-1

2n+X-2n-1≤X≤0(mod2n)[X]补=(1―8)从式(1―8)可见:①正数的补码与其原码相同,即[X]补=[X]原;②零的补码为零,[+0]补=[-0]补=000…00;③负数才有求补码的问题。2)负数补码的求法补码的求法一般有两种:①用补码定义式:[X]补=2n+X=2n-|X|-2n-1≤X≤0(整数)(1―9)

在用补码定义式求补码的过程中,由于做一次减法很不方便,故该法一般不用。例如:X=-0101111B,n=8,则[X]补=28+(-0101111B)

=100000000B-0101111B

=11010001B(mod28)②用原码求反码,再在数值末位加1可得到补码,即:[X]补=[X]反+1。3)反码一个正数的反码,等于该数的原码;一个负数的反码,等于该负数的原码符号位不变(即为1),数值位按位求反(即0变1,1变0);或者在该负数对应的正数原码上连同符号位逐位求反。反码用[X]反表示。

X0≤X<2n-1

(2n-1)+X-2n-1<X≤0(1―10)[X]反=

从式(1―10)可见:①正数的反码:[X]反=[X]原;②负数的反码:[X]反=③零的反码:[+0]反=000…00

[-0]反=111…11

例1:假设X1=+83,X2=-76,当用8位二进制数表示一个数时,求X1、X2的原码、反码及补码。解:[X1]原=[X1]反=[X1]补=01010011B

[X2]原=11001100B[X2]反=10110011B[X2]补=[X]反+1=10110100B

综上所述可归纳为:

正数的原码、反码、补码就是该数本身;负数的原码其符号位为1,数值位不变;负数的反码其符号位为1,数值位逐位求反;负数的补码其符号位为1,数值位逐位求反并在末位加1。1.3.3补码的运算规则与溢出判别

1.补码的运算规则补码的运算规则如下:1)[X+Y]补=[X]补+[Y]补该运算规则说明:任何两个数相加,无论其正负号如何,只要对它们各自的补码进行加法运算,就可得到正确的结果,该结果是补码形式。2)[X-Y]补=[X]补+[-Y]补该运算规则说明:任意两个数相减,只要对减数连同“-”号求补,就变成[被减数]补与[-减数]补相加,该结果是补码形式。

3)[[X]补]补=[X]原对于运算产生的补码结果,若要转换为原码表示,则正数的结果[X]补=[X]原;负数结果,只要对该补结果再进行一次求补运算,就可得到负数的原码结果。例2:用补码求X+Y。解:若[X]补=00100101,

[Y]补=00110011,可得[X+Y]补=[X]补+[Y]补=00100101+00110011=01011000由于符号位为0是正数,所以[X+Y]原=[X+Y]补=01011000

则X+Y=(01011000)2=+88例3:用补码求X-Y。解:若[-Y]补=11001101,可得[X-Y]补=[X]补+[-Y]补=00100101+11001101=11110010由于符号位为1是负数,所以[X-Y]原=[[X-Y]补]补=10001110则X-Y=-(00001110)2=-14例4:用补码求Y-X。解:若[-X]补=11011011,可得[Y-X]补=[Y]补+[-X]补=00110011+11011011=100001110(模28自然丢失)则Y-X=(00001110)2=+14

例5:用补码求(-X)+(-Y)。解:[(-X)+(-Y)]补=[-X]补+[-Y]补=11011011+11001101=110101000(模28自然丢失)

[(-X)+(-Y)]原=[(-X)+(-Y)补]补=11011000

则(-X)+(-Y)=-(01011000)2=-88

上述运算结果是正确的,但有时在补码运算中可能会出现错误的结果,请看下面例子。例6:设X=+100,Y=+50,用补码运算求X+Y,(-X)+(-Y)。解:[X]补=01100100[Y]补=00110010

[-X]补=10011100[-Y]补=11001110[X+Y]补=[X]补+[Y]补=01100100+00110010=10010110

[X+Y]原=[[X+Y]补]补=11101010X+Y=-(01101010)2=-106而[-X]补+[-Y]补=10011100+11001110=01101010[[-X]补+[-Y]补]原=(01101010)2=01101010(-X)+(-Y)=+(01101010)=+1062.溢出的判别计算机中判别溢出的方法通常采用双高位判别法。双高位判别法利用符号位(Kn-1位)

及最高数值位(Kn-2位)的进位情况来判断是否发生了溢出。为此,需引进两个符号:CS和CP。

CS:若符号位发生进位,则CS

=1;否则CS

=0。

CP:若最高数值位发生进位,则CP

=1;否则CP

=0。

当两个正数补码相加时,若数值部分之和大于2n-1,则数值部分必有进位CP=1;而符号位却无进位CS=0。这时CSCP的状态为“01”,发生正溢出。当两个负数补码相加时,若数值部分绝对值之和大于2n-1,则数值部分补码之和必小于2n-1,CP=0;而符号位肯定有进位CS=1,这时CSCP的状态为“10”,发生负溢出。当不发生溢出时,CS和CP的状态是相同的,即CSCP的状态为“00”或“11”。

例7:01011001(+89)10010010(-110)01101100(+108)10100100(-92)+)011110000(进位)+)100000000(进位)011000101(-59)100110110(+54)CS=0,CP=1,正溢出CS=1,CP=0,负溢出

例8:00110010(+50)11101100(-20)01000110(+70)11100010(-30)+)000001100(进位)+)111000000(进位)001111000(+120)111001110(-50)CS=0,CP=0,无溢出CS=1,CP=1,无溢出例9:01010101(+85)10111100(-68)11011101(-35)00011101(+29)+)110111010(进位)+)001111000(进位)100110010(+50)011011001(-39)CS=1,CP=1,无溢出CS=0,CP=0,无溢出

综上所述,对计算机而言,补码的引入使带符号数的运算都按加法处理。如果CS和CP的值相等,则表示运算结果正确,没有溢出,运算结果的正与负由符号位决定(如例8、例9);如果CS和CP的值不等,则表示运算结果不正确,发生了溢出现象(如例7)。

在计算机中,常用“异或”电路来判别有无溢出发生,即CSCP=1表示有溢出发生,否则无溢出发生。1.4定点数与浮点数1.4.1定点表示法在计算机中,如将小数点的位置固定不变,称为定点表示法。这个固定的位置是事先约定好的,不必用符号表示。用定点法表示的实数叫做定点数。通常,定点表示采用以下两种方法。1.定点整数表示法小数点固定在最低数值位之后,机器中能表示的所有数都是整数,这种方法称之为定点整数表示法。其格式如下:

符号位

数值位

其中“.”为设定的小数点位置

当用n位表示数N时,1位为符号位,n-1位为数值位,则N的范围是:

-2n-1≤N≤2n-1-1(1―11)

若n=8,则-128≤N≤127;若n=16,则-32768≤N≤32767。例如:若N=+1011011,n=8,则在计算机内用定点整数法可将N表示为:010110112.定点小数表示法小数点固定在最高数值位之前,机器中能表示的所有数即为纯小数,这种方法称之为定点小数表示法。其格式如下:

符号位

数值位

其中“.”为设定的小数点位置。当用n位表示数N时,1位为符号位,n-1位为数值位,则N的范围是:

-(1-21-n)≤N≤1-21-n(1―12)

例如:若N=-0.1011011,n=8,则在计算机内用定点小数法可将N表示为:010110111.4.2浮点表示法在计算机中,小数点位置并不是固定不变的,而是可以改变的,这种表示法称为浮点表示法。用浮点法表示的实数,叫做浮点数。任意一个二进制数N可以表示成如下形式:N=±M·2±E(1―13)

称作数符,表示数的正、负;E称为阶码,它前面的符号称为阶符,指明尾数小数点向右或向左浮动的方向,而阶码E指明尾数小数点移动的位数,所以阶符和阶码表明了数值N小数点的位置。

设阶码E的位数为m位,尾数M的位数为n位,则浮点数N的取值范围为:2-n·2-(2m-1)≤|N|≤(1-2-n)·2(2m-1)(1―14)

例如:对16位表示的浮点原码数,当m=7,n=7时,它所能表示的最大绝对值为:|N|max=(1-2-n)·2(2m-1)

=(1-2-7)·2(27-1)≈2127

它所能表示的除0以外的最小绝对值为:|N|min=2-n·2-(2m-1)=2-7·2-(27-1)

=2-134(1―15)

由此可见,由于浮点数能表示的数值范围很大,因此,在科学计算时不需要比例因子。为了提高精度,发挥尾数有效位的最大作用,还规定二进制浮点数其尾数数字部分原码的最高位为1,叫做规格化表示法。如:0.0010101可表示为2-2×0.1010100称为规格化浮点数。

1.5BCD码和ASCII码

1.5.1BCD码(BinaryCodedDecimal)

二进制数以其物理易实现和运算简单的优点在计算机中得到了广泛应用,但人们日常习惯最熟悉的还是十进制。为了既满足人们的习惯,又能让计算机接受,便引入了BCD码。它用二进制数码按照不同规律编码来表示十进制数,这样的十进制数的二进制编码,既具有二进制的形式,又具有十进制的特点,便于传递处理。1位十进制数有0~9共10个不同数码,需要由4位二进制数来表示。4位二进制数有16种组合,取其10种组合分别代表10个十进制数码。最常用的方法是8421BCD码,其中8、4、2、1分别为4位二进制数的位权值。表1―2给出了十进制数和8421BCD码的对应关系。

表1―28421BCD码

从表1―2中可看出8421BCD码与十进制数关系直观,二—十间相互转换容易。例如:将78.43转换成相应的BCD码,而将(01101001.00010101)BCD转换成十进制数。

78.43=(01111000.01000011)BCD(01101001.00010101)BCD=69.151.5.2BCD码运算及十进制调整若想让计算机直接用十进制的规律进行运算,则将数据用BCD码来存储和运算即可。例如:4+3即:(0100)BCD+(0011)BCD=(0111)BCD=715+12即:(00010101)BCD+(00010010)BCD

=(00100111)BCD=27

但是,8421BCD码可表示数的范围为0000~1111(即十进制的0~15),而十进制数为0000~1001(即0~9)。所以,在运算时,必须注意以下两点:①当两个BCD数相加结果大于1001(即大于十进制数9)时,为使其符合十进制运算和进位规律,需对BCD码的二进制运算结果加0110(加6)调整。例如:4+8(0100)BCD+(1000)BCD=(1100)BCD>1001,

调整后,其结果为:(1100)BCD+(0110)BCD=(00010010)BCD=12。②当两个BCD数相加结果在本位上并不大于1001,但有低位进位发生,使得两个BCD数与进位一起相加,其结果大于1001,这时也要作加0110(加6)调整。例如:用BCD数完成54+48的运算。解:54=(01010100)BCD,48=(01001000)BCD01010100+)01001000

10011100(低4位大于9)+)0110(低4位加6调整)10100010(低4位有进位)+)0110(高4位加6调整)000100000010

则(000100000010)BCD=1021.5.3ASCII码与奇偶校验在计算机的应用过程中,如操作系统命令,各种程序设计语言以及计算机运算和处理信息的输入输出,经常用到某些字母,数字或各种符号,如:英文字母的大、小写;0~9数字符;+、-、*、/运算符;<、>、=关系运算符等等。但在计算机内,任何信息都是用代码表示的,因此,这些符号也必须要有自己的编码。ASCII码采用7位二进制数对字符进行编码,它包括10个十进制数0~9;大写和小写英文字母各26个;32个通用控制符号;34个专用符号,共128个字符。其中数字0~9的ASCII编码分别为30H~39H,英文大写字母A~Z的ASCII编码从41H开始依次编至5AH。ASCII编码从20H~7EH均为可打印字符,而00H~1FH为通用控制符,它们不能被打印出来,只起控制或标志的作用,如0DH表示回车(CR),0AH表示换行控制(LF),04H(EOT)为传送结束标志。

第2章单片机基础

2.1概述2.2MCS—51系列单片机基本结构2.3中央处理器CPU2.4MCS—51单片机存储器及存储空间2.5并行输入/输出接口

2.1概述2.1.1单片机的产生与发展单片机出现的历史并不长,但发展十分迅猛。它的产生与发展和微处理器的产生与发展大体同步,自1971年美国Intel公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段:

第1阶段(1971~1976):单片机发展的初级阶段。1971年11月Intel公司首先设计出集成度为2000只晶体管/片的4位微处理器Intel4004,并配有RAM、ROM和移位寄存器,构成了第一台MCS—4微处理器,而后又推出了8位微处理器Intel8008,以及其它各公司相继推出的8位微处理器。

第2阶段(1976~1980):低性能单片机阶段。以1976年Intel公司推出的MCS—48系列为代表,采用将8位CPU、8位并行I/O接口、8位定时/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构,虽然其寻址范围有限(不大于4KB),也没有串行I/O,RAM、ROM容量小,中断系统也较简单,但功能可满足一般工业控制和智能化仪器、仪表等的需要。

第3阶段(1980~1983):高性能单片机阶段。这一阶段推出的高性能8位单片机普遍带有串行口,有多级中断处理系统,多个16位定时器/计数器。片内RAM、ROM的容量加大,且寻址范围可达64KB,个别片内还带有A/D转换接口。

第4阶段(1983~80年代末):16位单片机阶段。1983年Intel公司又推出了高性能的16位单片机MCS—96系列,由于其采用了最新的制造工艺,使芯片集成度高达12万只晶体管/片。第5阶段(90年代):单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。2.1.2单片机的应用由于单片机具有体积小、重量轻、价格便宜、功耗低,控制功能强及运算速度快等特点,因而在国民经济建设、军事及家用电器等各个领域均得到了广泛的应用。按照单片机的特点,其应用可分为单机应用与多机应用。

1.单机应用在一个应用系统中,只使用1片单片机称为单机应用,这是目前应用最多的一种方式。单片机应用的主要领域有:(1)测控系统。用单片机可以构成各种不太复杂的工业控制系统、自适应控制系统、数据采集系统等,达到测量与控制的目的。

(2)智能仪表。用单片机改造原有的测量、控制仪表,促进仪表向数字化、智能化、多功能化、综合化、柔性化方向发展。

(3)机电一体化产品。单片机与传统的机械产品相结合,使传统机械产品结构简化,控制智能化。(4)智能接口。在计算机控制系统,特别是在较大型的工业测、控系统中,用单片机进行接口的控制与管理,加之单片机与主机的并行工作,大大提高了系统的运行速度。

(5)智能民用产品。如在家用电器、玩具、游戏机、声像设备、电子秤、收银机、办公设备、厨房设备等许多产品中,单片机控制器的引入,不仅使产品的功能大大增强,性能得到提高,而且获得了良好的使用效果。2.多机应用单片机的多机应用系统可分为功能集散系统、并行多机处理及局部网络系统。

(1)功能集散系统。多功能集散系统是为了满足工程系统多种外围功能的要求而设置的多机系统。

(2)并行多机控制系统。并行多机控制系统主要解决工程应用系统的快速性问题,以便构成大型实时工程应用系统。

(3)局部网络系统。2.1.3单片机系列简介目前世界上单片机生产厂商很多,如:Intel、Motorola、Philips、Siemens、NEC、ADM、Zilog等公司,其主流产品有几十个系列,几百个品种。尽管其各具特色,名称各异,但作为集CPU、RAM、ROM(或EPROM)、I/O接口、定时器/计数器、中断系统为一体的单片机,其原理大同小异。现以Intel公司的系列产品为例,说明各系列之间的区别。

Intel公司从其生产单片机开始,发展到现在,大体上可分为3大系列:MCS—48系列、MCS—51系列、MCS—96系列。该3大系列的性能简介见表2―1。表2―1Intel单片机系列性能简介2.2MCS—51系列单片机基本结构2.2.1MCS—51单片机系列

MCS—51系列单片机虽已有10多种产品,但可分为两大系列:MCS—51子系列与MCS—52子系列。MCS—51子系列中主要有8031、8051、8751三种类型。而MCS—52子系列也有3种类型8032、8052、8752。各子系列配置见表2―2所示。表2―2MCS—51系列单片机配置一览表

表2―2中列出了MCS—51系列单片机的两个子系列,在4个性能上略有差异。由此可见,在本子系列内各类芯片的主要区别在于片内有无ROM或EPROM;MCS—51与MCS—52子系列间所不同的是片内程序存储器ROM从4KB增至8KB;片内数据存储器由128个字节增至256个字节;定时器/计数器增加了一个;中断源增加了1~2个。另外,对于制造工艺为CHMOS的单片机,由于采用CMOS技术制造,因此具有低功耗的特点,如8051功耗约为630mW,而80C51的功耗只有120mW。2.2.2MCS—51系列单片机内部结构及功能部件

MCS—51系列单片机的内部结构框图如图2―1所示。分析图2―1,并按其功能部件划分可以看出,MCS—51系列单片机是由8大部分组成的。图2―2为按功能划分的MCS—51系列单片机内部结构简化框图。这8大部分是:·一个8位中央处理机CPU。

·128个字节(MCS—52子系列为256字节)的片内数据存储器RAM。

·4KB(MCS—52子系列为8KB)的片内程序只读存储器ROM或EPROM(8031和8032无)。

·18个(MCS—52子系列为21个)特殊功能寄存器SFR。

·4个8位并行输入输出I/O接口:P0口、P1口、P2口、P3口(共32线),用于并行输入或输出数据。

·1个串行I/O接口。

·2个(MCS—52子系列为3个)16位定时器/计数器。

·1个具有5个(MCS—52子系列为6个或7个)中断源,可编程为2个优先级的中断系统。它可以接收外部中断申请,定时器/计数器中断申请和串行口中断申请。图2―1MCS—51系列单片机内部结构框图图2―2MCS—51系列单片机内部结构简化框图2.2.3单片机外部引脚说明

MCS—51系列单片机芯片均为40个引脚,HMOS工艺制造的芯片采用双列直插(DIP)方式封装,其引脚示意及功能分类如图2―3所示。CMOS工艺制造的低功耗芯片也有采用方型封装的,但为44个引脚,其中4个引脚是不使用的。图2―3MCS—51系列单片机引脚及总线结构

(a)管脚图;(b)引脚功能分类1.主电源引脚Vcc和VssVCC(40脚):接+5V电源正端;VSS(20脚):接+5V电源地端。

2.外接晶体引脚XTAL1和XTAL2XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端;对于CHMOS芯片,该引脚悬空不接。3.控制信号或与其它电源复用引脚控制信号或与其它电源复用引脚有RST/VPD、、和等4种形式。(1)RST/VPD(9脚):RST即为RESET,VPD为备用电源,所以该引脚为单片机的上电复位或掉电保护端。(2)(30脚):当访问外部存储器时,ALE(允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在P0口的低8位地址。

(3)(29脚):片外程序存储器读选通信号输出端,低电平有效。(4)(31脚):为访问外部程序存储器控制信号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论