第一章单片机基础知识§1-1单片机概述§1-2数制及数码内容提要:§1-1单片机概述一、什么是单片机单片机就是单片微型计算机(Single-ChipMicrocomputer)。微型计算机系统的硬件部分通常由五部分组成:输入设备运算器输出设备控制器存储器这种计算机系统通常由多块印刷电路板制成:多板机主板内存条CPUCPUCPU芯片内存条存储器芯片输入输出接口芯片定时计数器芯片A/D、D/A芯片单板机印刷电路板单硅晶片CPU存储器控制电路定时器时钟电路I/O口单片机(1)体积小,重量轻;(2)可靠性高,运行速度快,抗干扰能力强;(3)控制功能强,使用灵活,性价比高;(4)易扩展,易于开发;(5)受集成度限制,片内存储器容量较小,一般内ROM在8KB以下,内RAM在256B以内。单片机是应工业测控的需要而诞生的,它的结构与指令功能都是按照工业控制要求设计的,故又称单片微控制器(SingleChipMicrocontroller)。单片机特点:以单片机为核心的应用系统广泛应用于:家用电器;工业过程控制;仪器仪表;智能武器;航空、汽车等领域。二、单片机系统的组成CPUABDBCB存储器接口部件键盘显示器数码管打印机定时计数器单片机系统硬件部分软件部分单片机芯片外围器件CPU内存中断控制逻辑通用接口运算器寄存器组控制器并行I/O口串行UART定时/计数器ADC0809、DAC0832825382518255A、81552764、6264指令系统应用程序§1-2数制及数码计算机只识别和处理数字信息,数字是以二进制数的形式表示的。它易于物理实现,同时,资料存储、传送和处理简单可靠;运算规则简单,使逻辑电路的设计、分析、综合方便,使计算器具有逻辑性。一、数制1、常用数制(1.)十进制数:1985=1000+900+80+5=1×103+9×102+8×101+5×100特点:有0~9十个不同的符号。逢十进一。一般用下脚标D表示,如1985D,或无下脚标。(2.)二进制数:特点:有0,1两个不同的符号。逢二进一。二进制数的下脚标为B例如:对于整数,1001B=1×23+0×22+0×21+1×20=9D对于小数,0.101B=1×2-1+0×2-2+1×2-3=0.625D二进制数每一位的权是:以小数点分界,…..24,23,22,21,20.2-1,2-2,2-3,……(3.)十六进制数:有0~9,A,B,C,D,E,F共十六个不同的符号。逢十六进位。用下脚标“H”表示十六进制数。例:327H=3×162+2×161+7×160=807D3AB.11H=3×162+A×161+B×160+1×161+1×16-2=939.0664D2、数制的转换(1.)二进制转换为十进制数方法:按权展开。111.101B=1×22+1×21+1×20+1×2-1+0×2-2+1×2–3=4+2+1+0.5+0.125=7.625D(2.)十进制数转换为二进制数方法:整数部分除二取余,小数部分乘二取整45余数22111051211001222222即45=(101101)2例1、将十进制数45转换成二进制数。例2:十进制小数部分的转换:乘二取整0.6875×2最高位取11.37500.375×2取00.750×2取11.500.5×2最低位取11.0从上至下写成从左至右10110.6875D=0.B二进制数转换成八进制数与上述类似。(3.)十六进制数与二进制数之间的转换:十六进制数转换为二进制:9AB.7C5H100110101011.011111000101B二进制数转换十六进制数:0001101111100011.100101111000B1BE3.978H二、数码1、机器数与真值机器只认识二进制数:0、1。这是因为,电路状态常常有两种情况,如:电路的通、断;高电平、低电平;可用0、1表示。在机器中,这种0、1、0、1的表现形式称为机器数。机器数分为无符号数、带符号数。无符号数如:00000001、10010011、01010010、……等等,范围:00H~FFH。有符号数如:+1010110B、-1101001B、等等01010110B、11101001B2、机器数的编码及运算对带符号数而言,有原码、反码、补码之分,计算机内一般使用补码。(1)原码将数“数码化”,原数前“+”用0表示,原数前“-”用1表示,数值部分为该数本身,这样的机器数叫原码。设X——原数;则[X]原=X(X0)[X]原=2n-1–X(X0),n为字长的位数。如,[+3]原=00000011B[-3]原=27-(-3)=10000011B0有两种表示方法:00000000——+010000000——-0原码最大、最小的表示:+127、-128(2)反码规定正数的反码等于原码;负数的反码是将原码的数值位各位取反。[X]反=X(X0)[X]反=(2n–1)+X(X0)如,[+4]反=[+4]原=00000100B[-4]反=(28–1)+(-5)=11111111-00000101=11111010B反码范围:-128~+127两个0:+0——00000000B-0——11111111B运用补码可使减法变成加法。规定:正数的补码等于原码。负数的补码求法:1)反码+12)公式:[X]补=2n+X(X0)如,设X=-0101110B,则[X]原=10101110B则[X]补=[X]反+1=11010001+00000001=11010010B如,[+6]补=[+6]原=00000110B[-6]补=28+(-6)=10000000–00000110=11111010B8位补码的范围–128~+127。0的个数:只一个,即00000000而10000000B是-128的补码。原码、反码、补码对照表:见下表123(3)补码补码的概念:现在是下午3点,手表停在12点,可正拨3点,也可倒拨9点。即是说-9的操作可用+3来实现,在12点里:3、-9互为补码。八位二进制数所能表示的数据范围机器数无符号数原码反码补码000000000+0+0+0000000011+1+1+1.....01111111127+127+127+12710000000128-0-127-12810000001129-1-126-127..........11111110254-126-1-211111111255-127-0-1(4)补码的运算当X≥0时,[X]补=[X]反=[X]原[[X]补]补=[X]原[X]补+[Y]补=[X+Y]补[X-Y]补=[X+(-Y)]补例:已知X=52Y=38求X-Y方法1:减法:X-Y=52-38=1400110100-)0010011000001110方法2:加法X-Y=[[X-Y]补]补=[[X]补+[-Y]补]补=[[52]补+[-38]补]补=[14]补=14[52]补:00110100[-38]补:+)11011010100001110自然丢失计算机在做算术运算时,必需检查溢出,以防止发生错误(5)运算的溢出问题由于计算机中表示数据的字长(位数)有一定限制,所以数据的表示应有一个范围。如字长8位时;补码范围-128~+127若运算结果超出这个范围,便溢出。例:[98]补:01100010[25]补:+)00011001[123]补001111011未溢出00Cs+1Cs(未溢出)[85]补:01010101[47]补:+)00101111[132]补:10000100溢出01Cs+1Cs(溢出)错:两个正数相加和为负数。[-85]补:10101011[-47]补:+)11010001[-132]补:101111100溢出10Cs+1Cs错:两个负数相加和为正数。[-19]补:01010101[-79]补:+)10110001[-98]补:11001111未溢出11Cs+1Cs错:两个负数相加和为正数。总之:结果正确(无溢出)时,Cs+1=Cs结果错误(溢出)时,Cs+1≠Cs溢出判断:溢出=Cs+1Cs(即结果是0为无溢出;1为有溢出)1、(6)十进制数的编码对机器:二进制数方便,对人:二进制数不直观,习惯于十进制数。在编程过程中,有时需要采用十进制运算,但机器不认识十进制数。怎么办?可以将十进制的字符用二进制数进行编码:00000501011010111110001601101011200107011111003001181000110140100910011110这叫做二进制数对十进制编码——BCD码。上述每4位二进制数表示一个十进制字符,这4位中各位的权依次是:8、4、2、1——8421BCD码。BCD码的运算:例、18+)32100011000+)0000001100011011B是非BCD码(错)需进行十进制调整:00011000+)0000001100011011(个位大于9,应进1)+)0110(加6使进1)00100001(结果形如21)BCD码加法规则:两个BCD数相加时,“某位”的和小于10则保持不变;两个BCD数相加时,“某位”的和大于9,则和数应加6修正。BCD码减法规则:两个BCD数相减时,“某位”的差未发生借位,则差数保持不变;两个BCD数相减时,“某位”发生了借位,其差应减6修正。这里“某位”指BCD数中的“个位”、“十位”、“百位”、……加法举例:01100101(65)+)10010111(97)11111100+)01100110(加66调整)101100010(162)减法举例:00110100(34)-)00010101(15)00011111-)0110(减6调整)00011001(29)(7)字符信息的表示计算机能识别0、1、0、1、……;这些0、1、0、1、……有的代表数值,有的仅代表要处理的信息(如字母、标点符号、数字符号等文字符号),所以,计算机不仅要认识各种数字,还要能识别各种文字符号。人们事先已对各种文字符号进行二进制数编码。如,美国信息交换标准码——ASCII码,用一个字节表示一个字符。低7位是字符的ASCII码值;最高位是通信时的校验位。行列0000010100111001011101110000NULDLESP0@P、p0001SOHDC1!1AQaq0010STXDC2”2BRbr0011ETXDC3#3CScs0100EOTDC4$4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111BELETB’7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;K[k{1100FFFS,<L\l¦1101CRGS-=M]m}1110SORS·>N↑n~1111SIUS/?O_oDEL综上所述,计算机中的数可以有各种不同的表示方法,计算机中以一个字节为一个单元保存数据,一个字节为8位二进制数,可以有256种组合,也就是可以表示256个数据,我们称它为机器数,每一个机器数实际表示的是什么,要看采用的是那种表示方法。