51单片机系列二:中断与延时

2023-05-16

本篇通过闪烁led和数码管两个实验来分析延时与中断概念,以及实现软件仿真。

Chapter1.中断的概念

中断就是当CPU执行主程序时,突然被打断一下,去干别的事情,干完再回来执行主程序。这个过程类似于你在洗衣服时水开了,你停下洗衣服的动作去关掉火,再回来烧开水。

中断还可以进行嵌套,就是CPU在执行一个中断程序的时候又被打断,去执行另一个中断程序,执行完再回来执行第一个中断程序,执行完再回来执行主程序。类似于你在洗衣服的时候去关烧开水的火之后灌开水,正灌着呢发现电话响了去接电话,接完电话回来继续灌开水,灌完开水回来继续洗衣服。

“中断”这个概念来源于单片机本身是串行执行。也就是说,只有执行完一条语句才能执行下一条语句,在同一时间内只能干一件事情。FPGA等支持并行执行的硬件则可以同时干很多不同的事情。然而FPGA也有中断,这里不是特别了解不再阐述。

“中断”这一概念为实现某一信号的触发功能打下了基础。一般而言,52单片机有6个中断源,其中三个为信号中断源,分别是INT0,INT1(外部中断0/1号口)和TI/RI(串行口)中断,这里相当于执行主程序的时候等信号,等来了就执行相应的信号处理操作;三个为芯片内部定时器/计数器中断,分别为T0/T1/T2,它们记满回零后即可触发中断,这里也相当于在时钟电平变化时,就执行下一项操作。  

中断也不是随便进行的,状态比较多,设置很麻烦,每个程序执行中断前必须都不厌其烦地设定与检查中断状态。

1.中断的允许与使能

首先一个问题:到底要不要中断?

假如一个程序运行压根不需要用到中断,那么中断的存在可能会影响整个程序,因此默认状态下,中断一般是关着的。想要打开就必须对它进行操作。

允许中断了,但是有6个中断源,到底允许哪个中断呢?这就要再对分别控制6个中断源的寄存器口进行使能操作。

以上两个问题均由中断允许寄存器IE(interrupt enable)控制。它有八位,分别是:

位序号

D0

D1

D2

D3

D4

D5

D6

D7

说明

外部中断0

定时/计数0

外部中断1

定时/计数1

串行口中断

定时

2

溢出中断(

8052用)

无效位

全局中断位

位符号(写程序时直接引用)

EX0

ET0

EX1

ET1

ES

--

--

EA

以上所有位都是高电平有效。因此想要开中断,先让全局中断EA=1,再让中断源所对应的位等于1就可以了。

2.中断的优先级

假如洗衣服时水开了,同时电话铃声也响了,先干哪件呢?这就涉及到中断的优先级。

中断的优先级由寄存器IP(interrupt priority)控制。

以上的设定仅仅有0,1两个状态,只是“相对优先”,不能保证绝对状态。未设置时几个同级状态同时发生时,采用以下的默认优先级排序:注意:本条只针对同时到达的同级中断有效。

 假如外部中断1正在执行,然而外部中断0到了,在默认情况下并不会进行中断嵌套!要想实现中断嵌套,必须人为设置外部中断0的优先级高于外部中断1,也即前者优先级为1,后者优先级为0.假如同时设置两者优先级为1,则依然是按照中断到达的顺序执行。

3.定时器的设置

即便是设定好了中断的使能与优先级,定时器的四种工作方式和不同控制位的设定也需要操纵两个寄存器TMOD和TCON。

高四位控制寄存器T1,低四位控制寄存器T0。

  • GATE

0:仅由运行控制位TRx(x = 0,1)来控制定时器/计数器运行。
1:用外中断引脚( INT0或 INT1)上的电平与运行控制位TRx共同来控制定时器/计数器运行。

  • C/T’

0:为定时器工作模式,对单片机的晶体振荡器12分频后的脉冲进行计数。
1:为计数器工作模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。

M1/M2工作方式选择

M1M2工作方式
00方式0,是13位定时器/计数器
01方式1,是16位定时器/计数器
10方式2,8位常数自动装入定时器/计数器
11方式3,仅适用于T0,这时T0分为两个8位计数器,T1停止计数

 TCON:

TF为溢出标志,TR为相应的计数器使能控制位。

例如,计数器0在工作状态1(16位计数器) 下,先把低四位依次记满,然后向高四位进一位,这样往复直到所有16位都被记满,置TF0=1,此时向CPU请求中断。这样就实现了隔一定时间触发一次时钟沿。

Chapter2.延时的精确计算

