单片机接口与应用-课件汇总全套ppt完整版课件最全教学教程整套课件全书电子教案.pptx

上传人:可****阿 文档编号:77248485 上传时间:2023-03-13 格式:PPTX 页数:274 大小:4.31MB
返回 下载 相关 举报
单片机接口与应用-课件汇总全套ppt完整版课件最全教学教程整套课件全书电子教案.pptx_第1页
第1页 / 共274页
单片机接口与应用-课件汇总全套ppt完整版课件最全教学教程整套课件全书电子教案.pptx_第2页
第2页 / 共274页
点击查看更多>>
资源描述

《单片机接口与应用-课件汇总全套ppt完整版课件最全教学教程整套课件全书电子教案.pptx》由会员分享,可在线阅读,更多相关《单片机接口与应用-课件汇总全套ppt完整版课件最全教学教程整套课件全书电子教案.pptx(274页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机接口与应用第一章第一章 单片机基本组成单片机基本组成第二章第二章 C51程序设计程序设计第三章第三章 片内接口片内接口1.1 单片机的基本概念1.1.1 单片机的定义单片机的定义单片机是把CPU、存储器、定时器/计数器、中断系统和多种I/O接口电路与总线控制电路制作在一块芯片上的超大规模集成电路。单片机使用时,通常是处于测控系统的核心地位并嵌入其中,所以国际上通常把单片机称为嵌入式控制器(Embedded Microcontroller Unit,EMCU),或微控制器(Microcontroller Unit,MCU)。我国习惯于使用“单片机”这一名称。1.1.2 51系列单片机系列单

2、片机出现较早也是最成熟的单片机为Intel公司的MCS-51系列,如Intel8031、Intel8051、Intel 8751等型号,该系列单片机字长为8位,具有完善的结构和优越的性能、较高的性价比和要求较低的开发环境。STC系列单片机为宏晶科技公司生产的增强型51单片机,具有多种型号。本书在介绍经典MCS-51单片机的同时,也介绍了STC增强型单片机。1.1.3 单片机应用单片机应用1智能仪器仪表智能仪器仪表2机电一体化产品机电一体化产品3实时控制实时控制4分布式控制系统分布式控制系统5家居生活家居生活1.2 单片机基本组成单片机基本组成图1-1 单片机内部组成框图1.2.1 内部总线内部

3、总线总线(BUS)是传输信息的公共导线。在单片机内部使用的总线称为内部总线。地址总线(Address Bus,AB)用于传输地址信息。数据总线(Data Bus,DB)是用于CPU与存储器之间或CPU与I/O接口之间进行数据传送的一组信号线。控制总线(Control Bus,CB)是一组控制命令信号线,是CPU决定对外部器件作什么操作的命令线。1.2.2 中央处理器中央处理器中央处理器是单片机的核心,简称CPU,其作用是读入和分析每条指令,根据每条指令的功能要求,完成运算和控制操作。单片机应用程序经编译器编译,将生成可执行代码。把PC和单片机系统连接好后,运行程序下载软件,例如STC单片机的S

4、TC_ISP软件,就能够把程序代码下载到单片机片内ROM中。单片机在复位后,CPU自动从ROM中逐条取出程序代码并执行。1.2.31.2.4 程序存储器程序存储器存储器(Memory)用来存放程序和数据。分为只读存储器(ROM)和随机存储器(RAM)两大类。ROM对数据只能读出不能写入,断电后其中的数据不会丢失。因此一般用来存放程序代码和常数。RAM对数据既能读出也能写入,断电后其中的内容全部丢失。单片机中的RAM常用于存放变量和中间计算结果。1.2.5 I/O接口接口I/O接口是连接CPU与外设的中间电路。I/O接口与外部设备间交换的信号,通常有以下4种类型:数字量:二进制表示的数据,如:字

5、节数据、ASCII码。模拟量:随时间连续变化的物理量,如:电压、电流、湿度、压力、流量。开关量:二进制“0”和“1”描述的状态,如:开/关、启/停、通/断。脉冲量:上下沿跳变的信号。MCS-51片内集成有P0P3共4个并行接I/O口1.2.61.2.9串行通信接口,简称串口,其特征是用单根导线传输数据。MCS-51片内集成有一个全双工的串行异步通信接口(UART)。定时器/计数器,具有完成硬件定时、对外部脉冲信号进行捕捉与计数、产生周期脉冲信号输出等功能。MCS-51片内集成有2个16位定时器/计数器T0、T1。中断控制系统,实现单片机对异步事件的处理机制。MCS-51有5个中断源。时钟发生器

6、,用来产生单片机工作所需要的时钟信号。1.3.1 数制数制十进制数:十进制数的每一位有09十种数码,基数为10,高位权是低位权的10倍,加减运算的法则为“逢十进一,借一当十”,后缀为D,可省略。二进制数:二进制数的每一位有0和1两种数码,基数为2,高位权是低位权的2倍,加减运算的法则为“逢二进一,借一当二”,后缀为B。十六进制数:十六进制数的每一位有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。基数为16,高位权是低位权的16倍,加减运算的法则为“逢十六进一,借一当十六”,后缀

7、为H。1.3.2 数制转换数制转换二进制数转换为十六进制数二进制数转换为十六进制数二进制数转换为十六进制数采用“合四为一法”,即从右向左,每四位二进制数转换为一位十六进制数,最高位不足四位用0补齐,就可得到十六进制数。例如,把二进制数1011010110010011111B转换为十六进制数:0101 1010 1100 1001 1111B=5AC9FH十六进制数转换为二进制数十六进制数转换为二进制数十六进制数转换为二进制数采用“一分为四法”,即从左向右,每一位十六进制数转换为四位二进制数。例如,把十六进制数6C7BH转换为二进制数:6C7BH=0110 1100 0111 1011B1.3.

8、3 无符号数和有符号数无符号数和有符号数无符号数无符号数:如果一个数的所有数位都是数值位,没有符号位,则该数就是无符号数。例如,8位无符号数的8个位都是数值位,表示的数的范围为0000 0000B1111 1111B,即0255。同样,16位无符号数的16个位都是数值位,所以它可表示的数的范围为0000HFFFFH,即065535。有符号数有符号数:有符号数就是有符号位的数。有符号数以其二进制数的最高位作为符号位,且0表示“”,1表示“”。例如,对于8位二进制数,00000001B表示+1,11111111B表示-1。对于16位二进制数,0001H表示+1,FFFFH表示-1。1.4 MCS-

9、51的的CPU图1-2 MCS-51 CPU的组成1.4.1 控制器控制器1程序计数器程序计数器PC:PC用来存放下一条指令的地址,具有自动加1的功能。应用程序通过编译软件编译后,生成单片机指令码,并预先写入程序存储器ROM中。单片机运行后,CPU逐条从ROM中取出指令码并执行。2指令寄存器指令寄存器IR:CPU从ROM取出指令后,就将指令码暂存于IR中,等待译码。3指令译码器指令译码器ID:ID是对指令寄存器IR中的指令进行译码,将指令码变为执行此指令所需要的电信号。4数据指针数据指针DPTR:指针是存放地址的寄存器。数据指针DPTR,用于存放数据的地址。5堆栈指针堆栈指针SP:SP用于用于

10、指示出堆栈顶部在内部RAM块中的位置。1.4.2 运算器运算器1算术逻辑单元算术逻辑单元ALU:由加法器和其它逻辑电路等组成,完成数据的算术逻辑运算、循环移位、位操作等,参加运算的两个操作数,一个由ACC通过暂存器2提供,另外一个由暂存器1提供,运算结果送回ACC,状态送PSW。2累加器累加器ACC:是一个8位寄存器,简记为A,它通过暂存器与ALU传送信息,用来存放一个操作数或中间结果。3程序状态字程序状态字PSW:也是一个8位寄存器,用于存储程序运行过程中的各种状态信息。4其他部件其他部件:暂存器用来存放中间结果,B寄存器用于乘法和除法时,提供一个操作数,对于其他指令,只用作暂存器。5.位处

11、理器位处理器在MCS-51的ALU中,与字节处理器相对应,还特别设置了一个结构完整、功能极强的位处理器。MCS-51指令系统中的位处理指令集(17条位操作指令)、存储器中的位地址空间,以及借用程序状态寄存器PSW中的进位标志位CY作为位操作的累加器,构成了MCS-51的为处理器。位处理器可对直接寻址的位变量进行位处理,如置位、清零、取反、测试转移以及逻辑与、逻辑或等位操作,使用户在编程时可以利用指令完成原来要用硬件电路来完成的功能,并可方便地设置标志位等,给面向控制的实际应用带来了方便。1.5 MCS-51存储器存储器1.MCS-51的RAM分区1低低128字节字节RAM区区低128字节RAM

12、也称通用RAM区。通用RAM区又可分为工作寄存器组区,位寻址区和用户RAM区。工作寄存器组区:该区地址为00H1FH,共32字节,分为4组,每组称为一个工作组。每个工作组都包含8个8位工作寄存器,编号都是R0 R7。工作组0是最常用的寄存器组。通过切换工作组,可以提高程序运行效率。C51编程时,一般不需要指定工作组,编译器会自动为程序和函数分配它们。位寻址区:该区地址为20H 2FH,共16个字节。这个区域的存储单元既可以按字节存取,也可以按位存取。用户RAM区:该区地址为30HFFH,用于暂存各种变量和临时数据,也能用作函数调用时所使用的堆栈区。2高高128字节字节RAM区区MCS-52扩展

13、有高128 字节RAM,地址范围是80HFFH。高128字节RAM只能间接寻址。C51编程时,存储于该区的变量需要使用idata存储器类型进行变量声明。3特殊功能寄存器区特殊功能寄存器区特殊功能寄存器SFR是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器。MCS-52的SFR区与内部高128字节RAM区的地址范围重合,但二者在物理上是独立的。2.STC90C516RD+片内集成的ROM 和RAM地址空间1.6 MCS-51单片机外部引脚单片机外部引脚在at89x52.h头文件中,把P0、P1、P2、P3的位寄存器分别定义为P0_0P0_7、P1_0P1_7、P2_0P2_7、

14、P3_0P3_7,见表1-6。1.7 MCS-51最小系统最小系统最小系统是单片机可以运行程序的基本电路,包括单片机、电源、振荡电路、复位电路四部分。MCS-51的最小系统如图1-8所示MCS-51单片机的时序MCS-51的时序单位共有4个,从小到大依次是:节拍、状态、机器周期和指令周期。晶体振荡信号的一个周期称为节拍,用P表示。该周期是单片机时钟脉冲频率的倒数,是最基本、最小的定时信号,又称为振荡周期或单片机的时钟周期。状态周期由振荡脉冲二分频后得到,用S表示。这样,一个状态包含两个节拍,前半周期对应的节拍叫节拍1,记作P1;后半周期对应的节拍叫节拍2,记作P2,如图1-12所示。CPU以时

15、钟P1、P2为基本节拍,指挥单片机的各个部分协调工作。CPU完成一个基本操作所需要的时间称为机器周期。CPU的基本操作指的是读取指令、存储器读/写、对数据进行处理等操作。MCS-51采用定时控制方式,具有固定的机器周期。一个机器周期的宽度为6个状态,依次记作S1S6。由于一个状态又包括两个节拍,因此,一个机器周期总共有12个节拍,分别记作S1P1、S1P2、S6P1、S6P2,见图1-12。由于一个机器周期共有12个振荡脉冲周期,因此机器周期就是振荡脉冲的12分频。单片机执行一条指令所需要的时间称为指令周期。MCS-51大多数指令的指令周期由一个机器周期或两个机器周期组成,只有乘法、除法指令需

16、要4机器周期。以两个机器周期的指令周期为例,各时序单位之间的关系见图1-12。MCS-51单片机复位电路51单片机的复位电路如图1-13、1-14所示第二章第二章 C51程序设计程序设计C51是面向51系列单片机的C语言。与汇编语言相比,C51有如下优点:对单片机指令系统不要求了解,就可以直接编程操作单片机;寄存器分配、存储器的寻址以及数据类型等细节完全由编译器自动管理;有多种结构化控制语句,满足结构化设计要求;库中提供许多标准子程序,具有较强的数据处理能力,使用方便;具有方便的模块化编程技术,使已编好的程序很容易移植。2.1 C51的基本数据类型的基本数据类型2.1.1 位类型(位类型(bi

17、t,sbit)位类型是C51扩充的数据类型,用于访问51单片机中的可寻址的位单元。C51支持两种位类型:bit型和sbit型。bit用于在可位寻址的RAM区定义位变量,位地址范围是00H7FH,共128个可寻址位。例如:bit aflag;定义了一个名为aflag的位变量,编译时编译器会把aflag定位于20H2FH的RAM区sbit用于在SFR区定义位变量,位地址范围是80HF7H。SFR区的字节地址范围是80HFFH,但只有若干个字节单元可以位寻址,见图2-2。例如:字节地址为80H的SFR单元的位地址为80H87H。例如:sbit P0_0=0 x80;定义了一个名为P0_0的sbit型

18、位变量,P0_0的位地址为80H,即sfr中P0寄存器的第0位。使用sbit型位变量能够方便地对单片机并口的某一单个位进行操作。在“at89x52.h”文件中,已经包含了对P0P3口所有单个位的定义。C51编程时,若在程序开头使用“#include”语句,就可以直接引用P0_0、P0_1、P3_7这些位变量,而不必再进行定义。例如,要向P1.1引脚输出0,可编程如下:#include/#include为C51编译器的包含命令/其它语句P1_1=0;2.1.2 特殊功能寄存器型(特殊功能寄存器型(sfr,sfr16)sfr用于定义位于SFR区的字节单元,利用它可以访问SFR区所有的单字节特殊功能

19、寄存器。sfr16用于定义SFR区的双字节单元,利用它可以访问SFR区所有两个字节的特殊功能寄存器。由于在“at89x52.h”、“reg52.h”这样的头文件中,已经包含了51、52子系列单片机所有sfr型变量的定义,所以,应用程序在包含了这样的头文件后,就可以直接引用所有sfr型变量的名称,如P0、T0、SBUF,等等,而不需再去定义它们。例如,要向P0端口输出75H,可编程如下:#include/#include为C51编译器的包含命令/其它语句P0=0 x75;/向P0端口写入数据75H并输出到P0.0P0.72.1.32.1.7 字符型指针型字符型数据的长度为一个字节,用于存放一个单

20、字节数据。整型数据的长度为两个字节,用于存放一个双字节数据。长整型数据的长度为四个字节,用于存放一个四字节数据。浮点型数据(float)是长度为四字节的实数指针型(*),与之对应的是指针变量。指针变量中存放的是数据的地址。2.2.1 数组与字符串数组与字符串相同类型的数据排列形成的有限集合就是数组。在信息处理时常常用到以ASCII字符或扩展ASCII字符组成的字符串。C语言规定字符串以0作为结束符,0的ASCII码值为00H。数值、字符串定义举例int a10;/定义整型数组a,所有10个元素的初值都为0int b10=1,2,3,4;/定义整型数组b,前4个元素的值为1,2,3,4,余下的为

21、0char c=1,2,3,4;/定义字符型数组c,赋值了全部元素,数组长度可以省略char d25;/定义2行5列字符型数组d,所有10个元素的初值都为0char s=a,b,c,d;/定义字符型数组s,元素为a,b,c,dchar str=abcd;/定义字符串str,元素为a,b,c,d,02.3 常量、变量常量:是在程序运行时其值不能改变的量变量:是在程序运行时其值可以改变的量存储种类:是指变量在程序中的作用域数据类型说明符用于声明变量的数据类型存储器类型用于声明变量的存储单元应定位于单片机的哪一个存储区,如图2-42.4 C51的运算符的运算符C51支持的算术运算符有+、-、*、/、

22、%、+、-,见图2-5。C51支持的关系运算符与逻辑运算符有、=、=、=、!=、|、&、!。这些运算符及示例语句见图2-6。位操作运算符对操作对象按位进行运算,包括位与(&)、位或(|)、位非()、位异或()、左移()六种,如图2-7所示。特殊运算符包括各种赋值运算符,问号运算符,逗号运算符,地址及指针运算符等,其类型及示例如图2-8所示。2.5 C51的表达式和语句的表达式和语句1if语句语句C51的if语句有if、if-else、if-else-if三种形式。见图2-92switch语句语句switch语句的一般形式和执行流程如下图所示3.while语句一般形式为:while(表达式)语句

23、体;do-while语句的形式为:do语句体;while(表达式);两种while语句的执行流程如下图4.for语句一般形式为:for(exp1;exp2;exp3)语句体;for语句执行流程如下图5转移语句包括:(1)goto语句:使程序无条件转移到标号语句处(2)break语句:作用是跳出switch语句或跳出本层循环,转去执行后续的程序(3)continue语句:作用是结束本次循环,转入下一次循环条件的判断与执行(4)return语句:return语句只能出现在被调函数中,用于返回主调函数,其格式是:return(表达式);其中,表达式为函数的返回值2.6 函数函数C51函数定义的形式如

24、下:类型说明符 函数名(形式参数表)类型说明;语句;函数调用的一般形式为:函数名(实际参数表);函数的编写与调试示例1编写程序编写程序在Keil uV4中输入以下程序,保存为类型名为c的文件,如123.c#includeint n;/定义定义int型全程变量型全程变量n/*延时函数延时函数*/void delay(int n)int i;for(i=0;in;i+);/*主函数主函数*/main()n=20000;while(1)/主循环主循环P1_1=1;/向向P1.1引脚输出高电平引脚输出高电平delay(n);/延时延时P1_1=0;/向向P1.1引脚输出低电平引脚输出低电平delay(

25、n);/延时延时delay(n);/延时延时2.编译程序编译程序(1)创建项目。在Keil uV4中创建一个项目,确定项目名称,如abc(2)为项目选择单片机型号。这里选择Atmel公司的AT89S52(3)为项目添加C51文件,即把123.c添加到项目abc中(4)设置编译后输出HEX文件(5)按F7编译程序3调试程序调试程序在Keil uV4的Debug菜单中,包含了多个用于调试源程序的选项。如:Ctrl+F5用于启动和终止调试,F5用于运行程序,F10为单步运行程序,Ctrl+F10为运行到光标所在行,F9为设置/清除断点。Keil uV4还具有查看单片机片内各种寄存器、I/O端口状态、

26、程序中的各变量值,其逻辑分析器能够显示来自I/O引脚的信号波形。4下载到单片机下载到单片机(1)首先在PC上安装STC单片机自动编程器的USB驱动程序,如CH340驱动程序。(2)将编程器与PC通过USB线连接,连接后PC将为该设备分配一个虚拟串口。(3)把编程器的GND、RXD、TXD、5V0分别与单片机芯片的GND、P3.1、P3.0、VCC连接,运行STC-ISP程序,选择单片机芯片型号。(4)打开程序文件,如abc.HEX。(5)选择串口,下载。(6)下载成功后,程序即自动运行。若用杜邦线把P1.1引脚与一只LED连接,可以观察到LED闪烁第三章第三章 单片机片内接口单片机片内接口3.

27、1 并行接口并行接口MCS-51单片机有P0、P1、P2、P3共4组并行I/O端口,每组端口都是8位准双向口,共32根引脚。并口要点:并行接口可以同时输入/输出8位数据。准双向口:CPU在读取准双向口输入的数据前,应向该接口输出高电平。但由于单片机复位时已经置P0、P1、P2、P3为高电平,所以把它们作为输入接口时,CPU就不需要再进行输出高电平的操作了。3.1.1 P0口口P0口要点:P0口主要用作普通I/O接口,在一些应用中,需要对P0口的引脚外接上拉电阻。CPU访问P0的C51例句:bit b;char c;c=P0;/字节访问:CPU读P0口引脚(P0.7P0.0)状态并存入字符型变量

28、cP0=P0;/字节访问:CPU读P0口各引脚锁存器,取反后输出到P0.7P0.0引脚b=P0_0;/位访问:CPU读P0.0引脚状态并存入位变量bP0_0=P0_0;/位访问:CPU读P0.0锁存器状态,取反后,输出到P0.0引脚3.1.2 P1口口P1口要点P1是一个8位准双向口,它只作通用的I/O口使用,其访问方式与P0口相同访问P1口的例句:char c1,c2;bit b1,b2;c1=P1;/字节访问:读P1口引脚(P1.7P1.0)状态并送入变量c1c2=P1;/字节访问:读P1口引脚(P1.7P1.0)状态,位取反后送入变量c2P1=P1;/字节访问:读P1口各锁存器,各位取反

29、后输出到P1各引脚P1&=0 x01;/字节访问:读P1口各锁存器,同0 x01按位与后输出到P1各引脚P1_1=P1_1;/位访问:读P1.1锁存器,取反后,输出到P1.1引脚b1=P1_5;/位访问:读P1.5引脚状态并送入变量b1b2=P1_7;/位访问:读P1.7引脚状态,取反后送入变量b2 3.1.3 P2口口 P2口口要点:要点:P2主要作为准双向通用I/O口使用3.1.4 P3口口 P3口口要点:要点:P3的第二功能很重要,但对于不使用第二功能的引脚,仍可作为准双向通用I/O口使用3.1.5 并口应用举例并口应用举例【例3-1】用P0.6、P0.7引脚分别控制2只发光二极管LED

30、1、LED2。控制方式为:LED1点亮、LED2熄灭;延时;LED1熄灭、LED2点亮;如此循环。【例3-2】用P1.0、P1.1引脚连接按钮S1、S2输入,用P2.7控制一只晶体管的导通与截止,该晶体管驱动一只小型直流继电器K1。控制要求是:按下S1后,K1通电;按下S2后,K1断电。C51程序如下。#includemain()while(1)bit run;/定义位变量,指示K1状态if(P1_0=0)run=1;/按下S1,run=1if(P1_1=0)run=0;/按下S2,run=0if(run=1)P2_7=0;/run=1,P2.7输出低电平,K1通电else P2_7=1;/r

31、un=0,P2.7输出高电平,K1断电【例3-3】用P2口通过ULN2003驱动芯片控制一只小型步进电机运行,且通过软件延时实现电机通电相序的变换。试绘出控制电路并编写C51程序。C51程序如下。#includemain()while(1)int i;/定义变量i,用于延时for(P2=0 x80,P0=0 x80,i=0;i1000;i+);/A通电,LED显示,延时for(P2=0 x40,P0=0 x40,i=0;i1000;i+);/B通电,LED显示,延时for(P2=0 x20,P0=0 x20,i=0;i1000;i+);/C通电,LED显示,延时for(P2=0 x10,P0=

32、0 x10,i=0;i1000;i+);/D通电,LED显示,延时3.2 中断中断3.2.1 中断源中断源2中断信号的产生中断信号的产生下面是MCS-52各中断信号的产生方式。(1)INT0中断:若预置IT0=0,当P3.2/引脚出现低电平时向CPU请求INT0中断;若预置IT0=1,当P3.2/引脚出现下降沿时向CPU请求INT0中断。(2)INT1中断:若预置IT1=0,当P3.3/引脚出现低电平时向CPU请求INT1中断;若预置IT1=1,当P3.3/引脚出现下降沿时向CPU请求INT1中断。(3)T0中断:当T0溢出标志TF0=1时,向CPU请求T0中断。(4)T1中断:当T1溢出标志

