《8051单片机原理及应用》 课件 第一章 单片机里的数_第1页
《8051单片机原理及应用》 课件 第一章 单片机里的数_第2页
《8051单片机原理及应用》 课件 第一章 单片机里的数_第3页
《8051单片机原理及应用》 课件 第一章 单片机里的数_第4页
《8051单片机原理及应用》 课件 第一章 单片机里的数_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

网络空间安全学院网络安全基础技术应用第一章单片机里的数目录CONTENT1.二进制数2.进制的转换和有符号数3.单片机程序中的数据类型1.1.1二进制数的电路实现单片机是一颗集成电路芯片,如图1.1-1所示。集成电路是采用特定的制造工艺,将晶体管、电容、电阻和电感等元件以及布线互联,制作在半导体晶片上,进而封装在一个管壳内,变成具有某种电路功能的微型电子器件。集成电路的基本元器件是晶体管(包括了三极管、场效应管等),它的开关特性构成了计算机世界0和1的物理基础,是计算机信息存储和运算的基石。图1.1-2是三极管输出特性。图1.1-1单片机芯片图1.1-2三极管的输出特性曲线1.1.1二进制数的电路实现1.当三极管处于饱和区,VCE间电压很小,近似0V,相当于短路。因此三极管饱和时,三极管输出低电平,用二进制符号“0”表示,如图1.1-3(a)所示。2.当三极管处于截止状态,IC=0,相当于断路。C极电压等于电源电压VCC,三极管输出高电平,用二进制符号“1”表示,如图1.1-3(b)所示。图1.1-3是三极管开关等效电路图1.1-3中三极管具有二态性,要么关闭要么打开,二进制数也有这样的特点,要么“1”要“0”,用二进制数完美表达了三极管的二态性,因此我们忽略计算机的底层器件,只关注计算机的数。图1.1-3(a)图1.1-3(b)图1.1-31.1.2数的符号和记法古代人们用石头记数、结绳记数、刻痕记数,后来出现了阿拉伯数字0~9,这10个数字和人类10个手指的数量正好吻合,且符号好写好记,很快成为国际通用数字符号。阿拉伯数字是十进制数,采用位值法,加上小数点、正负号,可以表示所有的有理数。所谓进制,就是进位的方法:二进制——逢2进1;八进制——逢8进1;十进制——逢10进1;十六进制——逢16进1。1.1.2数的符号和记法每种进制使用的符号是不一样的,“符号”意味着一种表示方法。二进制的符号最少,十六进制的符号最多。如表1.1-1所示。二进制符号0,1。八进制符号:0到7十进制符号:0到9。十六进制符号:0到F。表1.1-1不同进制数的符号(字母不区分大小写)进制符号进位法则二进制0,1逢二进一八进制0,1,2,3,4,5,6,7逢八进一十进制0,1,2,3,4,5,6,7,8,9逢十进一十六进制0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f逢十六进一1.1.2数的符号和记法所谓位值法,是一种计数方法。一组有顺序的数字,每个数字所表示的大小,既和它本身的数值有关,也和它所在的位置有关。位值法中,数字所在的位置也称权重。位值法的核心思想是,相同的数字在不同的位置上具有不同的数值。表1.1-1中的进制都采用位值法计数,以整数部分是4位,小数部分也是4位的任意数为例,不同进制下的权重如表1.1-2所示。表1.1-2不同进制的权重(X代表某进制的任意符号)进制XXXX.XXXX二进制232221202-12-22-32-4八进制838281808-18-28-38-4十进制10310210110010-110-210-310-4十六进制16316216116016-116-216-316-41.1.2数的符号和记法八、十、十六进制数的权重基数分别是2、8、10、16,权重的幂和位置有关。在位值法中,当数值超过了符号表达的范围,就从左往右进位。表1.1-3列出了0~20不同进制下的记数,如果要表达相同数值的数字,二进制数最长,十六进制数最短。表1.1-3数字0~20在不同进制下的记法十进制二进制16进制0001112102311341004510156110671117810008910019101010A十进制二进制16进制111011B121100C131101D141110E151111F1610000101710001111810010121910011132010100141.1.2数的符号和记法为了区分各种进制,采用后缀、前缀、下标等标记方法书写不同进制的数。通常汇编程序使用后缀法,C语言程序使用前缀法,不区分大小写。(1)后缀法。B:binary,二进制,123BO:octonary,八进制,123OD:decimal,十进制,123DH:hexadecimal,十六进制,123H。(2)下标法:(101001)2(1321)8(100)10,也可以不写下标,直接写100,不写下标默认是十进制。(3AC)161.1.2数的符号和记法(3)前缀法。0b:表示二进制。举例:0b101001,0b11000o:表示八进制。举例:0o1321,0o144没有前缀:表示十进制。举例:10,20,25,1000x:表示16进制数。举例:0x64,0x3AC表1.1-4展示了数字100在不同进制下程序里的前后缀表示方法,单片机程序中最常使用的是十六进制和十进制。表1.1-4计算机语言中不同进制的前后缀(以100为例,不区分大小写)进制英文符号前缀(C语言)后缀(汇编语言)二进制Binary0,10b0110010001100100B八进制Octal0-70o144144O十进制Decimal0-9100100D十六进制Hexadecimal0-9,A-F0x6464H1.1.3数的长度1.比特(bit)一位二进制的数字要么是0,要么是1,我们说二进制的一个数字位就是1个比特(bit)。比特也是信息量单位。一串二进制符号构成了一个信息块,信息块有多少个二进制符号,就说有多少个bit的信息量。在计算机物质世界里,1个比特是1个半导体晶体管开关器件,参考图1.1-3,它有“0”或“1”两种可能值,1比特是1个二进制数字位。怎么理解bit的概念呢?将图1.1-3中的三极管替换成游戏手柄,1号手柄控制前进和后退两个方向,手柄向前是前进,手柄向后是后退,此时该“手柄”就是1个bit。现在增加2号手柄,控制左右两个方向:手柄向左是左拐,手柄向右是右拐。它和1号手柄组合在一起,可控制四个方向,用四组编码表示:左前=00右前=10左后=01右后=111.1.3数的长度由此可知,两位二进制数,有四种组合,一个组合称为一个“码字”,在这个举例里有4个码字,分别是00、01、10、11。比特位数越多,编出的码字就越多。码字数量用2的幂次方计算,对应关系如表1.1-5所示。表1.1-5二进制位数和码字数量对应关系二进制位数码字数量121=2=(10)2222=4=(100)2323=8=(1000)2424=16=(10000)2525=32=(100000)2626=64=(1000000)2727=128=(10000000)2828=256=(100000000)2929=512=(1000000000)210210=1024=(10000000000)211211=2048=(100000000000)212212=4096=(1000000000000)21.1.3数的长度观察表1.1-5,有如下2个结论:二进制位的数量决定了码字数量,码字数量随着二进制位数的增加呈幂增长。 (公式1)2个比特能编出4个码字;3个比特能编出8个码字。第1列“位数”和第2列中“0”的个数一致,比如,10位二进制数,码字数量是1024个,1024用二进制表示,1的后面有10个“0”,互相呼应。1.1.3数的长度2.字节(byte)1个字节由8位二进制数构成。表1.1-5表明1个字节的码字数量是256,可编码字从0b00000000到0b11111111,对应数值范围0~255。一个字节足以表达某种生活中很多事务的状态,比如天气的变化,各种组合都没超出256种;通用计算机的键盘也没达到256个按键,……。因此,在计算机世界里字节是基本单位,单片机程序里使用最多的数据类型就是1个字节长度的数据。图1.1-4展示了1个字节按位展开的格式,位值高(最高有效位,MSB)的在前,位值低(最低有效位,LSB)的在后。图1.1-4也是单片机的1个存储单元,1个存储单元的容量是1个字节。bit7bit6bit5bit4bit3bit2bit1bit0字节Byte

