【单片机基础】单片机中断和定时

news2025/7/18 8:17:50

  • 中断
    • 什么是中断?
    • 中断IE寄存器
    • 中断查询次序
    • 例程
  • 定时器/计数器
    • 实现定时的方法?
    • 定时计数的概念
    • 什么是单片机定时器/计数器?
    • 定时器/计数器内部结构
    • 定时器的相关寄存器
    • 51单片机定时器初值计算方法详解
    • 例程

中断

什么是中断?

中断是为使单片机具有对外部或者内部随机发生的事件处理而设置的,中断的存在,很大程度提高了单片机处理外部或内部事件的能力。

举个例子:当你在烧一壶水,然后去吃饭。当突然听到水壶发出水烧开的报警声,这是你会放下碗筷,立即去关掉火,然后将开水灌入暖水壶,灌完开水后,再继续吃饭。

标准的51单片机有5个中断源,分别为2个外部中断,两个定时中断和1个串口中断。
在这里插入图片描述

中断IE寄存器

中断IE寄存器在特殊功能寄存器(SFRs)地址、复位值等信息
——STC89C52参考芯片手册
在这里插入图片描述
在这里插入图片描述

中断查询次序

在这里插入图片描述

例程

示范程序,外部中断1

//外部中断1初始化
void int1Init()
{
	EA = 1;	//开总中断
	EX1 = 1;//开外部中断1
	IT1 = 1;//外部中断1下降沿触发	
}

//外部中断1处理函数
void Int1_Routine() interrupt 2
{
  //以下用户处理程序
}

定时器/计数器

实现定时的方法?

  1. 软件定时:软件定时不占用硬件资源,但占用CPU时间,降低了CPU的利用率。例如:延时程序
  2. 采用时基电路电时:例如采用555电路,外接必要的元器件(电阻电容),可构成硬件定时电路。但是硬件连接好以后,定时器与定时范围不能用软件进行控制和修改,及不可编程,且定时时间容易漂移。
  3. 可编程定时器定时:最方便的办法是利用单片机内部的定时器/计数器。结合了软件定时精准和硬件定时器电路独立的特点。

定时计数的概念

大个比方,一杯水1000滴刚好装满,这时这杯水初始化已经装入500滴水了,那么问题来了:
1、还需要滴入多少滴水才能将其装满?
答:还需要滴入500滴水才能滴满,501滴水时溢出。
滴入水比喻为计数

2、如果每秒滴入1滴水,还需多长时间才能将其滴满?
答:还需要500秒时间才能将其装满,501秒溢出。
这时滴入水的时间就比喻为“定时”

什么是单片机定时器/计数器?

定时器,准确来说是“定时/计数器”
通俗的说:定时器的本质就是计数器,CPU一旦开启定时功能后,定时器便在晶振的作用下自动开始计时。当定时器计数器满后,会产生中断,即通知CPU该如何处理。

举个例子:CPU很忙,不停干活不能分心去看时间,这时可以设置一个闹钟每分钟提醒一下,这个闹钟就是定时器。要是开了中断,就是每分钟可以停下去中断里面干点其他事情。这样CPU工作效率就会提高。

定时器/计数器内部结构

定时器/计数器实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
在这里插入图片描述

定时器的相关寄存器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

51单片机定时器初值计算方法详解

定时:
2 n = T / T c y + X 2^{n}= T/Tcy+X 2n=T/Tcy+X
X = 2 n − T / T c y X=2^{n}-T/Tcy X=2nT/Tcy

n计数器工作方式 :(方式0时,N=13;方式1时,N=16;方式2时,N=8)

T定时器时长

T c y Tcy Tcy机器周期

X计数初值

根据定时时间和工作方式,计算出时间常数X,把X转换成二进制,高8位给TH1,低八位给TH1

这是举个例子:STC89C52单片机,设置晶振为12M,使用16位的定时器,那单片机定时器0的最大计数就是65536,那单片机的一个机器周期就是1us,定时器 0工作在方式1时最大定时65.536ms。
定时器的定时时间T = (65536-X),单位是us;
定时器初值X = 65536-T,
假设定时时间T=10ms=10000us,
那定时器初值X=65536-10000=55536us,也就是定时器0从55536开始递加到65536就是10ms,所以55536就是定时器的初值,55536转化为十六进制为0Xd8f0,所以定时器的初值为:
TH0 = 0XD8;
THL = 0XF0;

