单片机内部主要由数字电路组成。为了在分析单片机内部电路结构时更容易理解,这里简单介绍一下单片机中常用的基础电路。
1.与门电路
(1)与门的电路结构与原理
与门的电路结构如图1-27所示,它是一个由二极管和电阻构成的电路,其中A、B为输入端,S1、S2为开关,Y为输出端,+5V电压经R1、R2分压,在E点得到+3V的电压。
图1-27 与门的电路结构
对与门电路工作原理说明如下:
当S1、S2均拨至位置2时,A、B端电压都为0V,由于E点电压为3V,所以二极管VD1、VD2都导通,E点电压马上下降到0.7V,Y端输出电压为0.7V。
当S1拨至位置2、S2拨至位置1时,A端电压为0V,B端电压为5V,由于E点电压为3V,所以二极管VD1马上导通,E点电压下降到0.7V,此时VD2正端电压为0.7V,负端电压为5V,VD2处于截止状态,Y端输出电压为0.7V。
当S1拨至位置1、S2拨至位置2时,A端电压为5V,B端电压为0V,VD2导通,VD1截止,E点电压为0.7V,Y端输出电压为0.7V。
当S1、S2均拨至位置1时,A、B端电压都为5V,VD1、VD2均不能导通,E点电压为3V,Y端输出电压为3V。
为了分析方便,在数字电路中通常将0~1V的电压规定为低电平,用“0”表示,将3~5V的电压称为高电平,用“1”表示。根据该规定,可将与门电路工作原理简化如下:
当A=0、B=0时,Y=0;
当A=0、B=1时,Y=0;
当A=1、B=0时,Y=0;
当A=1、B=1时,Y=1。
由此可见,与门电路的功能是:只有输入端都为高电平时,输出端才会输出高电平;只要有一个输入端为低电平,输出端就会输出低电平。
(2)真值表
真值表是用来列举电路各种输入值和对应输出值的表格。它能让人们直观地看出电路输入与输出之间的关系。如表1-2所示为与门电路的真值表。
表1-2 与门电路的真值表
(3)逻辑表达式
真值表虽然能直观地描述电路输入和输出之间的关系,但比较麻烦且不便记忆。为此可采用关系式来表达电路输入与输出之间的逻辑关系,这种关系式称为逻辑表达式。
与门电路的逻辑表达式为
式中的“·”表示“与”,读作“A与B”(或“A乘B”)。
(4)与门的图形符号
如图1-27所示的与门电路由多个元件组成,这在画图和分析时很不方便,可以用一个简单的符号来表示整个与门电路,这个符号称为图形符号。与门电路的图形符号如图1-28所示,其中旧符号是指早期采用的符号,常用符号是指有些国家采用的符号,新标准符号是指我国最新公布的标准符号。
图1-28 与门图形符号
(5)与门芯片
在数字电路系统中,已很少采用由分立元件组成的与门电路,而是采用集成化的与门芯片(又称与门集成电路)。74LS08P是一种较常用的与门芯片,其外形如图1-29所示,74LS08P内部有4个与门,每个与门有两个输入端、一个输出端。
图1-29 与门芯片74LS08P的外形
2.或门电路
(1)或门的电路结构与原理
或门的电路结构如图1-30所示,它由二极管和电阻构成,其中A、B为输入端,Y为输出端。
图1-30 或门的电路结构
对或门电路工作原理说明如下:
当S1、S2均拨至位置2时,A、B端电压为0V,二极管VD1、VD2都无法导通,E点电压为0,Y端输出电压为0V,即A=0、B=0时,Y=0。
当S1拨至位置2、S2拨至位置1时,A端电压为0V,B端电压为5V,二极管VD2马上导通,E点电压为4.3V,此时VD1处于截止状态,Y端输出电压为4.3V,即A=0、B=1时,Y=1。
当S1拨至位置1、S2拨至位置2时,A端电压为5V,B端电压为0V,VD1导通,VD2截止,E点电压为4.7V,Y端输出电压为4.3V,即A=1、B=0时,Y=1。
当S1、S2均拨至位置1时,A、B端电压都为5V,VD1、VD2均导通,E点电压为4.3V,Y端输出电压为4.3V,即A=1、B=1时,Y=1。
由此可见,或门电路的功能是:只要有一个输入端为高电平,输出端就为高电平;只有输入端都为低电平,输出端才输出低电平。
(2)真值表
或门的真值表如表1-3所示。
表1-3 或门电路的真值表
(3)逻辑表达式
或门电路的逻辑表达式为
式中的“+”表示“或”。
(4)或门的图形符号
或门的图形符号如图1-31所示。
图1-31 或门图形符号
(5)或门芯片
74LS32N是一种较常用的或门芯片,其外形如图1-32所示。74LS32N内部有4个或门,每个或门有两个输入端、一个输出端。
图1-32 或门芯片74LS32N的外形
3.非门电路
(1)非门的电路结构与原理
非门的电路结构如图1-33所示,它是由三极管和电阻构成的电路,其中A为输入端,Y为输出端。
图1-33 非门的电路结构
对非门电路工作原理说明如下:
当S1拨至位置2,A端电压为0V时,三极管VT1截止,E点电压为5V,Y端输出电压为5V,即A=0时,Y=1。
当S1拨至位置1,A端电压为5V时,三极管VT1导通,E点电压低于0.7V,Y端输出电压也低于0.7V,即A=1时,Y=0。
由此可见,非门电路的功能是:输入与输出状态总是相反。
(2)真值表
非门电路的真值表如表1-4所示。
表1-4 非门电路的真值表
(3)逻辑表达式
非门电路的逻辑表达式为
式中的“¯”表示“非”(或相反)。
(4)非门的图形符号
非门的图形符号如图1-34所示。
图1-34 非门图形符号
(5)非门芯片
74LS04P是一种常用的非门芯片(又称反相器),其外形如图1-35所示。74LS04P内部有6个非门,每个非门有一个输入端、一个输出端。
图1-35 非门芯片74LS04P的外形
4.与非门电路
(1)结构、原理与图形符号
与非门是由与门和非门组成的,其逻辑结构及图形符号如图1-36所示。
图1-36 与非门
对与非门工作原理说明如下:
当A端输入“0”、B端输入“1”时,与门的C端会输出“0”,C端的“0”送到非门的输入端,非门的Y端(输出端)会输出“1”。
读者可以按上述方法分析A、B端其他三种输入情况,这里不赘述。
(2)真值表
与非门的真值表如表1-5所示。
表1-5 与非门的真值表
(3)逻辑表达式
与非门的逻辑表达式为
(4)逻辑功能
与非门的逻辑功能是:只有输入端全为“1”时,输出端才为“0”;只要有一个输入端为“0”,输出端就为“1”。
(5)与非门芯片
74LS00P是一种常用的与非门芯片,其外形如图1-37所示。74LS00P内部有4个与非门,每个与非门有两个输入端、一个输出端。
图1-37 与非门芯片74LS00P的外形
5.或非门电路
(1)结构、原理与图形符号
或非门是由或门和非门组合而成的,其逻辑结构和图形符号如图1-38所示。
图1-38 或非门
对或非门工作原理说明如下:
当A端输入“0”、B端输入“1”时,或门的C端会输出“1”,C端的“1”送到非门的输入端,结果非门的Y端(输出端)会输出“0”。
读者可以按上述方法分析A、B端其他三种输入情况。
(2)真值表
或非门的真值表如表1-6所示。
表1-6 或非门的真值表
(3)逻辑表达式
或非门的逻辑表达式为
根据逻辑表达式很容易求出与输入值对应的输出值。例如,当A=0、B=1时,Y=0。
(4)逻辑功能
或非门的逻辑功能是:只有输入端全为“0”,输出端才为“1”;只要输入端有一个为“1”,输出端就为“0”。
(5)或非门芯片
74LS27N是一种常用的或非门芯片,其外形如图1-39所示。74LS27N内部有三个或非门,每个或非门有三个输入端、一个输出端。
图1-39 或非门芯片74LS27N的外形
数制就是数的进位制。在日常生活中,人们经常会接触到0、7、8、9、168、295等这样的数字,它们就是一种数制——十进制数。另外,数制还有二进制数和十六进制数等。
1.十进制数
十进制数有以下两个特点:
①有10个不同的数码:0、1、2、3、4、5、6、7、8、9。任意一个十进制数均可以由这10个数码组成。
②遵循“逢十进一”的计数原则。对于任意一个十进制数 N ,它都可以表示成
其中, m 和 n 为正整数。
这里的 a n- 1 , a n- 2 ,…, a - m 称为数码,10称为基数,10 n- 1 ,10 n- 2 ,…,10 - m 是各位数码的位权。
例如,根据上面的方法可以将十进制数3259.46表示成3259.46=3×10 3 +2×10 2 +5×10 1 +9×10 0 +4×10 - 1 +6×10 - 2 。
请试着按上面的方法写出8436.051的展开式。
2.二进制数
十进制是最常见的数制,除此以外,还有二进制数、八进制数、十六进制数等。在数字电路中,二进制数用得最多。
(1)二进制数的特点
二进制数有以下两个特点:
①有两个数码:0和1。任何一个二进制数都可以由这两个数码组成。
②遵循“逢二进一”的计数原则。对于任意一个二进制数 N ,它都可以表示成
其中, m 和 n 为正整数。
这里的 a n- 1 , a n- 2 ,…, a -m 称为数码,2称为基数,2 n- 1 ,2 n- 2 ,…,2 -m 是各位数码的位权。
例如,二进制数11011.01可表示为(11011.01) 2 =1×2 4 +1×2 3 +0×2 2 +1×2 1 +1×2 0 +0×2 - 1 +1×2 - 2 。
请试着按上面的方法写出(1011.101) 2 的展开式。
(2)二进制数的四则运算
①加法运算。加法运算法则是“逢二进一”。举例如下:
当遇到“1+1”时就向相邻高位进1。
例如,求(1011) 2 +(1011) 2 ,可以用与十进制数相同的竖式计算:
即(1011) 2 +(1011) 2 =(10110) 2 。
②减法运算。减法运算法则是“借一当二”。举例如下:
当遇到“0-1”时,需向高位借1当2用。
例如,求(1100) 2 -(111) 2 ,可以用与十进制数相同的竖式计算:
即(1100) 2 - (111) 2 =(101) 2 。
③乘法运算。乘法运算法则是“各数相乘,再作加法运算”。举例如下:
例如,求(1101) 2 ×(101) 2 ,可以用与十进制数相同的竖式计算:
即(1101) 2 ×(101) 2 =(1000001) 2 。
④除法运算。除法运算法则是“各数相除,再作减法运算”。举例如下:
例如,求(1111) 2 ÷(101) 2 ,可以用与十进制数相同的竖式计算:
即(1111) 2 ÷(101) 2 =(11) 2 。
3.十六进制数
十六进制数有以下两个特点:
①有16个数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,这里的A、B、C、D、E、F分别代表10、11、12、13、14、15。
②遵循“逢十六进一”的计数原则。对于任意一个十六进制数 N ,它都可以表示成
其中, m 和 n 为正整数。
这里的 a n- 1 , a n- 2 ,…, a - m 称为数码,16称为基数,16 n- 1 ,16 n- 2 ,…,16 - m 是各位数码的位权。
例如,十六进制数可表示为(3A6.D) 16 =3×16 2 +10×16 1 +6×16 0 +13×16 - 1 。
请试着按上面的方法写出(B65F.6) 16 的展开式。
4.二进制数与十进制数的转换
(1)二进制数转换成十进制数
二进制数转换成十进制数的方法是:将二进制数各位数码与位权相乘后求和,就能得到十进制数。
例如,(101.1) 2 =1×2 2 +0×2 1 +1×2 0 +1×2 - 1 =4+0+1+0.5=(5.5) 10
(2)十进制数转换成二进制数
十进制数转换成二进制数的方法是:采用除2取余法,即将十进制数依次除2,并依次记下余数,一直除到商数为0,最后把全部余数按相反次序排列,就能得到二进制数。
例如,将十进制数(29) 10 转换成二进制数,方法为
即(29) 10 =(11101) 2 。
5.二进制数与十六进制数的转换
(1)二进制数转换成十六进制数
二进制数转换成十六进制数的方法是:从小数点起向左、右按4位分组,整数部分不足4位的,可在最高位的左边加“0”补齐,小数点部分不足4位的,可在最低位右边加“0”补齐,每组以其对应的十六进制数代替,将各个十六进制数依次写出即可。
例如,将二进制数(1011000110.111101) 2 转换为十六进制数,方法为
注意:十六进制的16位数码为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,它们分别与二进制数0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110、1111相对应。
(2)十六进制数转换成二进制数
十六进制数转换成二进制数的过程与上述方法相反。其过程是:从左到右将待转换的十六进制数中的每个数依次用4位二进制数表示。
例如,将十六进制数(13AB.6D) 16 转换成二进制数,方法为
单片机中的数是以二进制表示的,分为有符号数和无符号数两种。
1.有符号数的表示方法
有符号数是指有“+(正)”“-(负)”符号的数。由于单片机中的数采用二进制数表示,所以只有1和0两种数字,其中用“0”表示“+”,用“1”表示“-”。因为单片机中的数据一般只有8位,且最高位为符号位,所以只有7位用来表示数值,可以表示的数据范围是-127~+128。
有符号数的表示方法有三种:原码、反码和补码。同一有符号数,用三种表示方法得到的数是不同的。下面用三种方法来表示两个有符号数+1011101和-1011101。
(1)原码
用“1”表示“-”,用“0”表示“+”,其他各数保持不变,采用这种方法表示出来的数称为原码。
(2)反码
反码是在原码的基础上求得的。对于正的有符号数,其反码与原码相同;对于负的有符号数,其反码除符号位与原码相同外,其他各位数由原码各位数取反得到。
(3)补码
补码是在反码的基础上求得的。对于正的有符号数,其补码与反码、原码相同;对于负的有符号数,其补码除符号位与反码一致外,其他数由反码加1得到。
2.有符号数的运算
虽然用原码表示有符号数时简单、直观,但在单片机中,如果采用原码进行减法运算,则需要很复杂的硬件电路;如果用补码,则可将减法运算变为加法运算,从而省去减法器且简化硬件电路。
例如,用二进制减法运算和补码加法运算分别计算35-21。
①二进制减法运算:35-21=00100011-00010101=00001110
②用补码加法运算:先将算式转换成补码形式,35-21=[+35]+[-21]=[00100011] 原 +[10010101] 原 =[00100011] 反 +[11101010] 反 =[00100011] 补 +[11101011] 补 。
再对补码进行二进制加法运算:
从上面的运算过程可以看出,补码的符号也参与运算,在8位单片机中,由于数据长度只能有8位,上式结果有9位,故第9位会自然丢失,补码加法的运算结果与二进制减法的运算结果是一样的,都是00001110=14。
由此可见,用补码的形式进行运算,可以将减法运算转换为加法运算,运算结果仍是正确的,所以单片机普遍采用补码的形式表示有符号数。
3.无符号数的表示方法
无符号数因为不用符号位,8位全部用来表示数据,所以这种方法可以表示的数据范围是0~255。8位二进制数的不同表示方式的换算关系如表1-7所示。
表1-7 8位二进制数的不同表示方式的换算关系
(续表)
从表1-7中可以看出,对于同一个二进制数,当采用不同的表示方式时,得到的数值是不同的,特别是大于10000000的有符号数。若想确切知道单片机中的二进制数所对应的十进制数是多少,则先要了解该二进制数是有符号数还是无符号数,再换算出该二进制数对应的十进制数。