#申请原创#
利用Delay延时函数来控制LED灯的闪烁非常耗费MCU的运行,在延时中单片机无法处理其他事情,因此除了测试外,通常很少用单纯的延时函数来控制LED,而是将这项任务交给定时器来完成。
本次实验启用的是单片机中的Tim2,这是8位的定时器,经过分频处理后最大的定时时间约为0.04秒,本次设置其定时0.01秒。实验的方法是先设置一个全局变量Space,这个变量可以通过按键按照每次增加一倍的方式改变值,然后在定时器中对另一个变量进行计数并与全局变量Space比较,当其大于Space时,翻转LED引脚的电平并从0开始计数。下面是实验的过程:
首先进行MCC,选定Tim2并进行设置:
不得不说MCC中配置定时器的界面非常人性化,选择好预分频和后分频,得到需要的定时范围后,只要将需要定时的时间输入到里面就行,不用另外计算(见下图):
定时时间设置好之后,不要忘记开启中断。可界面上的开关是灰色的,点击无效。原来中断的设置统一归属到中断管理界面(见下图),开启定时器中断后,通过点击窗口首列的箭头,将定时器中断级别设置好:
此时再返回到定时器设置界面,定时器中断显示开启(如下图):
退出MCC,在定时器中断处理函数中添加相应的代码,尝试编译时报错:
看来需要添加对应的头文件,将main.c文件中包含的头文件复制过来,编译时报错找不到头文件,应该是路径不一致。
好在包含文件设置时会跳出一个选择窗口,可以直接通过这个窗口逐级目录去查找头文件:
查找到了所需的头文件:
再次编译,正常完成:
这是定时器中断处理代码(图中蓝色选定部分为添加的代码):
这是主循环中的按键处理代码:
下面是实验过程中串口助手接收到的信息:
定时器的实验过程告一段落。
|