首页 > 其他分享 >蓝桥杯单片机基础部分——2、定时器中断

蓝桥杯单片机基础部分——2、定时器中断

时间:2025-01-11 12:59:46浏览次数:3  
标签:定时器 计数 中断 代码 模式 蓝桥 单片机 计数器

一、介绍

关于蓝桥杯单片机定时器中断部分的一些代码,本期主要讲应用,就是看着题目可以写出相对应的代码,至于原理后面会详细讲,在这了解一下

二、中断

首先我们先来了解什么是中断,官方给出的是“中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的”,这里相对好理解,就比如说A在上课,这是他现在在处理进行的事件,这个时候A的班主任让A去走廊谈话,去走廊谈话这个事件就是中断事件,当A谈话结束之后,他会继续进行上课的事件对吧。上面说的就是一个中断事件。
说了这么多,中断这个东西我们搞清楚是什么后,我们就要根据手册写代码了,这里先不细讲原理
中断结构示意图
中断号
上图分别是我们在写中断部分所需要的东西,每一行中断为一个中断模式,有四个外部中断,三个定时器中断,和一个串口中断。图1中的中断允许控制寄存器,在这里都是断开的,也就是目前他们的值为0,当我们把他们置1的时候,他们就都是连通的,这时候这一个中断模式就被打开了,比如我要打开Timer 0中断,我需要写的代码就是

	ET0 = 1;
	EA = 1;

关闭只需置ET0为0即可。
只打开中断还不行,中断肯定要执行某些任务,这时候我们写一个中断函数去允许这些任务,这时候就用到图2中的中断号,我们可以看到,这些中断号是和图一的中断模式一一对应的,也就是一种中断模式对应一个中断号,废话不多说,直接上代码,就比如我打开Timer 0中断时L1点亮,代码如下:

void Timer0_Rountine() interrupt 1//此处函数名可以随便写,该函数不需要放到主函数里面被调用
{
	HC138(4);
	P0 = 0XFE;
}

上面就是中断部分的介绍和代码,下面看定时器。

三、定时器

定时器,顾名思义就是定时计数的一个模块,定时器的工作模式可以分为:定时器,计数器。因为定时器和单片机的CPU的相互独立的,所以定时器的工作都是自主完成的,不需要单片机CPU的参与,所以就可以代替长时间的delay,从而提高单片机的工作效率,并且定时器计时的精确度比delay高很多。
在定时器使用时,是靠内部震荡电路计数,每当经过一个机器周期,计数的储存器就会+1,也是该机器中最小的时间单位,通过这个时间单位的运算得到我们所需的时间长度。

现在我们讨论加1经过了多少时间?
当晶振频率是11.0592MHz的时候,我们按12MHZ算,等于12KHz = 12000000Hz
机器周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 (周期=频率的倒数)= 12 / 时钟频率 秒= 12 / 12000000 秒 = 12 000 000/ 12000000 微秒 = 1 us
所以当使用12倍数时,每隔1us,计数器就+1

定时器/计数器有四种工作模式
(1)13位定时器/计数器,计数范围0~8191
(2)16位定时器/计数器,计数范围0~65535
(3)8位自动重装,计数范围0~255
(4)双8位定时器/计数器,计数范围0~255

1、TOMD工作模式寄存器

在这里插入图片描述


1.GATE是门控制位
	当GATE=0时:计数条件只有TR1一个(TR1=1就计数,TR1=0就不计数)。
	当GATE=1时:是否计数不仅取决于TR1还取决于INT1引脚
2.C/T :定时/计数模式选择位。C/T =0 为定时模式;C/T =1 为计数模式。
3.M1 M0:工作方式设置位。定时/计数器有四种工作方式。
M1 = 0;M0 = 0;	13位定时器/计数器,计数范围0~8191,模式0
M1 = 0;M0 = 1;	16位定时器/计数器,计数范围0~65535,模式1
M1 = 1;M0 = 0;	8位自动重装,计数范围0~255,模式2
M1 = 1;M0 = 1;	双8位定时器/计数器,计数范围0~255,模式3
由此可见 TMOD = 0x01  T0  模式1
		TMOD = 0x02  T0  模式2
		TMOD = 0x03  T0  模式3
定时器1也是一样的,大家可以推理一下

##2、 TCON控制寄存器
在这里插入图片描述

TF0 TF1:定时器TX溢出中断标志,当定时器TX开始计数时,计数到达规定的时间时,定时器产生了溢出。TFX自动由0变位1。
TR0 TR1:定时器TX的控制位,当为1时,定时器TX才能计数,相当于TX的开关

定时器的计数的个数个计数初值的关系是这样的:
计数个数=2(模式位次方)— 计数初值
计数初值由THX和TLX表示

四、实战

下面基于蓝桥杯的单片机写一段定时器中断的代码,使上面的L1每隔1秒变换一次状态

void Initdsq()
{
	TMOD = 0x01;//定时器0 模式1
	TH0 = (65535-50000) / 256;//计数50000个,即为50MS
	TL0 = (65535-50000) % 256;
	
	ET0 = 1;//使能定时器0中断
	EA = 1;//使能中断
	TR0 = 1;//定时器0开始计时
}