33、TF1=1时,向CPU请求T1中断。(5)串口中断:当串口发送中断标志TI=1、或串口接收中断标志RI=1时,向CPU请求串口中断。(6)T2中断:当T2溢出标志TF2=1、或T2外部标志EXF2=1时,向CPU请求T2中断。3中断允许的设置中断允许的设置下面是下面是C51设置开中断和关中断的语句。设置开中断和关中断的语句。EX0=1;/*开开INT0中断中断*/EX0=0;/*关关INT0中断中断*/EX1=1;/*开开INT1中断中断*/EX1=0;/*关关INT1中断中断*/ET0=1;/*开开T0中断中断*/ET0=0;/*关关T0中断中断*/ET1=1;/*开开T1中断中断*/ET1

34、=0;/*关关T1中断中断*/ES=1;/*开串口中断开串口中断*/ES=0;/*关串口中断关串口中断*/ET2=1;/*开开T2中断中断*/ET0=0;/*关关T2中断中断*/EA=1;/*开开CPU中断中断*/EA=0;/*关关CPU中断中断*/3.2.2 中断优先级中断优先级MCS-52所有的中断都具有2个中断优先级:0为低优先级,1为高优先级。每个中断的优先级均可用软件设置。例如:PX0=1;/*设INT0中断为高优先级*/PX0=0;/*设INT0中断为低优先级*/PX1=1;/*设INT1中断为高优先级*/PX1=0;/*设INT1中断为低优先级*/PT0=1;/*设T0中断为高优

35、先级*/PT0=0;/*设T0中断为低优先级*/PT1=1;/*设T1中断为高优先级*/PT1=0;/*设T1中断为低优先级*/PT2=1;/*设T2中断为高优先级*/PT2=0;/*设T2中断为低优先级*/PS=1;/*设串口中断为高优先级*/PS=0;/*设串口中断为低优先级*/中断查询次序由高到低排列:INT0,T0,INT1,T1,UART,T23.2.3 中断服务函数中断服务函数在C51中,中断服务程序是用中断服务函数来实现的,它的常用形式如下:void 函数名(void)interrupt 中断号语句;3.2.4 中断应用举例中断应用举例【例3-4】用单片机自测INT0、INT1中