图1.1-4字节按位展开1.1.4二进制编码计算机处理的信息除了数字,还有字母、图形、汉字、声音等非数值数据,这样就出现了编码的需求。“编码”是信息从一种形式转换为另一种形式的过程,具体讲就是让多位二进制数表达某个特定的信息。因为n位二进制数可以组合成2的n次方个不同的信息,所以给每个信息规定一个具体码字,这个过程就叫编码。1.BCD码(Binary-CodedDecimal)BCD码以4位二进制数为一个单位表示1位十进制数。按照表1.1-5,4位二进制数有16个码字,但是十进制数只有0~9十个数字符号,多出来6个,所以BCD码只用了前10个0000~1001表示十进制的0~9,剩下的码字不用。BCD码也用来表示十六进制数,此时16个码字全部使用。因为二进制各位的权值为8、4、2、1,二进制对十进制、十六进制的编码是加权求和,因此也称8421有权码。1.1.4二进制编码表1.1-6列出了BCD编码。多位的十进制数要用多组BCD码表示。十六进制同理。例1:十进制的123用BCD码表示:0001001000111:1=0×23+0×22+0×21+1×20,1的编码是0001;2:2=0×23+0×22+1×21+0×20,2的编码是0010;3:3=0×23+0×22+1×21+1×20,3的编码是0011;例2:十六进制数0x6F8用BCD码表示:0110111110006:1=0×23+1×22+1×21+0×20,6的编码是0110;F:15=1×23+1×22+1×21+1×20,F的编码是1111;8:8=1×23+0×22+0×21+0×20,8的编码是1000;1.1.4二进制编码十进制数BCD码

