8051单片机原理及应用全套教学课件_第1页
8051单片机原理及应用全套教学课件_第2页
8051单片机原理及应用全套教学课件_第3页
8051单片机原理及应用全套教学课件_第4页
8051单片机原理及应用全套教学课件_第5页
已阅读5页,还剩561页未读 继续免费阅读

下载本文档

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

文档简介

网络空间安全学院网络安全基础技术应用第一章单片机里的数授课人:第1章单片机里的数.pptx第2章单片机的基本结构.pptx第3章通用输入输出GPIO.pptx第4章中断系统.pptx第5章定时器系统.pptx第6章串行通信系统.pptx第7章I2C总线开发.pptx第8章SPI总线开发.pptx第9章人机接口开发.pptx第10章传感器模块开发技术.pptx全套可编辑PPT课件目录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.3-5列出了位运算符和运算规则。运算名称运算符运算规则按位与&遇0得0:0&0=00&1=01&0=01&1=1按位或|遇1得1:0|0=00|1=11|0=11|1=1按位异或^相异为1:0^0=00^1=11^0=11^1=0按位取反~~0=1~1=0左移<<二进制数往左移位,空出的位补0右移>>二进制数往右移位,空出的位补0表1.3-5位运算符1.3.2数据的运举例:unsignedchara=10,b=9;//求a和b的位运算结果。首先将a,b转换成二进制,其次按照位运算规则进行二进制的按位运算。a转换成二进制数是1010,b转换成二进制数是1001,每种位运算的结果见表1.3-6所示。表1.3-6a与b的位运算示意图运算式a&ba|ba^b~aa<<2b>>3运算结果10000001表1.3-6a与b的位运算示意图1.3.2数据的运表1.3-7中a<<2的过程演示如下,首先左移1位得到0100;继续左移1位得到1000。a左移1位:10100移出

补充

a左移2位:101000移出

补充1.3.2数据的运6.运算符优先级:一个表达式中有多个运算符时,按照优先级的顺序依次运算。优先级从高到低的排列顺序见表1.3-7:

表1.3-7运算符优先级优先级顺序(从高到低)运算符号括号()逻辑非!算术运算符*+-关系运算符>逻辑与&&逻辑或||赋值运算符=1.3.2数据的运7.复合赋值运算符:凡是二目运算符,都可以与赋值运算符“=”一起组成复合赋值运算符,由于赋值运算符“=”优先级最低,所以一个表达式总是最后执行赋值运算,由此形成了复合赋值运算符见表1.3-8。格式为:变量 复合赋值运算符 表达式复合赋值运算符简化了书写步骤,使代码更加简洁,因为变量只出现1次,所以编译效率更高。表1.3-8复合赋值运算符运算符举例等价于运算结果(a初值是10)+=a+=5;a=a+5;15-=a-=5;a=a-5;5*=a*=5;a=a*5;50/=a/=5;a=a/5;2%=a%=5;a=a%5;0<<=a<<=5;a=a<<5;0>>=a>>=5;a=a>>5;0&=a&=5;a=a&5;0^=a^=5;a=a^5;15|=a|=5;a=a|5;15++a++;a=a+1;11--a--;a=a-1;9谢谢&提问网络空间安全学院网络安全基础技术应用第二章单片机的基本结构授课人:目录CONTENT2.1.单片机发展简史和定义2.2.单片机内部结构概述2.3.中央处理器CPU2.4.程序存储器ROM2.5.数据存储器RAM2.6.常量和变量2.7.单片机最小系统2.8.扩展阅读:C51编译器2.1单片机发展简史和定义20世纪70年代初,英特尔(Intel)公司推出了世界上第一台微处理器4004,能够处理4bit的数据如图2-1所示。到了80年代初,Intel推出了8051单片机,能够处理8bit的数据,这个单片机不仅仅是微处理器,它还把存储器、通用输入输出接口、串行通信接口、定时器系统、中断系统等都集成在了单颗芯片,是一款单片微型计算机,这样的单芯片结构应用极为广泛,比如控制一个马达一颗单芯片就可以搞定。单片机结构简单、价格低廉,广泛应用于家用电器、汽车、工业测控、通信等设备中,可以说有“智能”的产品,都有单片机的影子。图2.1-1

