首页 > 技术文章 > 定时中断

dadidelearning 2018-11-13 14:24 原文

呜呜呜,又听得稀里糊涂的,只能狠下功夫来复习啦。

首先自己想一下,今天学了个啥吧!

首先,老师想给演示一个根据定时器的计数在数码管上实时显示时间的程序,里面有很多编程的小技巧,很是值得学习!后来,通过这个程序中出现的一个小问题:最后一个数码管的显示总是比前面的亮一些,引出了我们今天要学习的技术——定时中断,用这个定时中断可以控制代码执行的时间间隔{这是如何实现的} 。对原代码进行改进后,将外部中断和定时中断进行了计较,并引入了中断优先级的概念。最后,也就讲了如何设置中断和中断优先级。

选学的内容是特权级和普通级的关系。

 

难点的话,也就是对代码还是理解地不够透彻,很多不能结合理论知识来解释地通。同时,对寄存器操作的具体过程,缺乏明确的理解。希望看完PPT之后能够理解吧!


 

一、大概看完代码,依据自己的理解整理一下思路:

  • 首先,这里是用了分时复用的方法,并没有32根线控制4个数码管,而是只用了8根线分别控制4个数码管,另外用4根线分别控制4个数码管的阴极。

6个数码管都是靠PE口的0-7位控制的,所以显示的内容肯定是一样的。这是,要想每个数目管上显示不一样的数字,就只能分时复用,逐个点亮,利用视觉暂留来实现同时显示4个不同的数码管。

二、关于定时中断的设置

1、中断执行的函数的名称应该是固定的,但具体执行什么操作要自己设定:

2、这个定时中断何时触发?触发的条件是什么?这些都需要在初始化的时候进行设置:

这里使用的是系统时钟定时器,24位的倒计数器。因为时钟周期是72MHz,所以LOAD进去72000-1,每次由0跳72000-1,都会触发中断,也就是设定了每1ms就触发一次定时中断。

      

最后要中断响应之后要立即清除。

注:当使用的不是系统时钟定时器,而是TIM时,由于只有16位,能表示的最大范围是65535,不能到72000-1,所以要对72MHz的时钟进行预分频,二分频则为36MHz,这样LOAD一个36000-1,每次有0跳36000-1时,都触发一次中断,时间间隔同样为1ms。

 

三、NVIC嵌套向量中断控制器NVIC    

 

 

推荐阅读