在明白如何实现延时之前,应该先了解一些周期概念。

1.单片机的四种周期

<1>时钟周期

也叫振荡周期,就是单片机外接时钟晶振频率的倒数。这是CPU的最基本工作脉冲。

<2>状态周期

时钟周期的两倍。

<3>机器周期

在一个机器周期内,单片机完成一项基本操作(不一定是执行完一条指令)。机器周期相当于6个状态周期即12个时钟周期。

<4>指令周期

执行一条指令所需的时间,一般包含1~4个机器周期。

以下假设单片机采用的晶振为12Mhz(可以查阅单片机参数手册),即可算出几种延时分别需要的时间。

2.粗糙延时:不涉及芯片内部定时器

有一种方法是非常粗糙的延时:利用机器周期执行指令的时间实现延时。此种方法不能精确算出,只能用调试功能设断点测出,非常原始也非常不推荐。

void delayms(uint xms)//延时约xms毫秒

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--)

}

注意i不能超出255。调试前注意检查晶振频率是否正确,之后设断点计算sec的间隔即可得出函数执行一次延长的时间。与很多偶然因素有关,很不精确。

3.定时器延时

更精确的办法是使用中断和定时器。中断相关的设置开好之后,我们就面临一个给定时器寄存器赋初值的问题。

假设使用定时器0,将其作为16位定时器,其中TH0默认为高八位,TL0默认为低八位。先计算初值为0时装满一次要多长时间:

时钟周期=1/12M    机器周期=(1/12M)*12=1us

记满需要2^16-1个数,还要一条脉冲计数器溢出才能实现中断,也就是2^16=65536。按每个机器周期执行一条指令算,溢出一次一共需要65536us约等于65.5ms。假如需要延时为1s,可以让计数器记满50ms就溢出,之后重复20次中断再执行下一条指令。则可以每一轮都给定时器赋值,使其记到50ms就溢出,相当于每轮少记15536个数。使得T0总共的初值为15536就可以了。因为TL0有八位,则计算式为:

TH0=15536/256    TL0=15536%256  每轮溢出之后计数器会重置,因此要再给计数器赋一遍这样的初值。

完整的代码模板为:

主函数:设置定时器工作方式->装填初值->开总中断->开相应定时器中断->启动相应定时器->用while语句等待(很重要!必须有等待的环节)

