6.2每秒闪烁一次的LED 课件(共17张PPT)- 中职《单片机应用技术(C语言 第二版)》同步教学(劳动版)

资源下载
  1. 二一教育资源

6.2每秒闪烁一次的LED 课件(共17张PPT)- 中职《单片机应用技术(C语言 第二版)》同步教学(劳动版)

资源简介

(共17张PPT)
MCS-51单片机的定时器最长能够计数65 536个脉冲,在12 MHz的工作频率下,定时方式最长的定时时间约为65 ms。在实际应用中,常需要长时间较精确的定时,可以利用定时中断实现。
本任务的内容是用定时方式使LED每秒闪烁一次。
任务提出
任务二 每秒闪烁一次的LED
与课题二相似,要使LED每秒闪烁一次,按LED的点亮时间和熄灭时间相同进行处理,则只需要进行0.5 s的定时,即每过0.5 s,将LED的状态取反就可以实现目标了。与本课题中的任务一相比较,本任务只不过是频率变得更低了,需要实现定时的周期更长了。
任务分析
在单片机中,由于定时/计数器最多只能计数65 536次,所以在晶振频率较高时,不能够一次产生较长的定时时间。如晶振为12 MHz时,机器周期为1 μs,最大定时时间为65 536 μs。本例中所采用的晶振为11.059 2 MHz,当然也不够定时0.5 s。
为了完成0.5 s的定时,一般来说,有两种方案可以实现。第一种方案是在硬件定时的基础上,增加一个存储单元,每次中断时使用该存储单元进行计数,当达到某个计数值时再执行对应的程序,这样就延长了定时的时间长度。第二种方案也是采用一个定时器进行硬件定时,在每次中断时输出一个脉冲,然后采用硬件计数的方式延长定时时间。
在本任务中,仅仅实现了0.5 s的定时,如果要改为其他时间的定时,则需要修改其中的定时器初始值和软件计数单元的计数值。这里介绍的定时和计数方法,也完全可以应用到前面的几个课题中,实现对应的课题任务。
在C51中,变量在定义之后,其存在时间及其作用范围与该变量的定义语句所在的位置和定义变量语句中的存储种类有关。
相关知识
一、变量的作用范围
从作用范围来看,变量有全局变量和局部变量之分。
全局变量是指在程序开始处或各个功能函数的外面定义的变量,在程序开始处定义的全局变量对于整个程序都有效,可供程序中所有函数共同使用;而在各功能函数外面定义的全局变量只对从定义处开始往后的各个函数有效,只有从定义处往后的那些功能函数才可以使用该变量,定义处之前的函数则不能使用它。
局部变量是指在函数内部或以花括号{ }围起来的功能块内部所定义的变量,局部变量只在定义它的函数或功能块以内有效,在该函数或功能块以外则不能使用它。局部变量可以与全局变量同名,但在这种情况下局部变量的优先级较高,而同名的全局变量在该功能块内被暂时屏蔽。
二、变量的生存期
变量的生存期即该变量存在的时间。从变量的存在时间来看又可分为静态存储变量和动态存储变量。静态存储变量是指该变量在程序运行期间其存储空间固定不变;动态存储变量是指该变量的存储空间不确定,在程序运行期间根据需要动态地为该变量分配存储空间。
在定义变量时,可以指定变量的存储种类。在C51中,变量的存储种类有4种:自动(auto)、外部(extern)、静态(static)和寄存器(register)。
1.自动变量
用关键字auto作存储类型说明的局部变量(包括形参)称为自动变量。
自动变量的默认范围在定义它的函数体或复合语句内部,只有在定义它的函数被调用,或是定义它的复合语句被执行时,编译器才为其分配内存空间,开始其生存期。
当函数被再次调用或符合语句被再次执行时,自动变量所对应的内存空间的值将不确定,有可能不是上次运行时的值,因而必须被重新赋值。
2.外部变量
按照默认规则,凡是在所有函数之前,在函数外部定义的变量都是外部变量,定义时可以不写extern说明符。但是,在一个函数体内说明一个已在该函数体外或其他程序模块文件中定义过的外部变量时,则必须使用extern说明符。一个外部变量被定义后,它就被分配了固定的内存空间。
外部变量的生存期为程序的整个执行时间,即在程序执行期间外部变量可以被随意使用,当一条复合语句执行完毕或是某一函数返回时,外部变量的存储空间并不被释放,其值也仍然保留。外部变量属于全局变量。
C51允许将大型程序分解为若干个独立的程序模块文件,各个模块可分别进行编译,然后再将它们链接在一起。在这种情况下,如果某个变量需要在所有程序模块文件中使用,只要在一个程序模块文件中将该变量定义成全局变量,而在其他程序模块文件中用extern说明该变量是已经被定义过的外部变量就可以了。
3.静态变量
静态变量不像自动变量那样只有当函数调用它时才存在,退出函数时它就消失。静态变量所分配的内存空间是独占的,始终都是存在的。静态变量只能在定义它的函数内部进行访问,退出函数时,变量的值仍然保持但是不能进行访问。使用静态变量需要占用较多的内存空间,而且降低了程序的可读性。
4.寄存器变量
编译器给使用register定义的变量分配单片机的通用寄存器空间,有较快的运行速度。寄存器变量可以被认为是自动变量的一种,它的有效作用范围也与自动变量相同。
由于单片机中的寄存器是有限的,不能所有变量都定义成寄存器变量。CX51编译器能够识别程序中使用频率最高的变量,在可能的情况下,即使程序中并未将该变量定义为寄存器变量,编译器也会自动将其作为寄存器变量处理。
一般来说,全局变量为静态存储变量,局部变量为动态存储变量。
一、硬件设计
实现控制LED每秒闪烁一次的功能时,由于定时器在单片机内部,因此不需要外部的具体硬件电路,有驱动LED的电路即可,本任务选择的硬件与课题二的任务一一致,即本任务采用的硬件电路如图所示。
任务实施
单一指示灯 ( 发光二极管) 控制电路图
二、软件设计
1.采用硬件定时+软件计数的示例程序
在本示例程序中,采用硬件定时+软件计数的方式完成定时0.5 s。
2.采用硬件定时+硬件计数的示例程序
本示例程序中,采用硬件定时+硬件计数的方式完成定时0.5 s。
三、Proteus仿真
1.打开Proteus ISIS软件,绘制Proteus仿真电路。仔细检查,保证电路连接无误。
2.在Keil软件开发环境下,创建项目,编辑源程序,将编译生成的HEX文件装载到Proteus虚拟仿真硬件电路中的AT89C51芯片中。
3.运行Proteus ISIS软件,仔细观察运行结果,如果有不完全符合设计要求的情况,调整源程序并重复步骤1、2,直至完全符合本项目提出的各项设计要求。

展开更多......

收起↑

资源预览