unsigned char count = 0;
void ShowSMG() interrupt 1//中断函数
{
	TH0 = (65535-50000) / 256;
	TL0 = (65535-50000) % 256;
	HC138(4);
	count++;//累计50ms
	if(count == 20)//计时一秒
	{
		P0= 0xfe; 
	}
	if(count == 40)
	{
		P0 = 0xff;
		count = 0;
	}
}

上述代码并非所有代码,仅为定时器中断部分代码,使代码运行许结合蓝桥杯单片机基础部分——1、基础模块代码使用

本人水平有限,所有代码都是自己的风格书写,但是大致的应该是没有什么问题,希望对大家有帮助如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论

上一节:蓝桥杯单片机基础部分——1、基础模块代码

标签:定时器,计数,中断,代码,模式,蓝桥,单片机,计数器
From: https://blog.csdn.net/shidisy/article/details/145070334

相关文章

  • 《Linux设备驱动开发详解(第3版)》 第9章 Linux内核定时器与工作队列
    9.1内核定时器内核定时器用于在指定的延迟时间后执行特定的函数。它在内核中常用于实现周期性任务或延迟执行的任务。#include<linux/module.h>#include<linux/kernel.h>#include<linux/timer.h>//定义一个内核定时器structtimer_listmy_timer;//定时器到......
  • 基于单片机的公交车报站系统设计
     摘要目前,我国经济快速发展,城市化进程不断加快。公交车作为居民日常出行的重要交通工具,公交车的服务质量直接影响到乘客的乘车体验,关系到城市智能交通的发展。为了解决传统公交车上车载终端信息闭塞的问题,提高公交车只能运行模式。本次围绕公交车报站系统展开系统化的设计,......
  • 32单片机从入门到精通之测试与验证——单元测试(十五)
    人生苦短,我们都会面临困难和挑战。但是,只要我们保持积极的心态和勇往直前的精神,我们就能战胜一切困难,实现自己的目标。成功并不是一蹴而就的,它需要我们付出努力和坚持不懈。就像爬山一样,我们可能会遇到陡峭的山路和艰难的攀登,但只要我们不放弃,不停止前进,就一定能登上山顶,看到......
  • 蓝桥杯模拟题--扫把扶不扶
    目录前言问题描述输入格式输出格式 题解代码timeDif()函数主函数前言今天给大家介绍的题目是蓝桥杯模拟题--扫把扶不扶。大家有什么更好的思路,可以分享在评论区。问题描述你正在参加一场程序员的终极面试,和你竞争的是小蓝。你们都顺利地通过了前几轮筛选,来到......
  • 单片机实物成品-011 火灾监测
    火灾监测(20个版本)版本20:oled显示+温湿度+烟雾浓度+火焰传感器+天然气浓度+窗户+风扇+水泵+排气系统+声光报警+语音播报+按键+WIFI模块-----------------------------------------------------------------------------https://www.bilibili.com/video/BV1N6YaekEgw/?spm_id......
  • 单片机毕业设计项目分享(4)
    毕业设计项目单片机12329草原防灾减害监控系统的设计与实现单片机12328仓储多点温度湿测量系统单片机12327病房呼叫系统实物单片机12326便携式气象仪单片机12325便携式可充电,可调亮度Led灯设计单片机12324变电站综合监控系统的设计单片机12323变电站蓄电池组工作状态在......
  • 从玩具到工业控制--51单片机的跨界传奇【1】
    由于博主本人即喜欢软件也喜欢硬件,硬件方面更偏向于单片机的学习和使用。为了知识的巩固和提高,所以打算开辟一个新的专栏——51单片机。我们就以经典且基础的51单片机讲起,帮助大家为后面学习更高级的单片机打好基础。我们会从零基础进行讲解,欢迎各位点赞+收藏+转发+评论,谢谢各......
  • 怎么提升单片机代码执行效率
    提升单片机代码执行效率是一个综合性的任务,涉及代码优化、硬件资源利用、编译器设置等多个方面。以下是本人的一些具体的方法和建议:一、代码优化减少冗余代码:通过代码复用和模块化,避免在程序中出现重复的代码段。例如,使用函数封装重复的操作,减少代码冗余,提高执行效率。简化算......
  • 02-51单片机数码管与矩阵键盘
    一、数码管模块1.数码管介绍如图所示为一个数码管的结构图:说明:数码管上下各有五个引脚,其中上下中间的两个引脚是联通的,一般为数码管的公共端,分为共阴极或共阳极;其它八个引脚分别对应八个二极管,从a~g包括右下角的点,每个二极管与就近的引脚一一对应。2.单片机数......
  • 01-51单片机LED与独立按键
    一、单片机概述注意:个人学习笔记,里面涉及到的C语言和进程转换相关的知识在C语言部分已经写了,这里是默认都会的状态学习单片机。1.什么是单片机单片机,英文MicroControllerUnit,简称MCU。其内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功......