Intel4位处理器2.1单片机发展简史和定义Intel在1980年代授权了8051单片机的设计,世界许多IC制造厂商都能生产基于Intel8051架构的单片机,因此,现在市场上有许多不同制造商生产的8051单片机,其架构和指令集基本上与Intel的原始8051兼容。如MicrochipTechnology(原Atmel)生产的AT89C51、AT89C52、AT89S52RC等、NXPSemiconductors(原Philips)生产的P89C51、WinbondElectronicsCorporation(华邦)的W77、W78系列、STC公司STC89、STC15、STC8、STC32等系列都是基于8051内核的单片机,图2.1-2是STC公司一款双列直插单片机外观。图2.1-28051单片机

2.1单片机发展简史和定义单片机是一颗封装好的微型计算机芯片,在工业控制领域应用极为广泛,也称微控制器(Micro-ControllerUnit,MCU),单片机把具有数据处理能力的中央处理器(CentralProcessingUnit,CPU)、只读存储器(ReadOnlyMemory,ROM)、随机存储器(RandomAccessMemory,RAM)、定时计数器(Timer/Counter)、输入输出并行接口(Input/Output,I/O)、串行通信接口(SerialCommunication)、中断系统(InterruptSystem)等功能都集成到一块硅片上,构成了一个小而完善的微型计算机系统。传统8051单片机(特指早期单片机)内部结构如图2.1-3所示,CPU机器周期是12T,RAM有256字节、ROM有4K字节,还提供4个8位并口、1个全双工串行口、2个16位定时/计数器,5个中断源的中断系统。图2.1-3传统8051单片机内部结构

2.2单片机内部结构概述随着技术的发展,现代8051单片机,无论是运行速度还是性能都比传统8051单片机优越,称为增强型单片机。图2.2-1展示了STC8x系列单片机内部结构图,CPU、存储器、数字外设都比传统8051单片机性能强。拥有超高速1T8位8051微处理器内核,比传统8051快约12倍。内置高精度R/C时钟,时钟频率可任意设置。ROM直接使用Flash闪存,具有断电数据不丢失的特性,读取速度快,容量可以达到128K字节。RAM直接使用静态RAM(StaticRAM,SRAM),SRAM到目前为止是读写速度最快的内存工艺之一,传统8051的RAM容量只有256字节,但是现代单片机的RAM容量可以扩展到12K字节。内置ISP引导代码。传统8051单片机需要手动添加ISP引导码,现代单片机将ISP引导码内置在芯片里,通过上位机软件直接串口下载程序,无需使用编程器。2.2单片机内部结构概述传统8051单片机只有4组GPIO,且只有P3口提供第二功能,现代单片机的GPIO口可以达到8组或更多,每个GPIO口都有扩展功能,所有GPIO均支持4种工作模式。现代单片机定时器数量增多,有3~5个16位定时器;串行接口数量增多,有2~4个高速串口。数字外设增多,自带超高速ADC模数转换器,支持SPI、I2C总线协议。内置复位电路,支持上电复位、复位脚复位、看门狗溢出复位、低压检测复位,还支持软件复位。有4级嵌套中断系统。传统8051只有5个中断源,现代单片机可提供几十个中断源,这些中断源可根据情况设置为4级嵌套优先。