36、断优先顺序。方法是把P3.2/与P1.0连接,把P3.3/与P1.1连接,P0与一只七段数码管7-Seg连接,主程序使7-Seg显示字型P,INT0中断服务程序使7-Seg显示字型0,INT1中断服务程序使7-Seg显示字型1。试绘出电路图、编写C51程序并进行测试。#include#includevolatile unsigned int i1,i2;/编译器不对volatile型变量进行优化main()IT0=IT1=1;/置INT0、INT1下降沿触发中断EX0=1;/开INT0中断,删除此句禁止INT0中断请求EX1=1;/开INT1中断,删除此句禁止INT1中断请求EA =1;/开

37、CPU 中断,删除此句禁止CPU 响应中断while(1)/主循环unsigned int i;/用于延时P0=0 x8c;/7-Seg显示Pfor(i=0;i65535;i+);/延时P1=0 xFC;/同时拉低P1.0、P1.1,输出到P3.2、P3.3,以触发中断_nop_();_nop_();_nop_();_nop_();/维持低电平4个机器周期P1=0 xFF;/同时拉高P1.0,P1.1,输出到P3.2、P3.3/*INT0 中断服务程序*/void INT0_isr()interrupt 0/*INT0中断号为0*/P0=0 xc0;/7-SEG显示0for(i2=0;i250

38、000;i2+);/延时/*INT1 中断服务程序*/void INT1_isr()interrupt 2/*INT0中断号为2*/P0=0 xf9;/7-SEG显示1for(i1=0;i150000;i1+);/延时3.3 定时器定时器/计数器计数器3.3.1 定时器定时器/计数器的结构计数器的结构1TCON寄存器TCON是定时器控制寄存器,它的高4位用于控制T0、T1。TCON的格式为:TF1:T1溢出标志位。T1被允许计数以后,从初值开始加1计数。当最高位产生溢出时由硬件置位TF1,向CPU请求中断;TF1一直保持到CPU响应中断时,才由硬件清零(TF1也可由程序查询清零)。TR1:T1