例程

示范例程,定时器0(第一种编程方式)

//定时器0初始化
void timer0Init()
{
	EA = 1;	//打开总中断
	ET0 = 1;//打开定时器0中断
	TR0 = 1;	 //启动定时器0
	TMOD = 0X01; //定时器工作模式1,16位定时模式
	TH0 = 0xD8;
	TL0 = 0xF0; //定时10ms
}

//定时器0中断函数
void timer0() interrupt 1
{
	TH0 = 0xD8;
	TL0 = 0xF0; //定时5ms
	//以下为用户处理程序	
} 

示范例程,定时器0(第二种编程方式)

//#define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
#define FOSC 12000000L //晶振设置,使用12M Hz
//#define FOSC 24000000L //晶振设置,使用24M Hz

#define TIME_MS 10 //设定定时时间 ms ,在11.0592M晶振下,不易超过60ms

/*******************************************************************************
* 函 数 名 :Timer0Init
* 函数功能 :定时器0初始化
* 输    入 :无
* 输    出 :无
*******************************************************************************/
void Timer0Init()
{
	TMOD=0x01; //设置定时器0工作方式为1
	TH0=(65536-FOSC/12/1000*TIME_MS)/256;
	TL0=(65536-FOSC/12/1000*TIME_MS)%256;
	ET0=1; //开启定时器0中断
	TR0=1;	//开启定时器	
	EA=1;  //打开总中断
}