有DMA(DirectMemoryAccess)直接存储器存取功能,该功能使得单片机可不通过CPU直接访问单片机内部存储器。2.2单片机内部结构概述有看门狗定时器,防止单片机程序跑飞或陷入死循环。综上所述,现代51单片机速度更快,存储容量更大,外设更加丰富,集成度更高,适用于低、中、高多种应用场景的使用。除了8位的STC8H新型单片机,STC公司还推出32位8051内核(1T)单片机,比传统8051快约70倍,内嵌DMA、LCD驱动8080接口,性能可以与ARMCortex微控制器相比拟。图2.2-1STC8x系列单片机内部结构2.2单片机内部结构概述STC单片机命名规则STC公司成立于1999年,STC系列单片机最大特点是拥有超强抗干扰能力,且所有产品都具备在系统可编程(InSystemProgramming,ISP)下载功能,指令几乎都可以单时钟完成。STC系列单片机的发展历史如表2.2-1所示。年份事件单片机特点2004年STC公司推出STC89系列8051单片机具有ISP在系统编程功能,与传统8051内部结构一致。2006年STC公司推出STC12系列8051单片机全球首款大批量生产的1T8051单片机,工作速度提升2011年STC公司推出STC15系列8051单片机具有IAP在应用编程功能,采用STC-Y5超高速CPU内核2019年STC公司推出STC8H/STC8G/STC8A系列超高速8051单片机STC公司最快的1T8051单片机,采用STC-Y6超高速CPU内核2021年STC公司推出首款STC32x系列8051单片机32位8051单片机,工作速度更快。表2.2-1STC8051单片机的发展历史2.2单片机内部结构概述单片机的RAM和ROM容量是非常重要的两个性能指标,STC单片机命名规则里就体现了存储器容量以及增强性的功能特点。STC单片机命名规则如图2.2-2所示,由厂家代码、系列编号、存储器容量、增强功能等组成,其符号如表2.2-2所示。图2.2-2STC命名规则2.2单片机内部结构概述厂家系列工作电压RAM容量ROM容量增强功能STC

8912158X32XF:3.8-5.5V,Flash工作电压L:2.4-3.6V低电压W:2.5-5.5V,宽电压1K:1024字节2K:2048字节8K:8192字节12K:12K字节08:8K字节16:16K字节28:28K字节60:60K字节64:64K字节128:128K字节W:有掉电唤醒功能专用定时器。S2:有两组串口S4:有四组串口U:USB接口表2.2-2STC单片机命名规则2.2单片机内部结构概述举例:STC15F2K60S2:STC公司15系列单片机,程序存储区(ROM)是Flash,工作电压在3.8~5.5V,2K字节的RAM,60K字节ROM,有两组串口。IAP15F2K61S2:IAP(InApplicationProgramming,在应用编程)开头,表明Flash程序存储区可以作为EEPROM使用,单片机通过应用程序就可以改写程序实现仿真。是STC公司15系列单片机,Flash型的ROM有61K字节,RAM有2K字节,有两组串口。STC8H8K64U:STC公司8H系列单片机,8K字节的RAM,64K字节ROM,提供USB接口。STC32G12K128:STC公司32G系列单片机,12K字节的RAM,128K字节ROM。说明:1.从STC8H系列开设命名里没有“F”字母,但ROM依然是Flash工艺,Flash已经是标配,且都具有IAP在应用下载和仿真功能。2.从STC32G系列开设命名里没有“U”字母,但芯片依然提供USB接口,USB已经是标配。2.2单片机内部结构概述任务1.认识单片机本节讲述了现代8051单片机特点,请你对照手上的开发板,找到单片机芯片,仔细看看,这个单片机是什么型号,型号代码有什么意义?打开单片机供应商的官方网站,看看网站上都提供了哪些和单片机有关的资料。找到单片机的使用说明书,说说看这份说明书都讲述了哪些内容?2.3中央处理器CPU中央处理器(CentralProcessingUnit,简称CPU)是计算机系统的运算和控制核心,相当于人的大脑,是计算机程序的执行者,图2.3-1表明CPU由运算器和控制器组成,CPU和存储器、输入输出设备都有联系。最早的CPU只能并行操作4位二进制数,很快发展到8位、16位、32位,现在通用计算机都已经是64位处理器了,CPU并行操作的位数越多,处理速度越快,另外CPU的处理速度还受系统时钟影响,系统时钟也称“主频”,主频越高,处理速度越快。图2.3-1计算机体系结构