十六进制数BCD码00000000001000110001200102001030011300114010040100501015010160110601107011170111810008100091001910011000010000A10101100010001B10111200010010C11001300010011D11011400010100E11101500010101F111116000101101000010000表1.1-6BCD编码1.2.1十进制数转换为R进制计算机里二进制的数据有以下几种长度:位(bit):一个二进制数就是一个位,称为比特,数值范围0、1。字节(byte):8位二进制数构成,数值范围0~255或0x00~0xFF。字(word):4个字节构成,对应32位二进制数,数值范围0~4294967295(0x00000000~0xFFFFFFFF)。半字(halfword):2个字节构成,对应16位二进制数,数值范围0~65535(0x0000~0xFFFF)。1.2.1十进制数转换为R进制计算机里二进制的数据有以下几种长度:位(bit):一个二进制数就是一个位,称为比特,数值范围0、1。字节(byte):8位二进制数构成,数值范围0~255或0x00~0xFF。字(word):4个字节构成,对应32位二进制数,数值范围0~4294967295(0x00000000~0xFFFFFFFF)。半字(halfword):2个字节构成,对应16位二进制数,数值范围0~65535(0x0000~0xFFFF)。1.2.1十进制数转换为R进制采用模运算方法,取余数的逆序。所谓模运算就是两个整数相除,得到的余数就是模运算结果。例1和例2用短除法开展除法运算,每个短除号的里面是被除数,左边是除数,下面是商,右边是余数,当商为0时运算结束,转换结果是余数的逆序。例1:(1688)10=(011010011000)2开展模2运算例2:(1688)10=(698)16开展模16运算0166161051616888961.2.2R进制数转换为十进制采用加权求和运算方法,按照位值展开求和,最左边的是最低有效位用LSB表示;最右边的是最高有效位用MSB表示。例1:(011010011000)2=(1688)10首先把二进制按照“位值”展开:MSB

LSB权重21121029282726252423222120位值0110100110001.2.2R进制数转换为十进制其次对不为0的位求和:1×23+1×24+1×27+1×29+1×210=1688例2:(698)16=(1688)10首先把二进制按照“位值”展开:MSB