39、运行控制位。该位由软件置位和清零。当TR1=1时,启动T1开始计数;当TR1=0时,停止T1计数。TF0:T0溢出标志位,功能和TF1类似。TR0:T0运行控制位,功能和TR1类似。2TMOD寄存器GATE:门控位。GATE=0时,T0、T1只分别由TR0、TR1来控制运行与停止;GATE=1时,用程序设置TR0或TR1为1,并且外部中断引脚(P3.2/INT0引脚与T0配合,P3.3/INT1引脚与T1配合)也为高电平时,才能启动T0或T1计数。C/T:定时/计数模式选择位。C/T=0为定时模式,即定时器对CPU内部的机器周期脉冲信号计数;C/=1为计数模式,即定时器对外部引脚(P3.4/T

40、0、P3.5/T1)脉冲信号计数。M1、M0:工作方式设置位。M1M0=00:方式0,13位定时器/计数器;M1M0=01:方式1,16位定时器/计数器;M1M0=10:方式2,8位自动重装定时器/计数器;M1M0=11:方式3,T0分成两个8位的定时器/计数器。3.3.2 定时器定时器/计数器的工作方式计数器的工作方式1.方式方式1方式1为16位计数方式。T0的16位计数器由TL0和TH0组成。TL0溢出时,向TH0进位,TH0溢出时,置位TF0标志,向CPU发出中断请求。图3-16是T0工作在方式1的逻辑结构图,T1与之类似2.方式方式2方式2为8位自动重装计数方式,各控制信号的作用与方式