CPU运算器控制器数据流指令流控制流输入设备存储器输出设备2.3.1CPU工作过程CPU是单片机的核心配件,是单片机的运算核心和控制核心。CPU由运算器和控制器两部分组成。1.运算器:运算器由算术逻辑单元(ALU)、累加器和寄存器组成,ALU完成两个功能:执行加减乘除等算术运算;执行逻辑与,或,比较等逻辑运算。ALU的输入源是两个数据,分别来自累加器和数据寄存器,ALU的运算结果存回累加器,取代累加器原来的内容。运算器执行的操作全部由控制器发出的控制信号指挥,一个算术操作产生一个运算结果,一个逻辑操作产生一个真假判决。2.控制器:控制器协调和控制整个计算机系统的操作,主要由以下几个寄存器/控制器组成。(1)程序计数器PC(ProgramCounter):也称程序指针,保存下一条指令的地址,CPU在执行程序时,自动修改PC的内容,使得它始终指向下一条指令的存放地址。(2)指令寄存器IR(InstructionRegister):保存当前正在执行的一条指令。当执行一条指令时,先把它从程序存储器中取出,然后再传送到指令寄存器。2.3.2单片机时钟树STC8H系列通用系统时钟结构如图2.3-2所示,它也是现代单片机典型时钟树。竖梯图形是多选一复用器。主时钟MCLK可选内部高速IRC、外部高速晶振、外部32K晶振或内部32KHz,由于32KHz频率太低,仅用于RTC时钟,因此MCLK主要在外部高速晶振和内部高速高精度IRC之间选择。主时钟MCLK经过CLKDIV分频后,得到系统时钟SYSCLK。SYSCLK就是单片机CPU的工作时钟。当CLKDIV=1时,系统时钟与时钟源的频率一致。STC8H系列的IRC有四个中心频率6MHz、10MHz、27MHz、44MHz,围绕中心频率,可变化范围在±27%,从而产生有小数点的频率。图2.3-2STC8H系列通用系统时钟结构2.3.3CPU的工作时间单片机内部是一个同步数字系统,CPU和存储器等通过一个统一的节拍工作,这个统一的节拍就是单片机系统时钟,也称主频,是图2.3-2时钟树中的SYSCLK。STC主频在4~48MHz可调。单片机按照节拍工作,节拍的频率f和节拍的时间T互为倒数:

——公式2.3-12.3.3CPU的工作时间CPU有以下几种工作时间:1.时钟周期:单片机R/C时钟电路发生的振荡周期,也称主频周期、振荡周期、时钟节拍,是单片机最小时间单位。2.机器周期:CPU执行一个基本操作所需要的时间称为机器周期,STC单片机有两种机器周期方式:12T:和传统8051单片机一致,一个机器周期由12个时钟周期组成,称为12T工作时间。1T:一个机器周期由1个时钟周期组成,称为1T工作时间。单片机时钟周期和机器周期的关系如图2.3-3所示。图2.3-3单片机的工作周期2.3.3CPU的工作时间3.指令周期:CPU执行一条指令所需要的时间称为指令周期,它由若干个机器周期组成。如果指令在一个机器周期内完成,就称为单周期指令;如果指令在两个机器周期内完成,就称为双周期指令;还有的指令需要三、四个机器周期才能完成。程序中经常用到的跳转指令是单周期指令,执行时间最短,加法指令是四周期指令,执行时间最长。如果单片机的时钟源是12MHz晶振,根据公式2.3-1,时钟周期是1/12us。表2.3-1列出了1T和12T工作方式下CPU工作时间。可见1T单片机的CPU运行速度远比12T单片机的CPU快得多。表2.3-1单片机工作时间1T工作方式12T工作方式时钟周期1/12us1/12us机器周期1/12us1us单周期指令时间1/12us1us双周期指令时间1/6us2us任务2.安装KeilC51软件任务2.安装KeilC51软件任务要求:在电脑上安装KeiluVision5forC51软件。步骤1:下载KeilC51安装软件包,教材使用版本KeilC51v960auVision5。步骤2:双击安装包,按照提示要求进行安装。步骤3:在STC官方网站下载最新的STC-ISP编程烧录软件,双击进行安装。步骤4:在Keil安装目录下添加STC芯片型号和头文件库。以上步骤操作视频见二维码2.3-1。二维码2.3-1

