版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务一
输出1000Hz的方波任务二
每秒闪烁一次的LED任务三
简易频率计在实践中,往往需要利用单片机实现间隔一较短时间重复执行某一事件的功能。使用单片机可输出不同频率的方波,既可以作为其他电路的信号源,也可作为报警器、简易音乐等的信号提供电路,直接驱动发声器件发出对应的声音。本任务的内容是使用AT89S51单片机的定时/计数器模块,利用定时中断实现从P1.0输出1000Hz方波的功能。任务提出任务一
输出1000Hz的方波根据任务目标,要实现从P1.0输出1000Hz的方波,实际上就是要求从P1.0连续输出周期为1ms的方波,或者说按标准时间间隔改变P1.0引脚的高低电平。由于单片机的定时/计数器属于单片机内部功能模块,所以整个系统的硬件仅需要单片机的最小系统即可。任务分析要完成标准时间间隔,可以采用空循环指令的方式实现延时,其缺点是单片机在定时期间内不能进行其他操作,使单片机的工作效率极低;也可以采用执行其他任务来兼顾延时,但执行其他任务的耗时与期望定时的时间不尽相同,因此不能实现精确定时。为了解决精确定时与执行其他任务之间的矛盾,常采用单片机定时/计数器定时中断的方式来实现精确定时。采用定时中断时,定时的任务是由单片机的定时/计数器硬件单独完成的,而单片机就可以正常地执行其他程序任务,只有当定时时间到了,才中断正在执行的程序,转去执行中断服务程序,中断服务程序执行完成后,自动回到断点,继续执行被中断的程序。一、定时/计数器简介在8051系列单片机中有两个可编程的定时/计数器,分别叫做T0和T1。在8052系列单片机除了上述两个定时/计数器外,还有一个定时/计数器2(T2),它的功能更强一些。它们既可以编程作为定时器使用,也可以编程作为计数器使用。T1和T2还可以作为串行接口的波特率发生器。相关知识定时/计数器实质上就是一个加1计数器,定时器实际上也是以计数方式工作的,只是它对固定频率的脉冲进行计数,由于脉冲周期固定,由计数值可以计算出定时时间,由此实现定时功能。当定时/计数器工作于定时器方式时,它对具有固定时间间隔的内部机器周期进行计数,每个机器周期使定时器的值增加1。而每个机器周期等于系统石英晶体振荡器的12个振荡周期,故计数频率为系统振荡器工作频率的1/12,当采用12MHz的晶振时,计数频率为1MHz,计数周期为1μs。定时/计数器的寄存器是一个16位的寄存器,由两个8位寄存器组成。对应定时器T0的寄存器是由TL0和TH0组成的,对应定时器T1的寄存器是由TL1和TH1组成的。定时/计数器的初始值通过计数寄存器进行设置,定时或计数的脉冲个数也可以从计数寄存器读出。T0和T1由模式控制寄存器TMOD来设置工作方式,由控制寄存器TCON来控制T0、T1的启动、停止和设置溢出标志。当计数溢出(计数器计数到所有位全为“1”时,下一个计数脉冲到达时,使计数各位全部回到零)时,使定时器控制寄存器TCON的TF0或TF1位置1,向CPU发出中断请求,在定时/计数器中断允许的情况下,将引起定时中断。当发生溢出时,如果定时/计数器工作于定时模式,则表示定时时间已到,如果工作于计数模式,则表示外部脉冲个数已超过定时/计数器设置的工作方式允许的最大计数值。二、定时/计数器的模式控制寄存器TMOD模式控制寄存器TMOD是对定时器0和定时器1的计数方式和计数器控制方式进行设置的寄存器,低4位用于T0,高4位用于T1。TMOD位于内部特殊寄存器区的89H单元,TMOD不能位寻址,即只能对其整体赋值或读取。CPU复位时TMOD所有位清0。TMOD寄存器的八位控制功能如下所示:定时/计数器有4种工作方式,由M1、M0位进行设置。工作方式的设置见表。定时/计数器工作方式1.方式0定时/计数器工作方式0的结构图2.方式1定时/计数器工作方式1的结构图3.方式2定时/计数器工作方式2的结构图4.方式3定时/计数器工作方式3的结构图四、定时/计数器中断的实现过程在外部中断模块中已介绍过中断控制寄存器TCON,TCON的低4位用于外部中断控制,而TCON的高4位则用于定时/计数器的启动和中断申请,TCON位于内部特殊寄存器区的88H单元,高4位功能如下所示:为了说明定时/计数器中断时各寄存器的设置和工作过程,图给出了定时/计数器T0中断设置和工作示意图。定时/计数器中断设置和工作示意图五、定时/计数器的初始化设置定时/计数器的初始化是非常重要的,以定时器0为例,初始化编程格式如下所示:TMOD=方式字;
//选择定时器的工作方式,高4位为T1的设置TH0=高8位初始值;//装入T0时间常数TL0=低8位初始值;//对于T1则为TH1和TL1ET0=1;
//开T0中断,对于T1则为ET1=1EA=1;
//全局中断允许,如果有其他中断,可共用本条指令TR0=1;
//启动T0定时器,对于T1则时TR0=1六、定时/计数器的中断服务程序编写在定时/计数器的初始化操作设置好后,程序运行过程中当定时/计数器达到定时时间或计数次数时,CPU会执行定时/计数器的中断服务程序。因此在编写中断服务程序时,应该完成此时相应的操作处理,根据不同的任务,具体的操作处理也不相同,但通常情况下需要重设定时/计数器的初值(工作方式2除外),以完成下一轮定时或计数的任务。一、硬件设计根据任务分析,实现任务的硬件电路仅需要单片机最小系统。在本任务中选择AT89S51单片机芯片为系统控制芯片,其最小系统较为简单,包括复位电路和时钟电路,其参数选择原则见相关说明,这里选择系统晶振频率为11.0592MHz。具体的硬件电路略。任务实施在实践中,可以通过示波器、频率计等仪器仪表测量单片机从P1.0引脚输出的脉冲。也可以将这个脉冲送到扬声器上,通过声音感受单片机的输出频率。当然,因为单片机输出口的驱动能力有限,无法直接驱动扬声器,所以需要将单片机引脚输出的脉冲信号通过功率放大电路放大后再送给扬声器。具体的功率放大电路有多种选择,这里不作介绍。二、软件设计从P1.0输出1000Hz的方波,实际上就是要求从P1.0输出周期为1ms的方波。为了简化程序,将输出方波的占空比设定为50%,则高电平和低电平的时间各为1ms的一半,即各为500μs。即在单片机中实现500μs的定时,每次定时时间到了的时候,将P1.0的电平改变就可以了。一个引脚电平的改变,使用取反指令就可以完成,具体的指令如“P10=~P10;”。完成500μs的定时,可以采用指令延时的方式,用循环指令很容易实现,具体实现方式如图示的程序流程图所示。但这种方案中,单片机在定时期间不能做其他操作,利用率极低,为了解决这个矛盾,可以采用定时中断的方式来实现。使用单片机内部的定时/计数器定时500μs,需要对定时/计数器进行初始化。启动定时器之后,由硬件对固定频率的脉冲进行计数,达到500μs后,出现计数溢出,产生中断,进行中断服务程序。具体的中断服务程序流程图如图所示。采用指令延迟的程序流程图中断服务程序的流程图三、Proteus仿真1.因本任务中的电路仅有单片机最小系统,故在ProteusISIS软件中放置一片AT89C51即完成了电路的绘制。2.在Keil软件开发环境下,创建项目,编辑源程序,将编译生成的HEX文件装载到Proteus虚拟仿真硬件电路的AT89C51芯片中。3.运行仿真,仔细观察运行结果。输出1000Hz方波的仿真效果图MCS-51单片机的定时器最长能够计数65536个脉冲,在12MHz的工作频率下,定时方式最长的定时时间约为65ms。在实际应用中,常需要长时间较精确的定时,可以利用定时中断实现。本任务的内容是用定时方式使LED每秒闪烁一次。任务提出任务二
每秒闪烁一次的LED与相似,要使LED每秒闪烁一次,按LED的点亮时间和熄灭时间相同进行处理,则只需要进行0.5s的定时,即每过0.5s,将LED的状态取反就可以实现目标了。与本课题中的任务一相比较,本任务只不过是频率变得更低了,需要实现定时的周期更长了。任务分析在单片机中,由于定时/计数器最多只能计数65536次,所以在晶振频率较高时,不能够一次产生较长的定时时间。如晶振为12MHz时,机器周期为1μs,最大定时时间为65536μs。本例中所采用的晶振为11.0592MHz,当然也不够定时0.5s。为了完成0.5s的定时,一般来说,有两种方案可以实现。第一种方案是在硬件定时的基础上,增加一个存储单元,每次中断时使用该存储单元进行计数,当达到某个计数值时再执行对应的程序,这样就延长了定时的时间长度。第二种方案也是采用一个定时器进行硬件定时,在每次中断时输出一个脉冲,然后采用硬件计数的方式延长定时时间。在本任务中,仅仅实现了0.5s的定时,如果要改为其他时间的定时,则需要修改其中的定时器初始值和软件计数单元的计数值。这里介绍的定时和计数方法,也完全可以应用到前面的几个课题中,实现对应的课题任务。在C51中,变量在定义之后,其存在时间及其作用范围与该变量的定义语句所在的位置和定义变量语句中的存储种类有关。相关知识一、变量的作用范围从作用范围来看,变量有全局变量和局部变量之分。全局变量是指在程序开始处或各个功能函数的外面定义的变量,在程序开始处定义的全局变量对于整个程序都有效,可供程序中所有函数共同使用;而在各功能函数外面定义的全局变量只对从定义处开始往后的各个函数有效,只有从定义处往后的那些功能函数才可以使用该变量,定义处之前的函数则不能使用它。局部变量是指在函数内部或以花括号{}围起来的功能块内部所定义的变量,局部变量只在定义它的函数或功能块以内有效,在该函数或功能块以外则不能使用它。局部变量可以与全局变量同名,但在这种情况下局部变量的优先级较高,而同名的全局变量在该功能块内被暂时屏蔽。二、变量的生存期变量的生存期即该变量存在的时间。从变量的存在时间来看又可分为静态存储变量和动态存储变量。静态存储变量是指该变量在程序运行期间其存储空间固定不变;动态存储变量是指该变量的存储空间不确定,在程序运行期间根据需要动态地为该变量分配存储空间。在定义变量时,可以指定变量的存储种类。在C51中,变量的存储种类有4种:自动(auto)、外部(extern)、静态(static)和寄存器(register)。1.自动变量用关键字auto作存储类型说明的局部变量(包括形参)称为自动变量。自动变量的默认范围在定义它的函数体或复合语句内部,只有在定义它的函数被调用,或是定义它的复合语句被执行时,编译器才为其分配内存空间,开始其生存期。当函数被再次调用或符合语句被再次执行时,自动变量所对应的内存空间的值将不确定,有可能不是上次运行时的值,因而必须被重新赋值。2.外部变量按照默认规则,凡是在所有函数之前,在函数外部定义的变量都是外部变量,定义时可以不写extern说明符。但是,在一个函数体内说明一个已在该函数体外或其他程序模块文件中定义过的外部变量时,则必须使用extern说明符。一个外部变量被定义后,它就被分配了固定的内存空间。外部变量的生存期为程序的整个执行时间,即在程序执行期间外部变量可以被随意使用,当一条复合语句执行完毕或是某一函数返回时,外部变量的存储空间并不被释放,其值也仍然保留。外部变量属于全局变量。C51允许将大型程序分解为若干个独立的程序模块文件,各个模块可分别进行编译,然后再将它们链接在一起。在这种情况下,如果某个变量需要在所有程序模块文件中使用,只要在一个程序模块文件中将该变量定义成全局变量,而在其他程序模块文件中用extern说明该变量是已经被定义过的外部变量就可以了。3.静态变量静态变量不像自动变量那样只有当函数调用它时才存在,退出函数时它就消失。静态变量所分配的内存空间是独占的,始终都是存在的。静态变量只能在定义它的函数内部进行访问,退出函数时,变量的值仍然保持但是不能进行访问。使用静态变量需要占用较多的内存空间,而且降低了程序的可读性。4.寄存器变量编译器给使用register定义的变量分配单片机的通用寄存器空间,有较快的运行速度。寄存器变量可以被认为是自动变量的一种,它的有效作用范围也与自动变量相同。由于单片机中的寄存器是有限的,不能所有变量都定义成寄存器变量。CX51编译器能够识别程序中使用频率最高的变量,在可能的情况下,即使程序中并未将该变量定义为寄存器变量,编译器也会自动将其作为寄存器变量处理。一般来说,全局变量为静态存储变量,局部变量为动态存储变量。一、硬件设计实现控制LED每秒闪烁一次的功能时,由于定时器在单片机内部,因此不需要外部的具体硬件电路,有驱动LED的电路即可,本任务选择的硬件与的任务一一致,即本任务采用的硬件电路如图所示。任务实施单一指示灯(发光二极管)控制电路图二、软件设计1.采用硬件定时+软件计数的示例程序在本示例程序中,采用硬件定时+软件计数的方式完成定时0.5s。2.采用硬件定时+硬件计数的示例程序本示例程序中,采用硬件定时+硬件计数的方式完成定时0.5s。三、Proteus仿真1.打开ProteusISIS软件,绘制Proteus仿真电路。仔细检查,保证电路连接无误。2.在Keil软件开发环境下,创建项目,编辑源程序,将编译生成的HEX文件装载到Proteus虚拟仿真硬件电路中的AT89C51芯片中。3.运行ProteusISIS软件,仔细观察运行结果,如果有不完全符合设计要求的情况,调整源程序并重复步骤1、2,直至完全符合本项目提出的各项设计要求。在对各种非电学物理量进行测量时,常通过传感器将其转换为电学量,为了便于信号的传输,往往将这些电学量调制为频率信号,通过测量这些频率可以间接测量相关的非电学物理量。本任务是利用MCS-51单片机的T0、T1定时/计数功能,完成对低于200kHz的脉冲信号的频率测量,测量的结果通过数码管显示出来。任务提出任务三
简易频率计频率计的功能,是测出1s内的输入信号的周期个数,再用数字的方式显示出来,也就是需要完成定时1s、对输入的脉冲计数和数字显示的硬件电路和相应程序的设计。任务分析MCS-51单片机有两个定时器,可分别用做定时和对单片机外部的脉冲计数,这两个定时器是单片机内部功能电路,不需要外部的硬件电路。需要说明的是,在实用的频率测量电路中,往往需要对输入的被测量信号进行放大、整形等各种处理,同时还有高阻输入等要求。本任务作为单片机功能演示,直接向单片机引脚输入被测量的信号。要显示高达200kHz的频率,即显示的数据达到6位数,选择数码管动态显示电路具有较好的性价比。一、定时器的计数方式当定时/计数器工作在计数状态下,是对来自P3.4或P3.5引脚的输入脉冲信号进行计数。单片机内工作在计数状态下的定时器,最大计数的频率值为fosc/24。例如,单片机的工作频率fosc=12MHz,则定时器对外部脉冲的最大计数频率为12MHz/24=500kHz。对于频率大于此值的脉冲,需要在计数前面加上分频器,分频后再进行计数。相关知识二、定时器T2简介8052是8051单片机的增强版本。在8052中,除了RAM扩展到256B、ROM扩展到8KB外,还增加了定时器T2。定时器T2由特殊功能寄存器T2CON设置其工作于定时、计数、波特率发生及可编程时钟等不同方式,由T2MOD设置其启动(停止)和向上/向下计数的工作模式。定时器T2工作于可编程时钟方式时,将从P1.0引脚输出占空比为50%方波,其工作框图如图所示。定时器T2设置为可编程时钟输出方式的电路框图一、硬件设计根据任务分析,频率计由单片机内部的两个定时器分别完成定时和对外部脉冲计数的工作,以及控制6位数码的显示电路。任务实施为了系统的功能测试,选择AT89S52单片机为系统控制芯片,使用其中的定时器T2(标准51芯片没有T2)输出脉冲作为系统的测试信号,由于T2可工作在硬件自动重装的可编程时钟输出方式,即设置好其工作方式后,只需要将重装的初始值加在RCAP2H和RCAP2L中并启动其工作就可完成脉冲输出的全部设置。T2工作所涉及的所有电路都在单片机AT89S52内部,不需要增加额外的硬件电路。因定时和计数都不需要外部的硬件电路,即整个频率计的硬件电路由单片机最小系统和6位数码的动态显示电路构成。其最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物质化工产品生产工操作竞赛考核试卷含答案
- 网络安全管理员岗前生产标准化考核试卷含答案
- 交通安全设施工岗前变革管理考核试卷含答案
- 网络安全管理员安全风险强化考核试卷含答案
- 化工单元操作工岗前决策力考核试卷含答案
- 工程造价的编制与确定
- 2026年山岳救援技术培训课件
- 轮轴装修工发展趋势知识考核试卷含答案
- 物流服务师岗前责任感考核试卷含答案
- 化工检修钳工安全实操知识考核试卷含答案
- 海南封关 课件-2026届高考地理一轮复习人教版
- 江苏省建设工程监理现场用表(第七版修订版)
- 印刷领域消防培训
- 元器件焊接技术
- 公路工程施工安全技术与管理课件 第07讲 临时用电
- 配速员培训课件
- 蓄滞洪区运用监管实施规范
- 2025年黎明职业大学辅导员考试笔试题库附答案
- 医疗康复科操作礼仪要点
- 照顾孩子委托协议书
- 2025-2026学年统编版语文二年级上册第一单元早读课件
评论
0/150
提交评论