41、1相同。方式2下,TL0作8位计数器使用,TH0作为8位常数缓冲器,保存计数初值。当TL0计数产生溢出时,在把TF0置1的同时,将保存在TH0中的计数初值自动装入TL0,使TL0再次从该初值加1计数,如此循环。由于是8位的计数器,所以计数值达到28=256就产生溢出。图3-17是T0工作在方式2的逻辑结构图,T1与之类似。3.方式方式3方式3只适用于T0。此时,T0被分为两个独立的8位计数器TL0和TH0。其中,TL0占用T0的控制位、引脚和中断源。除计数位数不同于方式1外,其功能和操作与方式1完全相同,可定时也可计数。TH0占用T1的控制位TF1和TR1,同时还占用了T1的中断源,其启/停仅

42、受TR1控制。TH0只能用作8位定时器,不能对外部脉冲计数。在这种情况下,T1一般用作串口波特率发生器。3.3.3 T0、T1应用举例应用举例【例3-5】设单片机晶振频率为12MHz,编写C51程序,用T0定时中断使P1.0引脚输出1kHz的脉冲方波,再用T1定时中断使P1.1引脚输出10kHz的脉冲方波。1定时器计数初值计算定时器计数初值计算T0、T1用作定时器时,计数脉冲频率为fosc/12。设定时器的溢出频率为f,则定时器的计数次数n=fosc/12/f。定时器的计数初值就等于256(对于8位计数器)或65536(对于16位计数)减去分频数,即:2.程序框图3.程序#include#de