keil软件的安装任务3.建立一个hello测试工程任务3.建立一个hello测试工程任务要求:在Keil软件下建立一个hello测试程序,该程序能够和上位机实现usb通信。步骤1:建立工程文件夹hellotest。在书写代码前,先建立工程文件夹,项目相关文件都在放此文件夹下,方便工程项目的管理。步骤2:新建工程。打开Keil软件,点击Project菜单,选中“NewuVisionProject”,如图2.3-4所示。给工程命名并保存在步骤1建立的文件夹里如图2.3-5所示。图2.3-4新建工程

图2.3-5工程保存及命名2.3.3CPU的工作时间步骤3:选择器件库。本项目使用STC8H8K64U芯片,因此首先在Vendor里选择STCMCUDatabase,如图2.3-6所示。步骤4:选择CPU型号。在STCMCUDatabase中寻找STC8H系列单片机,找到STC8H8K64U,如图2.3-7所示。图2.3-6选择器件库图2.3-7选择CPU型号2.3.3CPU的工作时间首次建立工程会跳出“Copy‘STARTUP.a51’toProjectFolderandAddFiletoProject?”的对话框,选择“是”,如图2.3-8所示,进入到工程代码书写阶段。图2.3-8在工程里自动添加启动文件步骤5:书写程序。第1步点击“新建”按钮,打开文本编辑器;第2步点击“保存”按钮在工程目录下保存新文件;第3步输入文件名称,因为该文件是主文件(main函数所在的文件),文件名可以和工程名一致,注意后缀名是.c。如图2.3-9所示。步骤6:在工程文件里添加库文件如图2.3-10所示。图2.3-9新建C语言文件图2.3-10添加usb-hid库文件2.3.3CPU的工作时间步骤7:Keil软件界面的文本框输入以下语句。#include"stc.h"#include"usb.h"#include"string.h"voidsys_init();char*USER_DEVICEDESC=NULL;char*USER_PRODUCTDESC=NULL;voidmain(){ sys_init();usb_init();//USB初始化EA=1;2.3.3CPU的工作时间while(1){if(bUsbOutReady){if(UsbOutBuffer[0]=='h'&&UsbOutBuffer[1]=='e'&&UsbOutBuffer[2]=='l'&&UsbOutBuffer[3]=='l'&&UsbOutBuffer[4]=='o') { printf_hid("ok"); }usb_OUT_done();//接收应答(固定格式)}}2.3.3CPU的工作时间voidsys_init(){P_SW2|=0x80;//扩展寄存器(XFR)访问使能P0M1=0x00;P0M0=0x00;//设置为准双向口P1M1=0x00;P1M0=0x00;//设置为准双向口P2M1=0x00;P2M0=0x00;//设置为准双向口P3M1=0x00;P3M0=0x00;//设置为准双向口P4M1=0x00;P4M0=0x00;//设置为准双向口P5M1=0x00;P5M0=0x00;//设置为准双向口2.3.3CPU的工作时间P6M1=0x00;P6M0=0x00;//设置为准双向口P7M1=0x00;P7M0=0x00;//设置为准双向口P3M0&=~0x03;P3M1|=0x03;//设置USB使用的时钟源IRC48MCR=0x80;//使能内部48M高速IRCwhile(!(IRC48MCR&0x01));//等待时钟稳定}2.3.3CPU的工作时间步骤8:准备编译,在编译前,点击“OptionsforTarget”菜单,进行如下几项设置:(1)Device栏目里选择Linker,如图2.3-11所示。图2.3-11选择Linker2.3.3CPU的工作时间(2)在LX51Misc里添加宏控制语句,如图2.3-12所示。图2.3-12添加宏控制语句2.3.3CPU的工作时间步骤9:编译。点击“编译”按钮,根据编译提示结果进行修改,编译后的结果必须是0errors。如图2.3-13所示。图2.3-13编译按钮和编译结果2.3.3CPU的工作时间以上步骤操作视频见二维码2.3-2。二维码2.3-2

