单片机中断概念以及示例

server/2024/10/20 7:33:07/

中断允许控制寄存器

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

EX0(IE.0),外部中断0允许位;EX0=1,打开外部中断0中断;EX0=0关闭外部中断0中断。

ET0(IE.1),定时/计数器T0中断允许位; ET0=1打开T0中断;ET0=0关闭T0中断。

EX1(IE.2),外部中断1允许位;EX1=1 打开外部中断1中断,EX1=0 关闭外部中断1中断。

ET1(IE.3),定时/计数器T1中断允许位;ET1=1,打开T1中断;ET1=0 关闭T1中断。

ES(IE.4),串行口中断允许位;ES=1打开串口中断;ES=0 关闭串口中断。

EA (IE.7), CPU中断允许(总允许)位。EA=1,打开全局中断控制,由各中断控制位确定相应的中断打开或关闭;EA=0,关闭所有中断。

单片机定时器中断

51单片机内部有2个16位可编程的定时器/计数器,即定时器T0和定时器T1。他们既有定时功能又有计数功能,通过设置与他们相关的特殊功能寄存器,可以选择启用定时功能或计数功能。

注意,定时器系统是单片机内部一个独立的硬件部分,它与CPU和晶振通过内部某些控制线连接并相互作用,CPU一旦设置开启定时器功能后,定时器便在晶振的作用下自动计时,当定时器的计数器计满后会产生中断,即通知CPU该如何处理。

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

加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

工作方式寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:

GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。

  

M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。

控制寄存器TCON

定时器/计数器控制寄存器TCON在特殊功能寄存器中,字节地址为88H,可进行位寻址。TCON寄存器用来控制寄存器的启、停,以及标志定时器溢出和中断情况。单片机复位时,TCON全部清零。其各位定义如下

7

6

5

4

3

2

1

0

位符号

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

地址

8FH

8EH

8DH

8CH

8BH

8AH

89H

88H

 TF1 ----定时器1溢出标志位,当定时器1计满溢出时,由硬件TF1置1,并且申请中断,进入中断服务程序后,由硬件自动清0(注意此处:触发中断程序后,计时器立即同步重新开始,应该是这个意思).如果使用定时器中断,那么该位完全不用认为去操作;如果使用软件查询方式的话,当查询到该位置1后,就需要使用软件清0.

TR1----定时器1运行控制位。由软件清0关闭定时器1。当GATE=1且INT1为高电平时,TR1置1,启动定时器1.当GATE=0时,TR1置1,启动定时器1。

TF0-----定时器0溢出标志,其功能及操作方法通TF1.

TR0-----定时器0运行控制位,其功能及操作方法通TR1。

C51 中断函数格式如下:

void 函数名() interrupt 中断号 using 工作组

{

中断服务程序内容

}

详解:中断函数不能有返回值,所以最前面用void ,后面紧跟函数名,名字名字可以随便起但不要与C语言的关键字相同;中断函数不带任何参数,所以函数名后面的()中为空;中断号是指单片机中的几个中断的序号,这个序号是编译器识别不同中断的唯一符号,因此在写中断服务程序时务必要写正确;最后的using工作组是指这个中断函数使用单片机内存中4组工作寄存器中的那一组,C51编译器在编译程序时会自动分配工作组,因此最后这句话可以省略,但大家以后遇到这样的程序代码时要知道是什么意思。

在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常初始化设置如下:

  1. 对TMOD赋值,以确定T0和T1的工作方式。
  2. 计算初值,并将初值写入TH0、TL0或TH1、TL1。
  3. 对IE赋值,开放中断
  4. 使TR0或TR1置位,启动定时器/计数器定时或计数。

http://www.ppmy.cn/server/133283.html

相关文章

10 分钟使用豆包 MarsCode 帮我搭建一套后台管理系统

以下是「 豆包MarsCode 体验官」优秀文章,作者把梦想揉碎。 十分钟使用豆包 MarsCode 搭建后台管理项目 在这个快节奏的时代,开发者们总是希望能够快速、高效地完成项目的搭建与开发工作。无论是初创企业还是大型公司,后台管理系统都是必不可…

WordPress外部图片本地化插件

一款用于本地化文章的外部图片的插件,支持如下功能: 文章发布前通过编辑器插件本地化 文章手动发布时自动本地化 文章定时发布时自动本地化 针对已发布的文章批量本地化。 源码下载:https://download.csdn.net/download/m0_66047725/898963…

TH-OCR:强大的光学字符识别工具与车牌识别应用

在当今数字化的时代,高效准确地识别文本和图像中的字符变得至关重要。TH-OCR(清华 OCR)作为一款优秀的光学字符识别软件,以其卓越的性能和广泛的应用场景,受到了众多用户的青睐。其中,车牌识别功能更是在交…

尚硅谷rabbitmq2024介绍和工作模式 第4-9节 答疑

RabbitMQ体系结构介绍重要:对体系结构的理解直接关系到后续的操作和使用 Broker Connection Channel Producer Channel Virtual Host Consumer Channel ---rabbitmq connection里面有很多channel,channel是什么 在RabbitMQ中,channel(通道&…

Python | Leetcode Python题解之第494题目标和

题目: 题解: class Solution:def findTargetSumWays(self, nums: List[int], target: int) -> int:cache {} # 记忆化单元# functools.cache # Python functools自带记忆化单元【启用后可省去自定义cache单元】def dfs(i, summ, t):summ: 前i…

ai字幕用什么软件制作?6款视频加字幕工具分享!

在视频制作和后期处理中,字幕的添加是一个重要的环节。随着AI技术的发展,越来越多的软件开始支持AI自动加字幕功能,使得字幕的制作变得更加简单和高效。本文将为大家介绍几款常用的AI字幕制作软件,并详细讲解如何使用AI自动加字幕…

【2022统考真题】计算时间复杂度

目录 一、题目描述 二、思路分析 三、易错提醒 四、同级和嵌套的关系 一、题目描述 下列程序段的时间复杂度是&#xff08;&#xff09; int sum 0; for (int i 1; i < n; i * 2) for (int j 0; j < i; j) sum; A. O(logn) B. O(n) C. O(nlogn) D…

Java.6--多态-设计模式-抽象父类-抽象方法

一、多态 1.定义--什么是多态&#xff1f; a.同一个父类的不同子类对象&#xff0c;在做同一行为的时候&#xff0c;有不同的表现形式&#xff0c;这就是多态。&#xff08;总结为&#xff1a;一个父类下的不同子类&#xff0c;同一行为&#xff0c;不同表现形式。&#xff0…