43、fine FOSC 12000000L/晶体振荡频率#define N_T20KHZ(256-FOSC/12/20000)/T1初值#define N_TH2KHZ(65536-FOSC/12/2000)/256/TH0初值#define N_TL2KHZ(65536-FOSC/12/2000)%256/TL0初值main()TMOD=0 x01;/T0方式1:TMOD|=0 x20;/T1方式2:TH1=N_T20KHZ;/装T1计数初值EA=ET0=ET1=1;/开CPU、T0、T1中断TR0=TR1=1;/启动定时器T0、T1while(1)void t0_isr()interrupt

44、1TH0=N_TH2KHZ;/装计数初值高8位TL0=N_TL2KHZ;/装计数初值低8位P1_0=P1_0;/P1.0取反后输出void t1_isr()interrupt 3P1_1=P1_1;/P1.1取反后输出【例3-6】设单片机晶振频率为12MHz,用T0定时产生1秒钟的定时间隔,并通过P0控制一只共阳极七段数码管,显示秒钟的个位数。试绘出硬件电路并编写C51程序。1硬件电路硬件电路2程序设计程序设计#include#define FOSC 12000000L/晶体振荡频率#define N_TH50ms(65536-FOSC/12*50/1000)/256/50ms(20Hz)TH

45、0初值#define N_TL50ms(65536-FOSC/12*50/1000)%256/50ms(20Hz)TL0初值#define N_1sec 1000/50/1sec T0中断次数main()TMOD=0 x01;/T0方式1:TR0=1;/启动定时器EA=ET0=1;/开CPU、T0中断while(1)code unsigned char SegDat=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/09void t0_isr()interrupt 1static int n_t0,n_sec;TH0=N_