建立hello测试工程。2.4程序存储器ROMROM是只读存储器(ReadOnlyMemory)的缩写,主要用于存放用户程序以及一些初始化数据等,所以也称程序存储器。ROM是非易失性存储器,即使掉电,数据也依然保持,可以理解成计算机的硬盘。ROM从字面上看只能读、不能写,实际上内容可以修改。早期的单片机使用电可擦写EEPROM(也称E2PROM),速度慢且读写次数有限。现在的单片机大多采用Flash闪存工艺,它最大的特点是读取数据快,不仅有EEPROM电可擦除重写的功能,还有断电不丢失数据、快速读取数据的特点。2.4.2特殊的ROM存储单元(1)程序计数器PC程序计数器(ProgramCounter,PC)保存当前欲执行指令的地址,也称指令指针或程序指针。CPU从ROM里取指,首先要访问PC寄存器,从PC寄存器里拿到单元地址后,再到ROM的存储单元取指令,CPU工作的最后一个过程是结果写回,这个过程就包括了写回PC,如果CPU执行的指令是单周期的,那么PC里的内容就自动增1,如果指令是双周期的,那么PC里的内容就自动增2,所以PC里的内容始终指向下一个要执行的ROM单元地址。单片机复位后,PC的内容为0000H,从0000H单元开始执行程序。(2)中断向量入口地址中断服务程序的入口地址、中断编号合起来称为中断向量。当中断发生并被CPU响应后,单片机就会自动跳转到相应的中断入口地址获取指令。2.4.2特殊的ROM存储单元传统8051单片机只有5个中断源,对应5个中断向量,如表2.4-1所示。中断编号中断源入口地址0外部中断00003H1定时器0000BH2外部中断10013H3定时器1001BH4串口0023H表2.4-1传统8051单片机的中断向量2.4.2特殊的ROM存储单元STC8系列单片机支持22个中断源,STC32系列单片机中断源可达64个。表2.4-2列出了STC8系列单片机常用中断向量,相较传统8051,现代单片机增加了ADC、SPI、I2C等中断源。中断编号中断源入口地址

中断编号中断源入口地址0外部中断0(INT0)0003H

11外部中断3(INT3)005BH1定时器0(Timer0)000BH

12定时器2(Timer2)0063H2外部中断1(INT1)0013H

13-15系统保留

3定时器1(Timer1)001BH

16外部中断4(INT4)0083H4串口1(UART1)0023B

17串口3(UART3)008BH5数模转换(ADC)002BH

18串口4(UART4)0093H6低压检测(LVD)0033H

19定时器(Timer3)009BH7比较捕获(CCP/PCA/PWM)003BH

20定时器(Timer4)00A3H8串口2(UART2)0043B

21比较器(CMP)

9串行接口外设(SPI)004BH

24I2C总线00C3H10外部中断2(INT2)0053H