中断函数:声明有特定格式,为void T0_time() interrupt 1//这里的1为序号,不能错

                 重装初值->溢出次数++->假如溢出次数到了xxx,溢出次数清零,执行到点后的操作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机系列二:中断与延时 的相关文章

  • C语言如何实现动态扩容的string?

    众所周知 xff0c C 43 43 中的string使用比较方便 关于C 43 43 中的string源码实现 xff0c 可以参考这篇文章 xff1a 源码分析C 43 43 的string的实现 最近工作中使用C语言 xff0c 但又
  • 一文搞懂交叉编译,Windows和Linux的交叉编译

    文章目录 什么是交叉编译为什么要交叉编译工具链的种类 我们应该怎样建立交叉编译环境在Windows下交叉编译和调试树莓派软件一 Windows下编译树莓派程序二 用WSL来编译树莓派程序三 通过gdbserver远程调试 基于 MinGW
  • 结构体对齐为什么那么重要?

    已剪辑自 https mp weixin qq com s jPTXM809vxzEBhsPT9NzwA C语言结构体对齐问题 xff0c 是面试必备问题 我参与招聘技术面试的时候 xff0c 也喜欢问这个技术点 这不是在面试时要装B xf
  • 商用飞机表明符合性的10种方法

    已剪辑自 https www cannews com cn 2022 0818 348969 shtml 每一款新型号飞机投入市场之前 xff0c 申请人通常需要采用不同的方法来获得所需的证据资料 xff0c 以表明型号设计对适航条款的符合
  • 什么是项目管理?一文了解项目管理的概念、历史、内容和方法

    已剪辑自 https www 36dianping com dianping 17 项目 是个眼下炙手可热的词 熟人见面问一句 最近忙什么项目 xff0c 已经成为职场打招呼的基本操作 项目起源很久 xff0c 可以说有人类活动时就已经存在
  • 项目管理是什么

    文章目录 一 什么是项目二 什么是项目管理三 项目管理起源四 项目管理的十大知识领域五 项目管理的五大过程和49个子过程1 启动过程2 规划 https worktile com kb tag 规划 过程3 执行过程4 监控过程5 收尾过程
  • 这10种项目管理方法,PMP项目经理备考收藏

    文章目录 1 敏捷开发 2 Scrum 3 Dev O ps 4 Scrumban 5 项目管理的知识体系 6 受控环境下的项目管理 7 六西格玛 8 瀑布开发 9 能力成熟度模型集成 10 关键链项目管理 已剪辑自 https board
  • 符合性矩阵

    已剪辑自 https mp weixin qq com s KKOgk8aJVdcKf5mFasYkhQ 编者注 xff1a 本文作者翱坤科技是一家航空工程综合服务机构 适航思维 在此衷心感谢其无私的知识和经验分享 符合性矩阵 Compli
  • 椭圆曲线密码学(ECC)原理

    1 椭圆曲线的定义 满足以下形式二元三次方程的点集 y 2 43 a x y
  • 可追踪性矩阵和需求追溯性矩阵

    文章目录 可追踪性矩阵的维基百科解释 不同类型的需求可追溯性矩阵 什么是需求可追溯性矩阵 xff08 RTM xff09 xff1f 示例模板什么是可追溯性矩阵 xff1f xff08 TM 值 xff09 什么是需求追踪矩阵 xff1f
  • 软件测试入门

    文章目录 软件测试入门系列之一 xff1a 软件测试基础 测试基础 什么是软件测试为什么软件测试很重要 xff1f 软件测试有什么好处 xff1f 软件工程测试软件测试类型软件工程中的测试策略程序测试软件测试概要 软件测试入门系列之二 xf
  • 一款专业且全面的嵌入式开发调试工具

    已剪辑自 https mp weixin qq com s UH h kxdvYz7A6eUMoYbew 不知道大家平时做嵌入式开发时用调试工具进行调试 xff0c 今天给大家分享一款专业且全面的嵌入式调试工具集 xff1a Micro L
  • 城市空中交通,万亿蛋糕?

    已剪辑自 https mp weixin qq com s biz 61 MzkzMDIxMjY3Mg 61 61 amp mid 61 2247484941 amp idx 61 1 amp sn 61 d27a1ac4054f91a2e
  • EVTOL适航

    已剪辑自 https mp weixin qq com s biz 61 MzkzMDIxMjY3Mg 61 61 amp mid 61 2247491691 amp idx 61 1 amp sn 61 c3dea36069299d2de
  • 无人机适航

    文章目录 无人机适航 xff0c 你起跑了吗 xff1f 调查谁当其冲怎么做 无人机 适航审定新政来了 xff01 01新政解读02管理分类03管理要求 无人机适航 xff0c 你起跑了吗 xff1f 无人驾驶航空器飞行管理暂行条例 xff
  • CAAC、FAA和ICAO的适航法规文件体系

    文章目录 CAAC的适航法规文件体系适航审定管理的行政体系和法规体系FAA的适航法规文件体系ICAO的适航法规文件体系 CAAC的适航法规文件体系 已剪辑自 https mp weixin qq com s KJu3 qBX5AIvRnNI
  • 适航批准形式汇总

    以下内容 xff0c 总结于公众号适航思维 文章目录 田莉蓉老师的机载电子产品设计保证实践中的说明在中国 xff0c 适航 到底有多少种证件 xff1f CTSOA取证入门来自一位适航监察员的 避坑指南 xff1a CTSOA篇PMA取证入
  • 适航工作清单

    已剪辑自 https mp weixin qq com s g2AZCqnVjuI2AUezswfr2w 编者注 xff1a 本文作者翱坤科技是一家航空工程综合服务机构 适航思维 在此衷心感谢其无私的知识和经验分享 在民用航空制造单位 xf
  • 一个应用于嵌入式的通用工具包!

    已剪辑自 https mp weixin qq com s fsVpIRmPOIkIT5lVOqt5xw 来源 xff1a https github com cproape toolkit 1 介绍 ToolKit是一套应用于嵌入式系统的通
  • 可靠性设计基础知识大全,一起来学

    xff08 一 xff09 xff1a 理解可靠性 01 理解与可靠性定义 我们总是会说 xff1a 某某公司的东西 好用 xff1b 某某公司的产品 质量好 xff1b 我也会经常抱怨某某系统 不稳定 xff1b 某某公司的产品 不可靠