46、TH50ms;/装计数初值高8位TL0=N_TL50ms;/装计数初值低8位if(+n_t0=N_1sec)n_t0=0;P0=SegDatn_sec;/P0输出,显示if(+n_sec=10)n_sec=0;【例3-7】用单片机的P3.4/T0引脚对一只NPN型光电开关的输出脉冲进行计数,并通过P0控制一只七段数码管,显示脉冲数的个位数。试绘出硬件电路并编写C51程序。1.光电开关工作原理2.硬件电路3.程序设计#includecode unsigned char SegDat=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x

47、90;/09main()TMOD=0 x05;/T0方式1,对外部脉冲计数:TR0=1;/启动T0while(1)unsigned int i;i=TH0*256+TL0;/读取TH0、TL0并合成为无符号16位整数 i%=10;/i对10取余数,得到i的个位数 P0=SegDati;/P0输出,显示i的字型 for(i=0;i30000;i+);/为显示延时一段时间/*如果没有光电开关,可以把P1.0与P3.4连接,并加入以下语句 P1_0=0;for(i=0;i10;i+);P1_0=1;*/【例3-8】用单片机的P2.7引脚通过ULN2003的一个通道控制一只直流电机的运行,并用T0定时

48、器使P2.7引脚输出周期为2ms的PWM波形,设每个波形的前1.5ms为高电平,后0.5ms为低电平。试设计硬件电路并编写C51程序。1直流电机的驱动直流电机的驱动2控制电路3.程序设计#include#define FOSC 12000000L/晶体振荡频率#define N_T0d1ms(256-FOSC/12/10000)/0.1ms(10000Hz)TH0初值main()TMOD=0 x02;/T0方式2:TH0=N_T0d1ms;/装T0计数初值预存于TH0TR0=1;/启动T0EA=ET0=1;/开CPU、T0中断while(1)void t0_isr()interrupt 1/T

