【51单片机】程序实验1112.外部中断-定时器中断

主要参考学习资料:B站【普中官方】51单片机手把手教学视频

前置知识:C语言

单片机套装:普中STC51单片机开发板A4标准版套餐7

码字不易,求点赞收藏加关注(´•ω•̥`)

有问题欢迎评论区讨论~

目录

  • 程序实验11&12.外部中断-定时器中断
    • 中断系统
      • 中断概念
      • 中断结构
      • 中断寄存器
        • IE 寄存器
        • TCON寄存器
        • 中断优先级
        • 中断号
        • 中断响应条件
    • 外部中断
      • 硬件设计
      • 实验11 外部中断
    • 定时器中断
      • 定时器介绍
        • CPU时序
        • 定时器原理
        • 定时器结构
          • 工作方式寄存器TMOD
          • 控制寄存器TCON
        • 定时器工作方式
          • 方式0
          • 方式1
          • 方式2
          • 方式3
      • 定时器配置
      • 实验12 定时器中断

程序实验11&12.外部中断-定时器中断

中断系统

中断概念

中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在很大程度上提高了单片机处理外部或内部事件的能力。引起程序中断的根源称为中断源

单片机处理中断的过程:

引起CPU中断的根源称为中断源

单片机的中断系统允许有多个中断源,当几个中断源同时向CPU发出中断请求时,需要解决中断优先级的问题,CPU会先执行优先级高的中断程序。单片机中对中断源有默认的优先级别,也可以通过对应的寄存器修改优先级。

如果CPU在执行中断源A的中断程序时发生了优先级更高的中断源B,那么CPU将转而执行B的中断程序再回到原来的位置继续执行A的中断程序,称为中断嵌套。中断嵌套在51单片机中应用很少,在STM32、DSP等中断较为复杂的单片机中经常遇到。

中断的优点:分时操作、实时响应、可靠性高。

中断结构

一个增强型51单片机提供了8个中断源,分别为外部中断INT0~3、定时器中断TIME0~2和一个串行口中断UART,而普通系列的51单片机均有的5个中断源为INT0、INT1、T0、T1、UART。

如图是一个中断结构,从上到下中断的优先级从高到低,左侧连接单片机管脚。在中断标志之前,外部中断需要先通过IT0、IT1选择中断触发方式,0为低电平触发,1为下降沿触发。中断标志在接收到中断后自动置为1,其中串行中断的中断标志经过一个或运算。IE寄存器 设置中断在程序中的有效与否,源允许分别控制每个中断的有效性,而总允许控制所有中断的有效性,只有中断对应的源允许和总允许都接通时才能被CPU接收。IP寄存器 部分配置中断优先级,1的优先级高于0,其余遵循默认优先级。

中断寄存器

IE 寄存器
76543210
字节地址:A8HEAESET1EX1ET0EX0

允许接收中断时将相应的位设为1。

TCON寄存器
76543210
字节地址:88HTF1TR1TF0TR0IE1IT1IE0IT0

IT0和IT1控制相应外部中断的触发方式,0为低电平触发,1为下降沿触发。TR0、TR1为定时器控制位,在定时器中断中会讲到。其余中断请求标志位皆由单片机内部自动设置。

中断优先级
中断源中断标志中断服务程序入口优先级顺序
外部中断0(INT0)IE00003H
定时/计数器0(T0)TF0000BH
外部中断1(INT1)IE10013H
定时/计数器1(T1)TF1001BH
串行口R1或T10023H
中断号

中断号在程序中指引CPU定位哪个中断并进入相应的中断服务程序。

中断源符号名称中断引起原因中断号
INT0外部中断0P3.2引脚低电平或下降沿信号0
T0定时器中断0定时/计数器0计数回0溢出1
INT1外部中断1P3.3引脚低电平或下降沿信号2
T1定时器中断1定时/计数器1计数回0溢出3
T1/R1串行口中断串行通信完成一帧数据发送或接收引起中断4
中断响应条件

满足下面三个条件CPU才能触发中断响应:

  • 中断源有中断请求。
  • 中断源的中断允许为1。
  • CPU开中断。
    以外部中断0为例:
EA = 1; //打开总中断开关
EX0 = 1; //打开外部中断0
IT0 = 0; //设置外部中断的触发方式
void int0() interrupt 0 //中断函数需要interrupt跟随中断号
{//编写用户所需的功能代码
}

外部中断

硬件设计

外部中断INT0和INT1分别为单片机管脚P32和P33的附加功能,而这两个管脚又与独立按键K3和K4连接。管脚自带上拉电阻默认为高电平,按键按下时管脚接地变为低电平,假如将外部中断配置为下降沿的触发方式则按键按下瞬间触发外部中断。

实验11 外部中断

实现功能:使用独立按键K3控制LED1亮灭。

#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;//定义按键和LED1的控制管脚
sbit KEY3 = P3^2;
sbit LED1 = P2^0;//毫秒延时函数
void delay_ms(u16 ms)
{u16 i, j;for(i = ms;i > 0;i--)for(j = 110;j > 0;j--);
}//外部中断0配置函数
void exti0_init()
{//寄存器的每一位在reg52.h头文件里均已定义IT0 = 1; //设置外部中断触发方式为下降沿EX0 = 1; //打开外部中断0开关EA = 1; //打开总中断开关
}void main()
{exti0_init();while(1){//当检测到中断,CPU会自动跳到主函数外的中断服务函数}
}//外部中断0服务函数
void exti0() interrupt 0
{delay_ms(10); //消抖if(KEY3 == 0){LED1 = !LED1; //切换LED1的亮灭状态}
}

定时器中断

定时器介绍

CPU时序
  • 振荡周期:为单片机提供定时信号的振荡源的周期。
  • 状态周期:两个振荡周期。
  • 机器周期:六个状态周期。
  • 指令周期:完成一条指令占用的时间,通常为1~4个机器周期。
    如果单片机的振荡频率为12MHz,则对应的机器周期为 1 μ s 1\mathrm{\mu s} 1μs
定时器原理

定时器的实质是一种加一计数器,随着脉冲的输入自动加一,可存储16位,分为高八位TH和低八位TL。当计数器数位全为1时,下一个脉冲将使计数器溢出,计数器归零的同时会使相应的中断标志置一。定时和计数的次数通过计数器的初值来设定, 次数 = 溢出值 − 初值 次数=溢出值-初值 次数=溢出值初值,对于较大的次数采用分段计数。

定时器结构

51单片机定时器的工作由两个特殊八位寄存器TCON和TMOD来控制。TMOD确定定时器的工作方式和功能,TCON低四位控制外部中断,高四位控制定时器的启停及溢出。

定时器的两个功能分别为定时功能和计数功能。定时功能接收来自CPU振荡器(OSC)的机器周期脉冲,计数功能接收来自单片机管脚P3.4和P3.5的脉冲。

工作方式寄存器TMOD
76543210
字节地址:89HGATEC/ T ˉ \bar{\mathrm{T}} TˉM1M0GATEC/ T ˉ \bar{\mathrm{T}} TˉM1M0

低四位控制T0,高四位控制T1。

  • GATE:门控位,控制定时器启动是否受外部中断影响。当GATE=0,只需通过寄存器TCON的TR0/TR1=1来使对应定时器启动;当GATE=1,在前面的基础上还需要来自外部中断引脚INT0/INT1的高电平才能启动。
  • C/ T ˉ \bar{\mathrm{T}} Tˉ:定时/计数模式选择位,定时器模式设为0,计数器模式设为1。
  • M1&M0:工作方式选择位,见下表:
M1M0工作方式说明
00方式013位定时/计数器
01方式116位定时/计数器
10方式28位自动重装定时/计数器
11方式3T0分成两个独立的8位定时/计数器;T1此方式停止计数
我们常用的为方式1和方式2,方式1用于定时/计数器工作,方式2用于串口通信波特率的生成,将在下一个实验涉及。
控制寄存器TCON
76543210
字节地址:88HTF1TR1TF0TR0
TF0/TF1:定时器溢出中断请求标志,由硬件自动完成,可通过调用查询定时器溢出状态。

TR0/TR1:定时器的运行控制位,设置为1时定时器开始工作,设置为0时定时器停止工作。

定时器工作方式
方式0

13位定时/计数器用到TH的八位和TL的低五位。

GATE控制原理:GATE经过一个非门后和INT引脚进行或门运算,若GATE=0,非门后为1,无论INT引脚为0还是1,或运算结果都为1;若GATE=1,非门后为0,只有INT引脚为1,或运算结果才为1。随后再和TR运行控制位进行与运算,当TR=1且或运算结果为1时定时器启动。

C/ T ˉ \bar{\mathrm{T}} Tˉ控制原理:当C/ T ˉ \bar{\mathrm{T}} Tˉ=1,虚线对应开关打到1,定时器接收T0引脚的脉冲;当C/ T ˉ \bar{\mathrm{T}} Tˉ=0,开关打到0,定时器接收机器周期脉冲。

方式1

方式1与方式0的区别为定时器TH的八位和TL的八位都参与计数。

方式2

方式2中用TL进行计数,TH进行装载。当TL溢出时,TH会自动将设置好的值装载进TL重新开始计数,适用于精确的脉冲信号发生器,例如串口通信。

方式3

方式3只适用于T0,此时T1停止工作。其中TL0可用于定时和计数,与中断标志TF0连接;TH0仅用于定时,与中断标志TF1连接。

定时器配置

  • 对TMOD赋值以确定T0和T1的工作方式。
  • 根据所要定时的时间计算初值并写入TH0、TL0或TH1、TL1。
  • 如果使用中断,则对EA赋值并开放定时器中断。
  • 设置TR0或TR1为1,启动定时/计数器定时或计数。
    对于初值的计算,可使用相关软件。下图中,方式1溢出值为 2 16 = 65536 2^{16}=65536 216=65536,减去1ms对应的机器周期数1000,将结果64536转化为十六进制,FC对应高八位写入TH,18对应低八位写入TL。

//以定时器0的配置为例
void time0_init()
{TMOD |= 0x01; //选择为定时器0模式,工作方式1TH0 = 0xFC; //给定时器赋初值,定时1msTL0 = 0x18;ET0 = 1; //打开定时器0中断允许EA = 1; //打开总中断TR0 = 1; //打开定时器
}

其中TMOD使用了或运算是为了不干扰高四位对定时器1的配置,赋值符号右侧将高四位都设为0不会改变原有高四位的值,如果配置定时器1则将低四位都设为0。

实验12 定时器中断

实现功能:通过定时器0中断控制D1指示灯隔1秒闪烁。

#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;//定义LED1的控制管脚
sbit LED1 = P2^0;//定时器0初始化函数
void time0_init()
{TMOD |= 0x01;TH0 = 0xFC;TL0 = 0x66;ET0 = 1;EA = 1;TR0 = 1;
}void main()
{time0_init();while(1){}
}//定时器0中断服务函数
void time0() interrupt 1
{//静态变量i累计毫秒值static u16 i = 0;//触发中断后将定时器重置为初值,使其立即重新计时TH0 = 0xFC;TL0 = 0x66;//毫秒值累加i++;//如果达到1秒if(i == 1000){i = 0; //重新累计毫秒值LED1 = !LED1; //切换LED1亮灭状态}
}

本篇完

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础(2)完结

声明 学习视频来自 B 站up主泷羽sec,如有涉及侵权马上删除文章。 在学习的过程中记笔记,分享笔记方便各位师傅学习,以下内容只涉及学习内容,任何其他违法行为与本人及泷羽sec无关,请务必遵守法律法规,切莫逾…

【重生之我在B站学MySQL】

MySQL笔记 文章目录 MySQL的三层结构SQL语句分类sql语句数据库操作创建数据库查看、删除数据库 表操作创建表mysql常用数据类型(列类型)查询表、插入值创建表练习创建一个员工表emp 修改表mysql约束primary key(主键)not null(非空)unique(唯一)foreign key(外键)check自增长 索…

springSecurity自定义登陆接口和JWT认证过滤器

下面我会根据该流程图去自定义接口: 我们需要做的任务有: 登陆:1、通过ProviderManager的方法进行认证,生成jwt;2、把用户信息存入redis;3、自定义UserDetailsService实现到数据库查询数据的方法。 校验&a…

【adb】iqoo系统精简垃圾内置应用

免责声明 这个得谨慎点,虽然我验证过两部手机和不同版本的系统,但是总会有特殊的存在、 本教程来自于互联网搜集整理, 按照本教程造成的用户设备硬件或数据损失,本人概不承担任何责任,如您不同意此协议,请不…

计算机视觉:学习指南

一、引言 计算机视觉作为人工智能领域的一个重要分支,致力于让计算机理解和解释视觉信息,近年来取得了令人瞩目的进展,广泛应用于安防监控、自动驾驶、图像编辑、医学影像分析等众多领域。从入门到精通计算机视觉需要系统地学习一系列知识和…

汽车升级到底应不应该设置“可取消“功能

最近,汽车OTA(Over-the-Air)升级频频成为车主讨论的热点。有些车主反映,一些升级增加了实用功能,而另一些却让体验变得复杂甚至带来不便。于是,大家不禁发问:汽车升级功能究竟应不应该允许“可取…

三菱FX3uPLC输入接线注意事项

FX3u微型控制器(DC输入型)的输入根据外部接线,漏型输入和源型输入都可使用。 但是,一定要连接S/S端子的接线。 详细事宜请参考“FX3U系列微型控制器硬件说明手册 AC电源型的输入接线事例(FX3U-囗MR/UA1除外) DC电源型的输入接线事例 *请不要与(0V)、(24V)端子接线…

一文说清flink从编码到部署上线

引言:目前flink的文章比较多,但一般都关注某一特定方面,很少有一个文章,从一个简单的例子入手,说清楚从编码、构建、部署全流程是怎么样的。所以编写本文,自己做个记录备查同时跟大家分享一下。本文以简单的…

过滤器Filter,ajax异步请求,服务器响应的数据类型,json

1.过滤器Filter 按照过滤规则筛选出想要的资源 很多地方都需要判断是否登录,对每个资源进行判断,非常麻烦,可以使用过滤器在访问这些资源前进行判断。 案例: package com.ghx.filter;import javax.servlet.*; import javax.ser…

【网络协议栈】TCP/IP协议栈中重要协议和技术(DNS、ICMP、NAT、代理服务器、以及内网穿透)

每日激励:“请给自己一个鼓励说:Jack我很棒!—Jack” 绪论​: 本章是TCP/IP网络协议层的完结篇,本章将主要去补充一些重要的协议和了解一些网络中常见的名词,具体如:DNS、ICMP、NAT、代理服务器…

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…

因果推荐CIKM24 | 通过偏好感知因果干预和反事实数据增强来提升序列推荐

论文来源:CIKM 24 论文链接:PACIFIC: Enhancing Sequential Recommendation via Preference-aware Causal Intervention and Counterfactual Data Augmentation | Proceedings of the 33rd ACM International Conference on Information and Knowledge …

如何在 Odoo18 视图中添加关联数据看板按钮 | 免费开源ERP实施诀窍

文 / 开源智造 Odoo亚太金牌服务 引言 关联数据看板按钮乃是 Odoo 当中的一项强效功能,它容许用户顺遂地访问相关记录,或者直接从模型的表单视图施行特定操作。它们为用户给予了对重要信息的疾速访问途径,并简化了工作流程,由此…

提升网站流量的关键:AI在SEO关键词优化中的应用

内容概要 在当今数字时代,提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步,为搜索引擎优化(SEO)提供了强有力的支持,尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁,其…

腾讯图标/百并发

腾讯新图标,识别速度7毫秒, 百并发无压力

python和C++中的逻辑与/或、位与/或

在 Python 和 C 中,“与”和“或”的实现逻辑相似,但符号和使用方式有区别。 1.Python 中的与、或 与(AND):and或(OR):or 1.1 逻辑与、或: 用于布尔值(Tr…

PR基本操作

将剪辑添加到序列 1.在项目面板中选择素材,右击插入或覆盖选项,添加的素材依指针所在位置为起点。 上图画框位置会影响素材插入的轨道。 2.直接拖动素材到对应的时间轴轨道即可 3.拖动素材到节目监视器 在此项前插入:在V1轨道当前指针所…

如何配置Github并在本地提交代码

前提: 可以流畅访问github, 需要一些上网技巧, 这就自行处理了 申请一个github账号 Github官网地址 首先就是邮箱注册啦, github没有对邮箱的限制, 只要是能收邮件的就ok, qq邮箱, 163等都可以使用. 然后和普通注册账号一样, 一路填写需要的信息, 验证邮箱即可. 如何新增代…

nacos服务注册流程

一、客户端自动注册实例流程 1.首先客户端需要引入服务发现包 <groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.6.RELEASE</version>2. NacosServiceRegistryA…

qemu安装arm64架构银河麒麟

qemu虚拟化软件&#xff0c;可以在一个平台上模拟另一个硬件平台&#xff0c;可以支持多种处理器架构。 一、安装 安装教程&#xff1a;https://blog.csdn.net/qq_36035382/article/details/125308044 下载链接&#xff1a;https://qemu.weilnetz.de/w64/2024/ 我下载的是 …