收藏 分销(赏)

单片机教程全套课件电子教案板.ppt

上传人:w****g 文档编号:8797644 上传时间:2025-03-02 格式:PPT 页数:175 大小:11.06MB 下载积分:20 金币
下载 相关 举报
单片机教程全套课件电子教案板.ppt_第1页
第1页 / 共175页
单片机教程全套课件电子教案板.ppt_第2页
第2页 / 共175页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,80C51,单片机实用教程,基于,Keil C,和,Proteus,双解汇编和,C51,两种程序,每条指令,/,语句均给出注释,编入,36,例,Proteus,仿真实验,第,1,章,80C51,单片机片内结构和工作原理,第,1,章,80C51,单片机片内结构和工作原理,电子计算机是二十世纪人类最伟大的发明之一,而微型计算机的发展,使人类社会大步跨入电脑时代,改变了社会生活的各个方面,1.1,单片机概述,另一类是嵌入式微处理器,通常是我们常说的单片机,全力满足测控对象的测控功能,兼顾数据处理能力,微型计算机可以分成两大分支:,一类是个人计算机,也称为,PC,机(,Personal Computer,),全力实现海量高速数据处理,兼顾控制功能,同时,两大分支之间串行通信,优势互补,形成了网络控制系统,使功能更强大,更完善,实现了近代计算机技术的突飞猛进,1.1.1,单片机发展概况,什麽是单片机?,“Single Chip Micro Computer”,忠实地反映了早期单片机的形态和本质,现代“单片机”概念:,微控制器,MCU,(,Micro Controller Unit,),单板机是将微处理器芯片、存储器芯片和输入输出接口芯片,安装在同一块印制电路板上,构成具有一定功能的计算机系统,单片机是将微处理器、存储器和输入输出接口电路,集成在一块集成电路芯片上,构成具有一定功能的计算机系统,单片机之前,曾出现过单板机,单片机应用,单片机应用领域之广,几乎到了无所不在的地步,各领域智能化产品几乎都有“单片机”的影子,单片机应用的意义,不仅在于它的广阔范围及所带来的经济效益,更重要的是,从根本上改变了控制系统传统的设计思想和设计方法,单片机发展概况,探索阶段,以,Intel,公司,MCS-48,为代表,属低档型,8,位机,大致可分为四个阶段:,完善阶段,以,Intel,公司,MCS-51,为代表,属高档型,8,位机,MCS-51,系列后来改进为,80C51,系列,在世界和我国得到了广泛的应用,Intel,公司推出了,16,位的,MCS-96,系列单片机,16,位机肯定比,8,位机性能优,但由于价格不菲,其应用面受到一定限制,相反,,MCS-51,系列单片机,,由于其性能价格比高,并吸引了世界许多知名芯片制造厂商加盟,,竞相使用以,80C51,为内核,扩展部分测控系统中使用的电路技术、接口技术,推出了许多与,80C51,兼容的,8,位单片机,得到了比,16,位机更广泛的应用,8,位机与,16,位机争艳阶段,微控制器全面发展阶段,随着单片机在各个领域全面深入发展和应用,世界各大电气、半导体厂商普遍投入,出现了高速、大寻址范围、强运算能力的通用型单片机,32,位、,64,位微处理器相继问世,例如,ARM,(,Advanced RISC Machines,)系列微处理器,内存越来越大,主频越来越高,并且驻入嵌入式操作系统,甚至可以直接使用,Windows,和,Linux,操作系统,高端嵌入式微处理器的功能已经开始接近,PC,机,1.1.2 80C51,系列单片机,MCS-51,单片机是上世纪,80,年代由,Intel,公司推出的,最初是,HMOS,制造工艺,功耗较大,后来推出,CHMOS,工艺的,80C51,芯片,大大降低了功耗,随后,,Intel,公司将,80C51,内核使用权以专利互换或出售形式,转让给世界许多著名,IC,制造厂商,例如,philips,、,Atmel,、,Dallas,、,LG,等,在保持与,80C51,兼容的基础上,融入自身的优势,扩展了针对满足不同测控对象要求的外围电路,开发出几百种功能各异的新品种,形成了有众多芯片制造厂商支持的,80C51,大家族,目前我国国内应用最广泛的是,Atmel,公司的,AT89,系列和宏晶公司的,STC,系列单片机芯片,1.2 80C51,单片机片内结构和引脚功能,1.2.1,片内结构,1.2.2,引脚功能,共,40,个引脚,大致可分为四类:电源、时钟、控制和,I/O,引脚,电源,VCC,芯片电源,接,+5V,VSS,接地端,时钟,XTAL1,、,XTAL2,外接石英晶体,控制线,ALE/PROG,地址锁存允许,/,片内,EPROM,编程脉冲,ALE,功能:用来锁存,P0,口送出的低,8,位地址,PROG,功能:在,EPROM,编程期间,此引脚输入编程脉冲,PSEN,外,ROM,读选通信号,RST/V,PD,复位,/,备用电源,RST,(,Reset,)功能:正常工作时,输入复位信号,在该引脚上连续保持,2,个机器周期以上高电平,,80C51,复位,V,PD,功能:在,VCC,掉电情况下,该引脚可接上备用电源,EA/V,PP,内外,ROM,选择,/,片内,EPROM,编程电源,功能:正常工作时,用于选择内外,ROM,EA=0,,只访问外,ROM,EA=1,,先访问内,ROM,,超过,4kB,时,自动转向外,ROM,V,PP,功能:在,EPROM,编程期间,用于施加编程电源,VPP,I/O,线,有,4,个,8,位并行,I/O,端口:,P0,、,P1,、,P2,和,P3,口,,每口,8,位,共,32,个引脚,4,个,I/O,口,各有各的用途,在并行扩展外存储器时,P0,口专用于分时传送低,8,位地址信号和,8,位数据信号,P2,口专用于传送高,8,位地址信号,P3,口根据需要常用于特殊信号输入输出和控制信号,1.3,存储空间配置和功能,80C51,可分为,3,个不同的存储空间:,64kB,程序存储器(,ROM,),包括片内,ROM,和片外,ROM,64kB,外部数据存储器(简称外,RAM,),256B,(包括特殊功能寄存器)内部数据存储器(简称内,RAM,),3,个不同的存储空间,用不同的指令和控制信号实现读、写功能操作:,(1)ROM,空间用,MOVC,指令实现只读功能操作,,用,PSEN,信号选通读外,ROM,。,(2),外,RAM,空间用,MOVX,指令实现读写功能操作,用,RD,信号选通读外,RAM,,用,WR,信号选通写外,RAM,。,内,RAM,(包括特殊功能寄存器),用,MOV,指令实现读、写功能操作。,1.3.3,内部数据存储器(内,RAM,),可分成三个物理空间:工作寄存器区、位寻址区和数据缓冲区,1.3.4,特殊功能寄存器(,SFR,),特殊功能寄存器(,Special Flag Register,,缩写为,SFR,),共有,21,个,离散地分布在高,128B,片内,RAM 80H,FFH,中,累加器,ACC,(,Accumulator,),ACC,是,80C51,单片机中最常用的寄存器,许多指令的操作数取自于,ACC,许多运算的结果存放在,ACC,中,乘除法指令必须通过,ACC,进行,ACC,的指令助记符为,A,寄存器,B,乘除法指令中要用到寄存器,B,此外,,B,可作为一般寄存器用,程序状态字寄存器,PSW,(,Program Status Word,),存放当前指令执行的状态和各有关标志,Cy,进位标志,加减法运算时,若最高位有进位或借位,,Cy,置,1,,否则清,0,位操作时,,Cy,是位操作累加器,指令助记符用,C,表示,AC,辅助进位标志,加减运算时,若,ACC.3,向,ACC.4,有进(借)位,,AC,置,1,,否则清,0,RS1,、,RS0,工作寄存器区选择控制位,工作寄存器区有,4,个,但当前工作的寄存器区只能打开一个,RS1,、,RS0,的编号用于选择当前工作的寄存器区,RS1,、,RS0=00 0,区(,00H,07H,),RS1,、,RS0=01 1,区(,08H,0FH,),RS1,、,RS0=10 2,区(,10H,17H,),RS1,、,RS0=11 3,区(,18H,1FH,),OV,溢出标志,用于表示,ACC,在有符号数算术运算中的溢出,溢出和进位是两个不同的概念,进位是指,ACC.7,向更高位进位,用于无符号数运算,溢出是指有符号数运算时,运算结果数超出,+127,-128,范围,发生溢出时,OV,置,1,,否则清,0,P,奇偶标志,表示,ACC,中“,1”,的个数的奇偶性,F0,用户标志,可作位寄存器用,数据指针,DPTR,(,Data Pointer,),16,位的特殊功能寄存器,由两个,8,位寄存器,DPH,、,DPL,组成,主要用于存放一个,16,位地址,作为访问外部存储器的地址指针,堆栈指针,SP,(,Stack Pointer,),堆栈是,CPU,用于暂时存放特殊数据的“仓库”,例如子程序断口地址,中断断口地址和其他需要保存的数据,堆栈指针,SP,专用于指出堆栈顶部数据的地址,堆栈中数据存取按先进后出、后进先出的原则,1.5,时钟和时序,1.5.1,时钟电路和机器周期,时钟电路,时钟周期和机器周期,时钟周期,是,80C51,振荡器产生的时钟脉冲频率的倒数,,是最基本最小的定时信号,机器周期,是,80C51,单片机工作的基本定时单位,机器周期是时钟周期的,12,倍,当时钟频率为,12MHz,时,机器周期为,1,s,当时钟频率为,6MHz,时,机器周期为,2,s,1.5.2,时序,时序是执行指令的操作节拍步骤,每一条指令的执行都可以包括取指和执行两个阶段,可分为:单机周指令、双机周指令和四机周指令,只有乘除法指令执行时间是,4,机周。,其余指令执行时间为,1,2,个机器周期,1.6,复位和低功耗工作方式,80C51,单片机的工作方式共有四种:,复位方式、程序执行方式、低功耗方式和片内,ROM,编程方式,程序执行方式是单片机的基本工作方式,CPU,按照,PC,所指出的地址从,ROM,中取指并执行,每取出一个字节,,PC+1PC,当调用子程序、中断或执行转移指令时,PC,会相应产生新的地址,片内,ROM,编程一般由专门的编程器实现,用户不需了解,1.6.1,复位,复位条件,必须使,RST,引脚(编号,9,)保持,2,个机器周期以上的高电平,复位电路,复位后,CPU,状态,80C51,单片机实用教程,基于,Keil C,和,Proteus,双解汇编和,C51,两种程序,每条指令,/,语句均给出注释,编入,36,例,Proteus,仿真实验,第,4,章,C51,语言及程序设计,80C51,单片机实用教程,基于,Keil C,和,Proteus,配套,Proteus,虚拟仿真,36,例目录(免费下载),对照书中程序,演示运行理解,增强教学效果,C,语言概述,第,4,章,C51,语言及程序设计,4.1 C51,概述,C,语言是一种结构化语言,简洁、紧凑,层次清晰,便于按模块化方式编写程序;有丰富的运算符和数据类型,能适应并实现各种复杂的数据处理;能实现位(,bit,)操作,生成目标代码效率较高,可移植性好,兼有高级语言和低级语言的优点。,因此,,C,语言应用范围越来越广泛。目前,各种操作系统和单片机,都可以用,C,语言编程,,C,语言是一种通用的程序设计语言,在大型、中型、小型和微型计算机上都得到了广泛应用。,用于,80C51,系列单片机编程的,C,语言,通常称为,C51,C51,实际上是一个编译系统,能将,C,语言程序转换成,80C51,可执行代码,C51,编程的主要特点,编程相对方便。,能自动完成对变量存储单元的分配和使用,仅在调用时临时分配存储单元,使用完毕即行释放,大大提高了,80C51,片内有限存储空间的使用效率,使用者不需过多关注涉及的具体存储单元及其操作指令,便于实现各种复杂的运算和程序,具有丰富且功能强大的运算符,可方便地调用各已有程序模块,可读性较好,实时性较差,4.2 C51,数据与运算,4.2.1,数据与数据类型,数据类型,数据的不同格式称为数据类型,字符型、整型和长整型数据,还又可分别分为有符号,signed,和无符号,unsigned,数据长度和值域,表,4-1 C51,数据长度和值域,标识符,数据、变量、数组、函数等常用标识符表示,实际上标识符就是一个代号、代名字,C51,标识符命名规定:,只能由字母、数字和下划线三种字符组成,且须以字母或下划线开头。,不能与“关键词”同名,ANSI C,和,Keil C51,的关键词分别如,表,4-2,和,表,4-3,所示,英文字母区分大小写,标识符命名宜简单而含义清晰,4.2.2,变量及其定义方法,C51,数据可分为常量和变量,程序运行过程中,其值可以改变的量称为变量,变量名按标识符规则定义,变量值存储在存储器中,变量必须先定义,后使用,程序运行中,通过变量名引用变量值,可分为:,字符型变量,整型变量,实型变量,位变量,指针变量,变量的存储区域,常量和变量必须定位在,80C51,不同的存储区域,存储区域按存储器类型分类,不同的存储器类型,其访问方式和速度也就不同,在已知变量长度及变量为正整数的情况下,应尽量采用,8bit,无符号格式:,unsigned char,存储器类型,表,4-5 C51,存储器类型与,80C51,存储空间的对应关系,不同性质的数据应区别对待,位变量只能定位在片内,RAM,位寻址区,使用,bdata,存储器类型,常用的数据应定位在片内,RAM,中,使用,data,和,idata,存储器类型,不太常用的数据可定位在片外,RAM,中,使用,pdata,和,xdata,存储器类型,常量可采用,code,存储器类型,编译模式,若用户不对变量的存储器类型作出定义,系统将由编译模式默认存储器类型,编译模式由源程序、函数或,C51,编译器设置,表,4-6 C51,存储器编译模式,局部变量和全局变量,变量按使用范围可分为局部变量和全局变量,局部变量,局部变量是某个函数内部定义的变量,使用范围仅限于该函数内部,不同函数中允许使用相同的局部变量名,函数运行结束,即释放局部变量存储单元,可大大提高,80C51,内存单元的利用率,全局变量,全局变量在整个文件或程序中有效,可供各函数共用,使用全局变量可以增加各函数间数据联系的渠道,使用全局变量的缺点:,始终占用一个固定的存储单元,降低了内部存储单元的利用率,降低了函数的通用性,函数移植到其他文件时需同时将全局变量一起移植,因此,应尽量减少全局变量,能不用就尽量不用,变量的定义方式,定义格式:,数据类型,存储器类型,变量名表,带中括号,者为非必需项,缺省时由,C51,编译器默认,例如:,unsigned int a;,char b=100,c;,char data var;,float idata x,y,z;,unsigned int pdata sum;,char code text=CHINA;,unsigned char xdata *ap;,定义,80C51,特殊功能寄存器及其可寻址位,C51,虽可用关键词定义,80C51,特殊功能寄存器,体现了,C51,编译功能的多样性和完整性,但编者还是建议读者不要去重新定义,直接使用预处理命令:,#include,即可在程序中直接引用,21,个特殊功能寄存器,及其可位寻址并有专用位定义名称的位变量,既省事又不易出错,位变量定义方式,定义,128,位可寻址位的位变量,定义格式:,bit,位变量名,例如:,bit u,v;/,定义位变量,u,,,v,定义,ACC,、,B,、,P0,、,P1,和,P2,中的位变量,这些位变量没有专用的位定义名称,只有位编号,但这些位编号不符合,ANSI C,标识符要求,应重新定义。其格式如下:,sbit,位变量名,=,位地址常数,例如:,sbit P10=P10;/,定义,P10,为,P1.0,绝对地址变量定义方式,绝对地址变量需要指定变量的存储单元地址,属全局变量,定义方法有两种:,应用关键词,_at_,数据类型,存储器类型,变量名,_at_,绝对地址,例如:,unsigned char xdata PA_at_0 x7fff;,应用绝对地址访问,#include,需引用,C51,库函数,absacc.h,表,4-15,绝对地址,4.2.3,运算符和表达式,赋值运算符,一般格式:,变量表达式,由赋值运算符组成的表达式称为赋值表达式,算术运算符,表,4-7 C51,算术运算符表,自增,1,和自减,1,有两种写法:,i,和,i,:,i,先加(减),1,,后使用,i,和,i,:,i,先使用,后加(减),1,除法运算的结果与参与运算数据的类型有关,若两个数据都是整数,则运算结果也为整数,即使有余数,也只取整数,舍去小数,例如:,7/3,,运算结果为,2,求余运算要求参与运算的数据都是整型,运算结果为两数相除的余数,例如:,7,3,,运算结果为,1,算术运算符说明,关系运算符,表,4-8 C51,关系运算符表,用于两个数据之间进行比较判断,运算的结果只能有两种:,条件满足,运算结果为,1,(真),条件不满足,运算结果为,0,(假),注意,不要混淆“”与“,的区别,“,用于给变量赋值,“”用于判断是否相等,逻辑运算符,表,4-9 C51,逻辑运算符,一般形式为:,逻辑与:,(条件表达式,1,),&,(条件表达式,2,),逻辑或:,(条件表达式,1,),|,(条件表达式,2,),逻辑非:,!,(条件表达式),用于求条件表达式整体之间逻辑运算的逻辑值,条件表达式的值只有两种:,1,或,0,运算结果也只有两种:,1,或,0,位逻辑运算符,表,4-10 C51,位逻辑运算符表,用于变量数据本身按位进行逻辑运算,例如,若,a=211,,,b=185,“a&b”,的结果是,145,“a&b”,的结果却是,1,位左移时,低位移进,0,,移出位作废,位右移时,无符号数和正数高位移进,0,负数补码移进,1,,移出位作废,有符号数无论位左移右移,符号位均不参与移位,复合赋值运算符,表,4-11 C51,复合赋值运算符表,复合赋值运算符由运算符和赋值运算符叠加组合,复合赋值运算符是先进行运算符所要求的运算,再把运算结果赋值给复合赋值运算符左侧的变量,例如,,x+=y,等同于,x=x+y,x/=y+10,等同于,x=x/(y+10),4.3 C51,基本语句,4.3.1,语句基本概念,语句是用来向计算机系统发出的操作指令,一条,C51,语句编译后会产生若干条机器操作码,有表达式语句、复合语句、选择语句和循环语句,表达式语句,在表达式后面加上“,;”,就构成表达式语句,例如:,a=b+c;,复合语句,由若干条单语句组合而成的语句称为复合语句,局部变量定义,;,语句,1;,语句,2;,语句,n;,单一语句,可不用花括号,括起,复合语句,必须用花括号,括起,且每个单语句后须有“,;”,复合语句允许嵌套,即在复合语句中引入另一条复合语句,4.3.2,选择语句,选择语句是根据给定的条件是否成立,判断并选择相应的操作,if,语句,C51,中的,if,语句可分为,3,种形式:,图,4-5 if,语句流程图,条件成立就选择,否则就不选择,if(,条件表达式,),内嵌语句,;,例如:,if(xy)m=x;/,若,xy,,最大值,m=x,max=m;/,最大值,max=m,不论条件成立与否,总要选择一个,if(,条件表达式,),内嵌语句,1;,else,内嵌语句,2;,例如:,if(xy)max=x;/,若,xy,,最大值,max=x,else max=y;/,否则,最大值,max=y,也可以用条件运算符“,?:”,实现,表达式,1,?表达式,2:,表达式,3,;,例如:,max=(xy)?x:y;,/,若,xy,,,max=x,;否则,,max=y,串行多分支结构,如图,4-5c,所示,if(,条件表达式,1),内嵌语句,1;,else if(,条件表达式,2),内嵌语句,2;,else if(,条件表达式,n),内嵌语句,n;,else,内嵌语句(,n+1,),;,【,例,4-6】,要求实现双键控,4,灯,K0,、,K1,均未按下,,VD0,亮,其余灯灭;,K0,单独按下,,VD1,亮,其余灯灭;,K1,单独按下,,VD2,亮,其余灯灭;,K0,、,K1,均按下,,VD3,亮,其余灯灭。,图,4-6,信号灯电路,演示,Keil C51,调试和,Proteus,仿真(见,实验,5,),双键控,4,灯程序,if,语句嵌套,【,例,4-7】,试用,if,语句嵌套实现双键控,4,灯,演示,Keil C51,调试和,Proteus,仿真(见,实验,5,),switch,语句,switch,语句是一种并行多分支选择语句,也称为散转,图,4-7 switch,语句流程图,【,例,4-8】,试用,switch,语句实现双键控,4,灯,演示本例,Keil C51,调试和,Proteus,仿真(见,实验,5,),4.3.3,循环语句,while,循环语句,根据判断语句在流程中执行的先后,可分为,while,循环和,do-while,循环,图,4-8,循环语句流程图,while,循环,while(,条件表达式,),循环体语句,;,【,例,4-9】,试求:,sum=n=1+2+100,演示本例本例,Keil C51,调试,最后显示:,n=101,,,sum=5050,表示,n=101,时停止累加,之前累加值,sum=5050,do-while,循环,do,循环体语句,;,while,(条件表达式),;,【,例,4-10,】,用,do-while,循环语句实现,n,最后显示:,n=101,,,sum=5050,表示,n=101,时停止累加,之前累加值,sum=5050,演示本例本例,Keil C51,调试,while,循环与,do-while,循环的区别:,先判断后执行 还是 先执行后判断,当第一次判断为真时,两者的执行结果是完全相同,但若第一次判断为假时,两者的执行结果就不同,while,循环一次也没执行,do-while,循环至少执行了一次,for,循环语句,for(,表达式,1,;表达式,2,;表达式,3),循环体语句,;,首先对循环变量(表达式,1,)赋初值,判断表达式,2,是否满足给定的循环条件,若满足循环条件(值为非,0,),则执行循环体语句,若不满足循环条件(值为,0,),则结束循环,在满足循环条件(值为非,0,)的前提下,执行循环体语句;,计算表达式,3,,更新循环变量;,返回判断表达式,2,,重复及以下操作,直至跳出,for,循环语句。,图,4-9 for,循环流程图,【,例,4-11,】,用,for,循环语句实现,n,最后显示:,n=101,,,sum=5050,表示,n=101,时停止累加,之前累加值,sum=5050,演示本例本例,Keil C51,调试,循环嵌套,在一个循环体内包含另一个循环,称为循环嵌套,循环嵌套常用于延时程序,【,例,4-12,】,要求,8,个发光二极管循环点亮,每次点亮时间约为,0.5,秒。,演示本例,Keil C51,调试和,Proteus,仿真(见,实验,6,),4.4 C51,构造类型数据,4.4.1,数组,数组是一组具有相同类型数据的有序集合,数组可分为一维和多维,常用的是一维数组,一维数组,定义格式,数据类型,存储器类型,数组名,元素个数,例如:,unsigned int code a10;,引用格式,数组名,下标,注意:数组下标是从,0,开始编号的,数组赋值,一般在数组初始化时(即数组定义时)赋值,在单片机应用中,数组的主要功能是查表,【,例,4-15,】,循环灯电路,要求实现流水循环,演示本例,Keil C51,调试和,Proteus,仿真(,实验,6,),花样循环灯电路,,要求按下列顺序循环,:,全亮,全暗,并重复一次;从上至下,每次亮,2,个;,从下至上,每次亮,2,个;从上至下,每次亮,4,个,并重复一次;,从上至下,每次间隔亮,2,个;每次间隔亮,4,个,并重复一次;,返回,不断循环。,演示本例,Keil C51,调试和,Proteus,仿真(,实验,6,),实际上是按花样循环码数组依次运行,4.4.2,指针,指针和指针变量,指针就是地址,变量的指针就是变量的地址,存放指针的变量称为指针变量,指针变量定义方式,数据类型,数据存储器类型,*,指针存储器类型,指针变量名,取地址运算符和指针运算符,&,:取地址运算符 例如:,y=,*,:指针运算符 例如:,z=*ap;,用指针实现例,4-15,花样循环电路,演示本例,Keil C51,调试和,Proteus,仿真(,实验,6,),说明:本程序书中没有,4.5 C51,函数,函数是,C,程序的基本单位,即,C51,程序主要是由函数构成的,4.5.1,函数概述,可分为主函数,main(),和普通函数,一个,C51,源程序必须有也只能有一个,main,函数,而且是整个程序执行的起始点,普通函数是被主函数调用的子函数,普通函数又可分为标准库函数和自定义函数,标准库函数是由,C51,编译系统的函数库提供的,用户自定义函数就是用户根据自己的需要编写的函数,函数的分类,函数的定义方式,返回值类型是指本函数返回值的数据类型,,若无返回值,则成为无类型,用,void,表示;,若该项要素缺省,则,C51,编译系统默认为,int,类型。,函数名除了,main,函数有固定名称外,,其他函数由用户按标识符的规则自行命名。,形式参数用变量名(标识符)表示,没有具体数值;,可以是一个,或多个(中间用逗号“,”分隔),或没有形式参数。,编译属性是指定该函数采用的存储器编译模式,,有,Small,、,Compact,和,Large 3,种选择,缺省时,默认,Small,模式。,中断属性是指明该函数是否中断函数;,寄存器组属性是指明该函数被调用时准备采用哪组工作寄存器。,局部变量是仅应用于本函数内的变量,,在执行本函数时临时开辟存储单元使用,本函数运行结束即予释放;,局部变量说明是说明该变量的数据类型、存储器类型等。,不能颠倒局部变量说明与函数体语句的次序,否则,C51,编译器将视作出错。,一对花括号是必须的。,4.5.2,函数的参数和返回值,函数的参数,函数的参数有形式参数和实际参数,形式参数是定义函数名后面括号中的变量,实际参数是主调用函数调用被调用函数时,赋给形式参数的实际数值,形参与实参之间的传递是单方向的,只能是主调用函数向被调用函数传递,其好处是:,提高了函数的通用性与灵活性,提高,80C51,内存空间的使用率,函数的返回值,功能是把程序运行的结果返回给主调用函数,return,表达式;,【,例,4-22】,根据,n,值计算,n,例,4-9,已给出计算,n,程序,本例,n,不定,由外部输入,演示本例,Keil C51,调试,若输入,n=100,,程序运行结果:,sum=5050,。,数组作为函数的形式参数,用数组作函数的参数时,并不是把数组值传递给形参,而是将实参数组起始地址传递给形参数组,使两个数组占用同一段存储单元,一旦形参数组某元素值发生变化,将会导致实参数组相应元素值随之变化,数组参数传递属于地址传递,能得到多于一个的函数返回值,指针变量作为函数的形式参数时,也可起到地址传递的作用,【,例,4-24】,对,n,个数组元素(随机输入)从大到小排序,设数组:,a16=11,99,66,22,111,55,0,222,44,155,77,255,133,100,88,33,演示本例,Keil C51,调试,Serial#1,窗口,立刻显示数组,原始数据和,排序后的数据,4.5.4,常用库函数,库函数是,C51,在库文件中已经定义好的函数,若需调用,应在源程序的开头采用预处理指令,将有关的库函数包含进来,格式如下:,#include,常用库函数主要有:,访问,80C51,特殊功能寄存器库函数,reg51.h,绝对地址访问库函数,absacc.h,内联函数,intrins.h,输入输出函数,stdio.h,数学函数,math.h,等。,书中部分习题编成的,目录(仿真文件免费下载),80C51,单片机实用教程,基于,Keil C,和,Proteus,双解汇编和,C51,两种程序,每条指令,/,语句均给出注释,编入,36,例,Proteus,仿真实验,第,5,章 中断系统和定时,/,计数器,80C51,单片机实用教程,基于,Keil C,和,Proteus,配套,Proteus,虚拟仿真,36,例目录(免费下载),对照书中程序,演示运行理解,增强教学效果,第,5,章 中断系统和定时,/,计数器,5.1 80C51,中断系统,5.1.1,中断概述,什么叫中断?,CPU,暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序,为什么要设置中断?,提高,CPU,工作效率,具有实时处理功能,具有故障处理功能,实现分时操作,中断源,80C51,单片机的中断源共有,5,个中断源,其中,2,个为外部中断源,,3,个为内部中断源:,:外部中断,0,,中断请求信号由,P3.2,输入,:外部中断,1,,中断请求信号由,P3.3,输入,T0,:定时,/,计数器,0,溢出中断,对外部脉冲计数由,P3.4,输入,T1,:定时,/,计数器,1,溢出中断,对外部脉冲计数由,P3.5,输入,串行中断(包括串行接收中断,RI,和串行发送中断,TI,),5.1.2,中断源和中断控制寄存器,中断请求控制寄存器,80C51,涉及中断请求的控制寄存器有,2,个,定时和外中断用,TCON,,串行中断用,SCON,用于判别,5,个中断源是否请求中断,相应标志位为“,1”,,表示请求中断,中断允许控制寄存器,IE,用于控制中断源的开放或关闭,可用软件对各位分别设置,相应标志位置“,1”,,开中;清,0,,关中,其中,EA,是总控制位。,EA=0,,,5,个中断源全部关闭,中断优先级控制寄存器,IP,可将,5,个中断源划分为两个中断优先级:,高优先级和低优先级,相应标志位置“,1”,,设置为高优先级,相应标志位清“,0”,,设置为低优先级,高优先级中断可以中断正在响应的低优先级中断,同优先级中断不能互相中断,5.1.3,中断处理过程,中断处理过程大致可分为四步:,中断请求、中断响应、中断服务和中断返回,中断请求,某中断请求标志位置“,1”,,发出中断请求信号,中断响应,CPU,查询(检测)到某中断标志为“,1”,在满足中断响应条件下,响应中断,中断响应操作,保护断点地址;,撤除该中断源的中断请求标志;,关闭同级中断;,将相应中断的入口地址送入,PC,;,中断响应条件:,该中断已经“开中”;,CPU,此时没有响应同级或更高级的中断;,当前正处于所执行指令的最后一个机器周期;,正在执行的指令不是,RETI,或者是访向,IE,、,IP,的指令,否则必须再另外执行一条指令后才能响应。,图,5-2,中断处理过程流程图,执行中断服务程序,一般来说,中断服务程序应包含以下几部分:,保护现场,执行中断服务程序主体,完成相应操作,恢复现场,80C51,五个中断源的,中断入口地址,如下:,INT0,:,0003H,T0,:,000BH,INT1,:,0013H,T1,:,001BH,串行口:,0023H,中断返回,在中断服务程序最后,必须安排一条中断返回指令,RETI,当,CPU,执行,RETI,指令后,自动完成下列操作:,恢复断点地址。,开放同级中断,以便允许同级中断源请求中断。,中断系统的应用主要是编制应用程序,编制应用程序包括两大部分内容:,第一部分是中断初始化;第二部分是中断服务程序,5.1.4,中断系统的应用,设置堆栈指针,SP,定义中断优先级,定义外中断触发方式,一般应定义边沿触发方式为宜,若外中断信号无法适用边沿触发方式,必须采用电平触发方式时,应在硬件电路上和中断服务程序中,采取撤除中断请求信号的措施,开放中断,除上述中断初始化操作外,还应安排好,等待中断或中断发生前主程序应完成的操作内容,中断初始化,在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处,根据需要保护现场,C51,程序,由编译器自动完成保护现场和恢复现场,中断源请求中断服务要求的操作,这是中断服务程序的主体,若是外中断电平触发方式,应有中断信号撤除操作,若是串行收发中断,应有对,RI,、,TI,清,0,指令,恢复现场,中断返回,最后一条指令必须是,RETI,中断服务子程序,中断服务程序以,C51,子函数的形式出现,其格式如下:,void,函数名,()interrupt n using m,中断函数体语句,;,中断函数无返回值,也不带参数,interrupt,是,C51,关键字,表示该函数是一个中断服务子函数,n=0,4,(常正整数),对应中断源编号,中断,C51,编程,using,是,C51,关键字,用于中断函数内选择工作寄存器组,m=0,3,(常正整数),对应工作寄存器区编号,using m,缺省时,不进行工作寄存器组切换,但所有在中断函数内用到的工作寄存器将被压栈保护。,中断函数不能被非中断调用,允许在中断函数中调用其他子函数,但被调用子函数使用的工作寄存器组,必须与中断函数使用的工作寄存器组相同,、,中断系统应用举例,【,例,5-1】,出租车计价器计程方法是,车轮每运转一圈产生一个负脉冲,,从外中断,INT0,(,P3.2,)引脚输入。,行驶里程为,:,轮胎周长,运转圈数设轮胎周长为,2m,,,试实时计算出租车行驶里程(单位米)。,演示,Proteus,仿真(见,练习,12,),5.2 80C51,定时,/,计数器,5.2.1,定时,/,计数器概述,80C51,单片机内部有两个定时,/,计数器,T0,和,T1,其核心是计数器,基本功能是加,1,对外部事件脉冲(下降沿)计数,是计数器,对片内机周脉冲计数,是定时器,片内机周脉冲频率是固定的,是,f,OSC,的,1/12,若,f,OSC,=12MHZ,,,1,机周为,1,s,若,f,OSC,=6MHZ,,,1,机周为,2,s,。,计数器由二个,8,位计数器组成,合起来是,16,位计数器,TH0/TH1,是高,8,位,,TL0/TL1,是低,8,位,作计数器时,外部事件脉冲必须从规定的引脚输入,T0,的外部事件脉冲应从,P3.4,引脚输入,T1,的外部事件脉冲应从,P3.5,引脚输入,且外部脉冲的最高频率不能超过时钟频率的,1/24,5.2.2,定时,/,计数器的控制寄存器,80C51,定时,/,计数器是可编程的,通过,TCON,和,TMOD,的状态设置来实现,定时,/,计数器控制寄存器,TCON,TCON,已在,5.1.2,节中介绍,其中,低,4,位用于外中断控制,高,4,位用于定时,/,计数器控制,TF1/TF0,为定时,/,计数器,T1/T0,中断请求标志,TR1/TR0,为定时,/,计数器,T1/T0,运行控制位,TR1/TR0=1,,,T1/T0,运行;,TR1/TR0=0,,,T1/T0,停运行,表,5-6 TCON,的结构和各位名称、位地址,定时,/,计数器工作方式控制寄存器,TMOD,用于设定定时,/,计数器的工作方式,低,4,位用于控制,T0,,高,4,位用于控制,T1,表,5-7 TMOD,的结构和各位名称、功能,表,5-8 M1M0,的,4,种工作方式,M1M0,:工作方式选择位,可选择,4,种工作方式,方式,0,:,13,位计数器,最大计数值,213=8192,方式,1,:,16,位计数器,最大计数值,216=65536,方式,2,:,8,位计数器,最大计数值,28=256,,定时初
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服