前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C51 单片机开发说说中断是什么

C51 单片机开发说说中断是什么

作者头像
码农UP2U
发布2024-06-07 15:47:35
750
发布2024-06-07 15:47:35
举报
文章被收录于专栏:码农UP2U码农UP2U

公众号文章同步阅读网址:www.netor0x86.com

闲话:用一样东西,却不明白它的道理,林语堂如是说:『不高明』。只知道 how,不知道 why,侯捷如是说:『不高明』。

本篇开始介绍中断,对于接触过汇编语言 和 驱动开发的,对于中断的概念应该是不陌生的。本篇又是啰里吧嗦的文字描述,又臭又长,不喜欢就关掉吧。因为太无聊了!

0x01:软件延时的问题

在前面的代码中,我们大量的使用了软件延时(前面用的是 STC-ISP 生成的延时函数)。软件延时相当于 CPU 在空转,虽然 CPU 在空转时可以达到延时的效果,但是它存在一个问题。因为 CPU 空转也属于是在工作,所以它是无法感知到外部的信号的。比如:它在空转时,传感器送来信号了,由于它的空转,而无法马上去查询传感器的信号,那么相当于这个传感器送来的信号就“丢”了。因为空转而导致查询法无法立刻查询到传感器的信号!

0x02:什么是中断

先来说说什么是中断。中断就是打断处理起当前正在执行的流程,转而去执行另外的一些和当前工作不相干的指令,执行完之后,再返回到原来执行的程序去接着执行被打断的指令。举个例子,比如你在家正在吃饭,突然有人敲门,一般情况下我们会放下碗筷去开门,开完门再继续吃饭!这就类似是中断了,自己当前的吃饭动作被打断了,转而去执行了与当前吃饭不相干的事情(开门),开门后接着吃饭。

0x03:中断和定时器

在前面梳理的文章中,提到了 TCON 寄存器,该寄存器有一个 TF0 标志位,这个标志位在 定时器/计数器 0 溢出时置位。回顾一下,如下图。

在上图中可以看到 TF0 是定时器/计数器 T0 的溢出中断标志。T0 被允许计数以后,从初值开始加 1 计数,当最高为产生溢出时,由硬件置 1 TF0,向 CPU 请求中断,一直保持 CPU 响应中断时,才由硬件清 0 TF0。

0x04:单片机的中断

来看一下手册中关于中断的介绍,如下图,P154:

简单概括一下上图的内容,C51 单片机的中断有多个中断源,多个中断同时向 CPU 请求中断时,要求它服务的时候,CPU 可以优先响应其中的某个中断,也就是中断具有优先级。当 CPU 处理一个中断时也可能会被打断,从而处理另外一个中断,然后再回来处理被打断的中断,这被称之为中断嵌套。

89C52 单片机提供了 8 个中断请求源,如下图,手册 P154:

手册中说明了 8 个中断请求源,分别是 外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断、定时器2中断、外部中断2、外部中断3;相应的它们有默认的查询次序,如下图,手册 P155:

我们在编程时,会提供相应的处理函数,处理函数需要被声明,如下所示,手册 P155:

关于中断就先整理这么多,后面会继续整理定时器中断相关的寄存器以及配置。有些知识点想梳理清楚,但是感觉又很难说清楚,归根到底,是我自己也无法深刻的理解其中的内涵。

对于做偏上层应用的系统来说,尤其是面向对象的思想,要求尽可能的封装,留好接口对外提供使用即可,尽可能的对外是一个黑盒子,是透明的。但是对于偏硬件、偏底层的开发貌似刚好相反。当然了,其实对于上层应用的开发,只知其表,也并非是好事

我是一个程序员,了解 C、PHP、Java、ASM、Python,有 信安、CISP 证书,写小白也能看得懂的文章,感谢关注!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农UP2U 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01:软件延时的问题
  • 0x02:什么是中断
  • 0x03:中断和定时器
  • 0x04:单片机的中断
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档