49、0中断号=1static char n_t0;/T0中断次数P2_7=(n_t0 15)?1:0;/向P2.7输出PWM波形if(+n_t0=20)n_t0=0;/PWM周期=20次0.1ms=2ms3.4 串行接口串行接口3.4.1 串行通信基本概念串行通信基本概念1.并行通信与串行通信并行通信与串行通信2.异步通信方式3.异步通信帧格式异步通信的字符帧由起始位、数据位、校验位和停止位组成,见图3-29。起始位起始位:位于字符帧开头,只占一位,为逻辑0低电平,用于向接收设备表示发送端开始发送一帧信息。数据位数据位:紧跟起始位之后,根据通信约定可取58位,低位在前、高位在后。奇偶校验位奇偶校验

50、位:位于数据位之后,用于数据位的奇偶校验。奇偶校验有奇校验、偶校验和无校验三种方式,若选择无校验方式,则通信时不发送该位。停止位停止位:位于字符帧的最后,为逻辑1的高电平,根据通信约定可取1位、1.5位或2位。用于向接收端表示一帧字符信息已经发送完,也为发送下一帧做准备。从起始位开始到停止位结束的全部内容称之为一帧。两相邻帧之间可以没有空闲位,也可以有若干空闲位3.4.2 51单片机串口结构及串口寄存器单片机串口结构及串口寄存器1SBUF寄存器寄存器SBUF是串口寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址,但不会出现冲突,因为它们当中一个只能被CPU读出数据,另一个只能被CPU写

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