LSB权重162161160位值698其次对不为0的位求和:8×160+9×161+6×162=16881.2.3有符号数二进制数分“无符号数”和“有符号数”。“无符号数”都是正数,没有符号位;“有符号数”有正数也有负数,最高位是符号位:0——正数;1——负数。在编写程序时,如果数据是事务状态的抽象,如天气、键盘符号等,就用“无符号数”;如果数据是参与计算的数值,如温度,就使用“有符号数”。表1.2-1是1个字节的有符号数,数值范围从-128~127,而不是0~255。表1.2-1有符号数(1个字节)二进制16进制十进制000000000x000000000010x011………011111110x7f127100000000x80–128100000010x81–127100000100x82–126…。。。。。。111111110xff-11.2.3有符号数计算机中有符号数用补码表示。1.原码计算机中数的原码由符号位和数值部分组成。最高位是符号位,0代表正数,1代表负数,其余位是数值位,数值部分与数的二进制表示一致。原码表示法举例:(00000000)2=(0)10;(01111111)2=(127)10;(10000001)2=(-1)10;(11111111)2=(-127)101.2.3有符号数2.反码反码是原码和补码之间的过渡码,正数的反码和原码相同;负数的反码,其符号位和原码相同,数值位按原码取反。反码表示法举例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-1)10;(11111111)2=(-0)10;0无所谓正负,综上,“0”在反码中有两个表达方式。1.2.3有符号数3.补码为了避免反码中“0”的不唯一,补码规定:正数的补码和原码相同;负数的补码,其符号位和原码相同,数值位在反码上加1。补码表示法举例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-2)10;(11111111)2=(-1)10;1.2.3有符号数3.补码为了避免反码中“0”的不唯一,补码规定:正数的补码和原码相同;负数的补码,其符号位和原码相同,数值位在反码上加1。补码表示法举例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-2)10;(11111111)2=(-1)10;1.2.4小知识:电脑计算器使用电脑自带的“计算器”小程序可以实现进制转换。打开电脑里的计算器,在“查看”下拉菜单里选择“程序员”模式,选择进制。图1.2-1设置电脑“计算器”程序员模式;图1.2-2输入二进制数10100,点击其他进制,就实现了进制转换。图1.2-1计算器里的“程序员”模式图1.2-2在计算器里进行数制转换1.3单片机程序中的数据类型C语言是一门面向过程的、抽象化的通用计算机编程语言,它可读性好,易于调试、修改和移植,C语言兼顾了高级语言和汇编语言的优点,编译效率高,各种计算机平台包括嵌入式处理器、超级计算机等都支持C语言的编译,是计算机产业最重要的编程语言,在编程语言中的具有举足轻重的地位。C语言的特点:1.具有结构化的控制语句C语言是一种结构化的语言,它有专门的流程控制语句。如顺序结构语句、if...else和switch等选择分支语句、for,while等循环语句,这些可以实现程序流程的逻辑控制。C语言的主体是函数,一个C语言程序就是由若干头文件和函数组成,但是主函数只有一个,其他函数都可以被主函数调用,可以以函数为单位实现模块化的程序搭建。1.3单片机程序中的数据类型2.丰富的数据类型C语言包含的数据类型广泛,除了传统的字符型、整型、浮点型、数组等数据类型,还有指针类型,可以对硬件内存地址直接进行读写。3.丰富的运算符C语言包含34个运算符,赋值、括号、分号都是运算符,算术运算、逻辑运算都有对应的运算符,这些使得C语言的表达式类型和运算符类型非常丰富。面向单片机编程的C语言称为单片机C语言,简称C51,C51符合ANSI-C标准,且有一定的扩充,其扩充部分与单片机硬件特性有关。1.3.1数据类型计算机程序由数据和算法构成,所谓数据是指具有一定格式的数字或数值。数据是计算机操作的对象,不管使用任何语言、何种算法进行程序设计,最终在计算机中运行的只有数据流。数据的不同格式叫做数据类型。数据按一定的数据类型进行的排列、组合及架构称为数据结构。C语言有三种数据类型:基本型,包括整型(char、int)、实型(float)两种;构造型,包括数组、结构体等用户自定义结构的数据类型;指针型,指向存储单元地址的数据类型。相比普通C语言,C51多出了位、特殊功能寄存器两种数据类型,这两种数据类型都和硬件有关,完整的数据类型见表1.3-1,表中深色底的是C51扩充数据类型,C51编译器自动识别这些扩充数据类型。1.3.1数据类型数据类型名称长度数值范围unsignedchar无符号字符型1字节0~255signedchar有符号字符型1字节-128~+127unsignedint无符号整型2字节0~65535signedint有符号整型2字节-32768~+32767unsignedlong无符号长整型4字节0~4294967295signedlong有符号长整型4字节-2147483648~+2147483647float浮点型4字节±1.175494E-38~±3.402823E+38*指针型1~3字节对象的地址bit位型1位0或1sfr特殊功能寄存器型1字节0~255sfr1616位特殊功能寄存器型2字节0~65535sbit特殊功能寄存器里的位1位0或1表1.3-1C51数据类型1.3.1数据类型数据类型规定了数据的格式和存储空间大小。1.字符型(char)字符型有signedchar和unsignedchar之分,默认signedchar,char型数据占用1个字节的存储空间。unsignedchar是无符号的整型数据,表示的数值范围为0~255,用来存放西文字符、或者某种状态值,如天气;signedchar是有符号整型数据,最高位是符号位,0表示正数,1表示负数,负数用补码表示,数值范围为-128~127。2.整型(int)整型有signedint和unsignedint之分,默认signedint,Int型数据占用2个字节的存储空间,用于存放双字节数据。Unsignedint是两字节的无符号数,数值范围0~65535,用来存放循环变量等,当循环次数超过256次,那么就要定义它为unsignedint类型;signedint是两字节的有符号数,负数用补码表示,数值范围-32768~32767。1.3.1数据类型3.长整型(long)长整型有signedlong和unsignedlong之分,默认signedlong,long型数据占用4个字节的存储空间,用于存放四字节数据。Unsignedlong是四字节的无符号数,数值范围0~4294967295;signedlong是四字节的有符号数,负数用补码表示,数值范围-2147483648~2147483647。4.浮点型(float)浮点型数据是带小数点的数,占用4个字节的存储空间,数值以科学记数法标记,浮点数不能进行位操作或者逻辑运算。1.3.1数据类型5.指针型指针型数据是整型数据,保存指向另一个数据的存储单元地址。6.位型位型数据是C51扩充数据类型,只占用字节中的1个位,分为bit和sbit两种类型。bit是RAM中20H~27H中的可寻址位;sbit是特殊功能寄存器中的可寻址位。7.特殊功能寄存器特殊功能寄存器(SpecialFunctionRegister)是C51扩充数据类型,分为sfr和sfr16两种类型。sfr在单片机RAM中占用一个存储单元,且位置固定。sfr16在单片机RAM中占用两个存储单元,且位置固定。1.3.2数据的运C语言提供了丰富的运算符,运算功能强大,在单片机C语言中,位运算功能强大,常常与硬件相关,C51中的运算符总结如下。1.算术运算符:进行加减乘除运算,运算符号连接两个操作数,如表1.3-2所示。运算名称运算符功能加法+求两个数的和,1+1=2减法-求两个数的差,10-8=2乘法*求两个数的积,25*4=200除法/求除法运算的商,25/4=6模运算%求除法运算的余,25%4=1表1.3-2算术运算符1.3.2数据的运2.赋值运算符:赋值运算符“=”的作用是给变量赋值。书写格式:变量=表达式;//必须以分号结尾,表示一个赋值语句结束。举例:unsignedchara=10,b;//变量a的初值是10unsignedintc;b=a+9; //变量b的值是19c=a+b; //变量c的值是29,运算结果是无符号int类型。由此可见,赋值语句将右边的表达式结果赋值给左边。如果“=”两边的数据类型不一致,编译器自动进行类型转换,转换后保持左边的数据类型。1.3.2数据的运3.关系运算符:表示两个数据对象的大小关系,运算结果是逻辑真(1)或逻辑假(0),关系运算符如表1.3-3所示。运算名称运算符功能大于>左边和右边的关系是否成立,如果成立,运算结果是逻辑真(1);如果不成立,运算结果是逻辑假(0)。大于等于>=小于<小于等于<=等于==不等于!=表1.3-3关系运算符举例:unsignedchara=10,b=9;//变量a的初值是10,b的初值是9b+2>a; //成立,表达式的值为1a==b; //不成立,表达式的值为0。1.3.2数据的运4.逻辑运算符:是与、或、非运算的统称,运算结果是逻辑真或逻辑假,逻辑真通常用“1”表示,逻辑假通常用“0”表示。逻辑运算符如表1.3-4所示。运算名称运算符运算规则与&&True&&True=TrueTrue&&False=FalseFalse&&False=False或||True||True=TrueTrue||False=TrueFalse||False=False非!!True=False!False=True表1.3-4逻辑运算符1.3.2数据的运(1)逻辑与(and)“&&”,双目运算符,运算符两侧数据要么真(非0的数都是真),要么假(等于0的数都是假),只有两个都为真的数,运算结果才为真。举例:unsignedchara=10,b=9,c=0;//变量a的初值是10,b的初值是9,c的初值是0。a&&b; //运算结果为真(1),a和b都非0a&&c; //运算结果为假(0),c的值为0a-b&&c-b; //运算结果为真(1),符号两边都非01.3.2数据的运(2)逻辑或(or)“||”,双目运算符,运算符两侧数据要么真(非0的数都是真),要么假(等于0的数都是假),只要有1个为真,运算结果就为真,只有两个都为假的数,运算结果才为假。举例:unsignedchara=10,b=9,c=0;//变量a的初值是10,b的初值是9,c的初值是0a||b; //运算结果为真(1),a和b是真a==b||c; //运算结果为假(0),符号两边的值都为假a>b||c>b; //运算结果为真(1),a>b是真,c>b是假,有一个是真。(3)逻辑非(not)“!”,单目运算符,运算结果要么真(1)要么假(0)。举例:unsignedchara=10,b=9,c=0;//变量a的初值是10,b的初值是9,c的初值是0!(a+b); //运算结果为假(0),a和b相加后非0,取非后是0!(a==b); //运算结果为真(1),a和b不相等,取非后是真1.3.2数据的运5.位运算符:C51位运算和单片机管脚密切相关,运算时,要把十进制

温馨提示

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

最新文档

评论

0/150

提交评论