/*******************************************************************************
* 函 数 名 :Timer0Int
* 函数功能 :定时器0中断函数 , 每隔TIME_MS ms进入
* 输    入 :无
* 输    出 :无
*******************************************************************************/
void Timer0Int() interrupt 1
{
	TH0=(65536-FOSC/12/1000*TIME_MS)/256;
	TL0=(65536-FOSC/12/1000*TIME_MS)%256;
	//以下为用户处理程序
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VINS学习(二)IMU预积分原理与实现

VINS学习(二)IMU预积分原理与实现一、连续时间下的IMU积分二、连续时间下的IMU预积分三、离散时间下的IMU预积分1. 欧拉法2. 中值法四、连续时间下的IMU状态误差传递五、离散时间下的IMU状态误差传递六、预积分量关于零偏的雅克比七、VINS代码实践1.预积…

【文末福利】半导体封装率先国产化,400+封装厂商最新名单汇总

根据我国国民经济“九五”计划至“十四五”规划,可窥见多方政策都在积极支持我国集成电路的发展,近几年更是强调突破集成电路关键技术,集中力量发展集成电路。其中封测技术作为集成电路制造的后道工艺,在整个集成电路产业链中扮演…

熬夜整理的vue面试题

Vue-router 路由模式有几种 vue-router 有 3 种路由模式:hash、history、abstract,对应的源码如下所示 switch (mode) {case history:this.history new HTML5History(this, options.base)breakcase hash:this.history new HashHistory(this, options…

网络安全设备之防火墙技术详解

一、防火墙概述 1、网络防火墙简介 无论是大中型企业网络,还是小型家庭办公网络,对网络安全方面的要求一直保持上升趋势。微软公司的官方网站尚且难逃黑客的魔爪,普通的中小网络更是难以抵抗了。解决网络安全问题最常用的防护手段就是安装网络防火墙,对于大中型规模的企业…

css实现流星划过动画

背景 👏渐变伪元素实现流星,translateY实现划过动画,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现原理 translateY(): translateY() 在页面垂直移动元素。 translateY(ty) 对应 …

上海亚商投顾:沪指重返3100点

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪三大指数今日低开高走,沪指重返3100点上方,深成指、创业板指午后均涨超2%。半导体板块掀涨停…

Java并发编程学习13-任务取消(下)

任务取消(下) 《任务取消》由于篇幅较多,拆分了两篇来介绍各种实现取消和中断的机制,以及如何编写任务和服务,使它们能对取消请求做出响应。 1. 任务限时运行 我们知道许多任务可能永远也无法处理完成(…

[go学习笔记.第十四章.协程和管道] 3.协程配合管道案例以及管道的注意事项和使用细节

案例一 请完成goroutine和channel协同工作的案例,具体要求: (1).开启一个writeData协程,向管道intChan中写入50个整数. (2).开启一个readData协程,从管道intChan中读取writeData写入的数据 (3).注意: writeData和readD…

阿里内部目前最完整“Spring全线笔记”,不止是全家桶,太完整了

前言 对于每一位Java开发人员来说,提起Spring定是不陌生的,实际上自Spring框架诞生以来,就备受开发者的青睐,基本上现在的互联网公司都要使用到Spring框架。Spring框架中又包含了SpringMVC、SpringBoot、SpringCloud等&#xff0…

【前端】Vue+Element UI案例:通用后台管理系统-项目总结

文章目录相关链接前言效果登录页首页管理员的首页xiaoxiao的首页用户管理总结项目搭建左侧:CommonAside上侧:CommonHeader和CommonTag首页:Home.vue用户管理:User.vue登录页:Login.vue总代码相关链接 参考视频&#x…

Spark 3.0 - 1.Spark 新特性简介与 WordCount Demo 实践

目录 一.引言 二.Spark 3.0 特性 1.Improving the Spark SQL engine [改进的SQL引擎] 1.1 Dynamic Partition Pruning [动态分区修剪] 1.2 ANSI SQL compliant [兼容 ANSI SQL] 1.3 Join hints [连接提示] 2.Enhancing the Python APIs: PySpark and Koalas [增强Python…

推荐国产神器Eolink!API优先,Eolink领先!

前言: 在我们后端开发者做项目的时候,避免不了与前端界面的交互,对于我来讲,在做项目的时候用到过postman,swagger做接口测试工作,在公司的时候公司主要用YApi可视化接口平台,最近使用了一个爆款…

Express

目录 Express介绍 测试最基本的服务器 Express基本使用 托管静态资源 2. 挂载路径前缀 nodemon 路由 模块化路由 2.注册使用路由模块 中间件的概念 ​编辑1.next函数的作用 2.app.use(全局中间件) 4.连续多个中间件 5.局部生效中间件 中间件的分类 1.应用级别…

自动驾驶入门:感知

目录 概念 感知方法 CNN 检测与分类 跟踪 分割 Apollo感知 感知设备分类 概念 我们人类天生就配备多种传感器,眼睛可以看到周围的环境,耳朵可以用来听,鼻子可以用来嗅,也有触觉传感器,甚至还有内部传感器&…

Android 性能优化

你会学到什么? 深入底层,全面建立性能优化知识体系; 高手思路,掌握大厂性能调优方法论; 三大模块,实战内存速度包体积优化; 玩转“黑科技”,轻松实现性能优化进阶。 作者介绍 赵…

现货黄金基本知识:黄金策略五大心法

我们经常看电视剧或小说,都会看到一些老套的情景,例如当某个人物死的时候,会讲毕生所学,或者是功夫、或者是知识,传到某一个人的手中。在现货黄金市场,也有累积了历代交易高手的“武功心法”,虽…

Bergsoft NextSuite (VCL) 不同的方式提供数据

Bergsoft NextSuite (VCL) 不同的方式提供数据 BergSoft NextSuite是一家强大的Delphi和CBuilder。NextGrid是一台易于使用的计算机,可以在设计时和设计时理解方法和技能。NextGrid有不止一个StringGrid和ListView美味的标准。NextDBGrid是基于著名NextGrid计算机的…

深入浅出PyTorch——基础知识

一、PyTorch的简介和安装 因为在学习pytorch之前就已经配置和安装好了相关的环境和软件,所以这里就不对第一章进行详细的总结,就简要总结一下: 1.1 pytorch的发展 去了Paper with code网站查看了现在pytorch的使用,远超tensor…

【机器学习】线性分类【下】经典线性分类算法

主要参考了B站UP主“shuhuai008”,包含自己的理解。 有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 由于字数限制,分成两篇博客。 【机器学习】线性分类【上】广义线性模型 【机器学习】线性分类【下】经典线性分类算法 3. 线…

Spring知识点补充

1.常见的ORM框架都有哪些呢? 什么是ORM框架? 所谓的ORM框架,就是对象关系映射框架,就是让我们程序中的类里面的属性直接映射到我的数据库中的表里面的列,我们在Java中操作这个类的时候,就相当于直接操作数据…