中断系统

本节内容与上一节定时器紧密相关,所以不了解定时器的同学可以看一下上一节。我们日常写程序时一定见过interrupt 1,interrupt 2,interrupt 3这样的代码,但又不知道是什么意思。那么本节的内容便是围绕这个展开的。

一、工作原理

上图就是中断的工作原理的概括。非常简单,就不过多解释了。下面我会介绍一下其中的细节,以及如何操作。

这里是有5个中断源的。对应着5个中断号(这也就对应了开头的interrupt 1,2,3)本节我们主要介绍定时器T0这个中断源,也就是interrupt 1。

ET0:定时器,计数器的中断允许,ET0=1 可以理解为打开了我们定时器的中断。

TF0:结合定时器中断请求的形式可知,我们的定时器如果溢出(65535变成了65536),那么TF0便会自动置1。

二、代码设计

接下来我们用定时器中断法来实现一个简单的流水灯。

先来看主程序。前半部分依然是我们的定时器的报备(只要使用定时器,就一定需要报备),下面的EA=1是中断的总开关(这个下一节会提到,不知道的本节影响也不大)。ET0=1之前说过是中断允许。意味着我马上要使用中断了。TR0=1表示启动定时器。

接下来进入循环。注意while(k<2)是我们本节的重点。在程序执行到while(k<2)时我们的定时器已经启动。再结合T0的中断服务程序可知每过50ms,k会加一。而k的初值是0,也就意味着要经过1s才能跳出循环。结合所学知识,其实不难猜出这个while(k<2)便是一个断点

结合上述的代码,以及与传统的定时器进行对比。传统定时器需要我们自己手动去查询TF0是否置1了(TF0==0),而中断法便可以不用我们去判断了。

最后是中断服务程序。需要先清溢出,等待下一个50ms到来。

三、总结

本节内容结合了上一节的定时器,由定时器来引出我们的中断服务程序。

本结重点:理解中断的执行程序。

本节难点:寻找断点,并理解其原理。

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值