25USB00CBH表2.4-2STC8系列对应的中断向量2.4.3ROM存储单元的读写程序存储器用于存放用户程序、数据以及表格等信息。1.用户程序的读写方法:首先在编译软件里编写代码并编译成二进制文件,然后使用下载软件或烧写器将文件下载到单片机ROM存储单元,单片机上电后,CPU从ROM首地址读程序。2.用户数据的读写方法:程序中用到的查表信息如数码管显示字型、汉字字库等,这些数据是固定不变的,且占用较多存储空间,此时数据可保存在程序存储器ROM中,减少对RAM空间的消耗,在编写程序时,通过声明存储器类型规定存储位置。以8位共阴数码管字型编码为例,在数据类型“unsignedchar”后面增加“code”标识符:unsignedcharcodetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};“code”是存储器类型,表明存储位置在程序存储器ROM里。上述举例定义数组常量tab[],数组元素分别是字型0~F的数码管显示编码。任务4.hello测试程序的下载和验证任务4.hello测试程序的下载和验证任务要求:将hello程序的hex文件下载到开发板,连接上位机,上位机发送“hello”,单片机返回“ok”。步骤1:打开hello工程文件,生成hex文件。(1)在任务1的工程里,打开OptionsforTarget窗;(2)勾选CreatHEXFile;(3)点击OK;点击“编译”快捷键。如图2.4-2所示。图2.4-2生成hex文件并编译任务4.hello测试程序的下载和验证步骤2:开发板连接电脑,usb线缆两端分别连接开发板usb插座和电脑USB口;步骤3:打开STC-ISP软件,设置下载条件。(1)选择芯片型号,和开发板中CPU的型号一致。(2)点击“打开程序文件”,在任务1工程文件目录的Objects下找到要下载的hex文件,选中并点击“打开”按钮。如图2.4-3所示。图2.4-3选择芯片型号,打开程序文件任务4.hello测试程序的下载和验证步骤4:下载hex文件到开发板。先按住实验箱上的INT0按键,然后按住ON/OFF电源按键,接着松开ON/OFF电源按键,最后松开INT0按键,正常情况下就能识别出“STCUSBWriter(HID1)”设备。选择CPU的内部时钟频率,然后点击“下载/编程”,若下载成功,提示栏会显示“成功”,如图2.4-4中1-3步所示。图2.4-4程序下载和USB-HID通信验证2.4.3ROM存储单元的读写步骤5:通信测试。借助USB-HID助手,实现电脑和开发板的握手,过程如图2.4-4中4-7步。(1)在STC-ISP软件中打开“USB-HID助手”的界面;(2)在设备栏选择“STC\USB-ISP”,点击“打开设备”。(3)在发送缓冲书写“hello”点击“发送”。此时,在接收缓冲区收到“ok”。(4)每点击“发送”一次,就收到一个“ok”。图2.4-4程序下载和USB-HID通信验证任务4.hello测试程序的下载和验证步骤5:通信测试。借助USB-HID助手,实现电脑和开发板的握手,过程如图2.4-4中4-7步。(1)在STC-ISP软件中打开“USB-HID助手”的界面;(2)在设备栏选择“STC\USB-ISP”,点击“打开设备”。(3)在发送缓冲书写“hello”点击“发送”。此时,在接收缓冲区收到“ok”。(4)每点击“发送”一次,就收到一个“ok”。图2.4-4程序下载和USB-HID通信验证任务4.hello测试程序的下载和验证以上步骤操作视频见二维码2.4-1。二维码2.4-1hello程序的下载和验证。2.5数据存储器RAMRAM是随机存取存储器(RandomAccessMemory)的缩写,断电之后数据丢失,用于存放临时性数据,也就是我们俗称的“内存”。STC单片机的RAM采用静态RAM(StaticRandom-AccessMemory,SRAM)工艺,在通电情况下,SRAM里存储数据可以恒常保持,但是当断电后,SRAM储存的数据会消失,它最大的特点是速度快,在普通个人计算机里,SRAM是计算机的一级缓存。单片机型号不同,RAM存储容量也不同,如:STC15F2K60S2单片机RAM存储容量2KByte,STC8H8K64U单片机RAM存储容量8KByte,STC32G12K128单片机的RAM容量是12KByte。RAM内部结构和ROM相同,由存储单元组成,但是RAM和ROM不一样的地方在于,CPU访问ROM的时候,ROM地址是固定的,由PC寄存器内容指示,而访问RAM的时候单元地址是随机的。2.5.1STC单片机RAM结构传统8051单片机的RAM空间由256个存储单元构成,称为内部RAM。现代单片机扩展了内部RAM空间,分为两个地址空间——内部RAM(256字节)和扩展RAM。图2.5-1展示了STC不同单片机型号的RAM内部空间。传统8051单片机的内存256个存储单元,地址范围00H~FFH;STC15F2K60S2系列有2K个RAM存储单元,地址范围00H~07FFH;STC8H4K64U的内存地址00H~0FFFH,对应4K个存储单元;STC8H8K64U的内存地址00H~1FFFH,对应8K个存储单元。STC32G12K28的内存地址00H~2FFFH,对应12K个存储单元。2.5.1STC单片机RAM结构传统8051单片机的RAM空间由256个存储单元构成,称为内部RAM。现代单片机扩展了内部RAM空间,分为两个地址空间——内部RAM(256字节)和扩展RAM。图2.5-1展示了STC不同单片机型号的RAM内部空间。传统8051单片机的内存256个存储单元,地址范围00H~FFH;STC15F2K60S2系列有2K个RAM存储单元,地址范围00H~07FFH;STC8H4K64U的内存地址00H~0FFFH,对应4K个存储单元;STC8H8K64U的内存地址00H~1FFFH,对应8K个存储单元。STC32G12K28的内存地址00H~2FFFH,对应12K个存储单元。2.5.1STC单片机RAM结构图2.5-1STC系列单片机RAM内部结构2.5.1STC单片机RAM结构单片机存储器类型如表2.5-2所示。当常量或变量的存储器类型省略时,默认数据是idata存储类型。存储器类型说明data可直接寻址的片内数据存储器(内部RAM低128字节),访问速度最快idata单片机内部自带RAM空间(256字节)bdata可位寻址的片内数据存储器(20H~2FH)xdata单片机扩展RAM空间,当EXTRAM=0,指示单片机内部扩展RAM,当EXTRAM=1,指示单片机外部扩展RAMcode程序存储器ROM表2.5-2STC单片机存储器类型2.5.2内部RAM(256字节)和SFR内部RAM共256字节,分为三个部分:低128字节RAM、高128字节RAM以及特殊功能寄存器区。高128字节RAM和SFR区共用地址如图2.5-2(a)所示,都使用80H~FFH,地址空间貌似重叠,但物理上是独立的,在使用的时候,SFR区的数据类型是sfr,实现了独立映射。1.低128字节RAM低128字节RAM也称通用RAM区,包含4个工作组、1个位寻址区、及用户RAM/堆栈区,内部结构如图2.5-2(b)所示。4个工作组,每组包含8个8位的工作寄存器,编号均为R0-R7,通过使用工作寄存器组,可以提高运算速度。图2.5-2传统8051内部RAM组成2.5.2内部RAM(256字节)和SFR可位寻址区20H~2FH如表2.5-2所示,位寻址区的存储单元既可以按字节存取,也可以对单元中的任何一位单独存取。位寻址区20H~2FH的位数据类型是bit。RAM地址位寻址地址B7B6B5B4B3B2B1B02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H21H.70FH21H.60EH21H.50DH21H.40CH21H.30BH21H.20AH21H.109H21H.008H20H20H.707H20H.606H20H.505H20H.404H20H.303H20H.202H20H.101H20H.000H表2.5-2位寻址区域2.5.2内部RAM(256字节)和SFR2.堆栈低128字节RAM中的30H~7FH以及高128字节80H~FFH是用户RAM和堆栈区。在计算机领域中堆栈是一个连续的存储空间,用来存储计算机程序活动中需要暂时保护的数据,堆栈区域一端固定称为栈底,一端向上生长称为栈顶,为了指示栈顶位置,引入特殊功能寄存器堆栈指针SP,它是一个8位专用寄存器,它指示出堆栈顶部在内部RAM块中的位置,堆栈的规则是先进后出,如图2.5-3所示。数据入栈(PUS

温馨提示

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

评论

0/150

提交评论