随机推荐

  • 嵌入式中程序错误如何处理?

    文章目录 一 错误概念1 1 错误分类1 2 处理步骤 二 错误传递2 1 返回值和回传参数2 2 全局状态标志 errno 2 3 局部跳转 goto 2 4 非局部跳转 setjmp longjmp 2 5 信号 signal rais
  • CLion添加第三方库

    cmake minimum required VERSION 3 23 project test set CMAKE CXX STANDARD 14 set INC DIR Include OpenSSL Include set LINK
  • Clion的下载安装配置使用总结

    已剪辑自 https codeantenna com a s1M0flG7NJ 相必经常学C或者C 43 43 的同学们一定用过dev c 43 43 vc 43 43 VS等等各种编译器 xff0c 相比他们来说 xff0c clion还
  • 下载和安装配置 MinGW-w64(免安装版)

    文章目录 1 找到downloads2 找到SourceForge3 找到一个合适的版本 xff08 我这里是下拉找到免安装版 xff09 下载 xff0c 其他的都试过了 xff0c 都不行 xff08 可能是因为外网的关系连接不稳定 x
  • Clion Debug模式使用实践

    文章目录 一 背景二 开启调试三 编译代码四 调试代码 已剪辑自 https segmentfault com a 1190000040698380 一 背景 最近为了考研 xff0c 在学习C语言与数据结构 xff0c 最开始使用Visu
  • 技术交底书怎么撰写?看这一篇就够了

    文章目录 技术交底书怎么撰写 xff1f 看这一篇就够了专利技术交底书格式1 发明 xff08 或实用新型 以下同 xff09 的名称2 技术领域3 背景技术4 发明内容5 附图说明6 具体实施方式 技术交底书各部分应该怎么写技术交底书的典
  • 计算机软件著作权材料模板

    https github com AlexanderZhou01 China software copyright 自己申请软件著作权流程 超详细 xff0c 内含材料模板等 计算机软件著作权模板及个人申请全套攻略 软著
  • ACP敏捷项目管理认证考试科普

    文章目录 说在最前面 xff1a 1 PMI ACP考试介绍 xff1a 2 PMI ACP考试报名流程如下 xff1a 3 PMI ACP报名条件 xff1a 4 资格审查的目的 xff1a 5 ACP与PMP难度对比 6 考试费用 7
  • 你如何理解敏捷开发?

    文章目录 一 对敏捷开发的理解 什么是敏捷 xff08 Agile xff09 xff1f 1 什么是敏捷软件开发 xff1f 2 敏捷的起源3 敏捷有哪些优点 xff1a 4 敏捷的缺点和不足 xff1a 5 为什么敏捷在企业中越来越流行
  • 民机适航取证过程

    转自田莉蓉老师的书籍 机载电子产品设计保证实践
  • 机载产品类别、层级及各自需要满足的适航要求

    转自田莉蓉老师的书籍 机载电子产品设计保证实践
  • 机载产品符合性方法

    田莉蓉老师的机载电子产品设计保证实践中的说明
  • 系统设计保证指南(ARP 4754)

    田莉蓉老师的机载电子产品设计保证实践中的说明
  • 设计保证指南应用实践

    田莉蓉老师的机载电子产品设计保证实践中的说明
  • 结构化开发方法

    文章目录 6 1 系统分析与设计概述6 1 1 系统分析概述6 1 2 系统设计的基本原理6 1 3 系统总体结构设计6 1 4 系统文档 6 2 结构化分析方法6 2 1结构化分析方法概述6 2 2 数据流图6 2 3 数据字典 6 3
  • 需求工程简析

    已剪辑自 https zhuanlan zhihu com p 36145396 什么是需求工程 需求工程是指应用已证实有效的技术 方法进行需求分析 xff0c 确定客户需求 xff0c 帮助分析人员理解问题并定义目标系统的所有外部特征的一
  • 如何做好软件需求分析?

    文章目录 一 需求分析定义二 软件需求分析目标三 软件需求分析原则1 能够表达和理解问题的信息域2 建立描述系统信息 功能和行为的模型3 能够对所建模型按一定形式进行分解4 分清系统的逻辑视图和物理视图 四 软件需求分析内容1 功能性需求2
  • 需求分类维度

    已剪辑自 https mp weixin qq com s biz 61 MzI5Njg3NTU3MQ 61 61 amp mid 61 2247483758 amp idx 61 1 amp sn 61 fb4057d595db4f4d3
  • 什么是理想的需求分类方法

    已剪辑自 https mp weixin qq com s biz 61 MzI5Njg3NTU3MQ 61 61 amp mid 61 2247483740 amp idx 61 1 amp sn 61 d8101a0f16f5a41f1
  • 51单片机系列二:中断与延时

    本篇通过闪烁led和数码管两个实验来分析延时与中断概念 xff0c 以及实现软件仿真 Chapter1 中断的概念 中断就是当CPU执行主程序时 xff0c 突然被打断一下 xff0c 去干别的事情 xff0c 干完再回来执行主程序 这个过