蓝桥杯篇---IAP15F2K61S2中断

news/2025/2/20 13:12:04/
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="markdown_views prism-atom-one-dark">cap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

class="toc">

文章目录


前言

本文仅仅简单介绍了IAP15F2K61S2中断以及外部、定时器、串口中断的使用。


简介

IAP15F2K61S2 是一款基于8051内核的class="tags" href="/DanPianJi.html" title=单片机>单片机࿰c;支持丰富的中断功能。中断class="tags" href="/DanPianJi.html" title=单片机>单片机响应外部或内部事件的重要机制࿰c;能够提高程序的实时性和效率。IAP15F2K61S2中断系统包括多个中断c;如外部中断、定时器中断、串口中断等。

中断

IAP15F2K61S2 支持以下中断源:

1.外部中断

ckquote>

INT0(P3.2)
INT1(P3.3)

ckquote>

2.定时器中断

ckquote>

定时器0(TF0)
定时器1(TF1)

ckquote>

3.串口中断

ckquote>

串口接收/发送(RI/TI)

ckquote>

4.ADC中断

ckquote>

ADC转换完成

ckquote>

5.PCA中断

ckquote>

PCA模块中断

ckquote>

6.SPI中断

ckquote>

SPI传输完成

ckquote>

7.PWM中断

ckquote>

PWM周期完成

ckquote>

中断优先级

IAP15F2K61S2中断优先级可以通过 **IP(中断优先级寄存器)**和 **IPH(中断优先级高寄存器)**进行配置。每个中断源可以设置为高优先级或低优先级。

中断相关寄存器

1.IE

IE(中断使能寄存器):用于使能或禁用中断

2.IP

IP(中断优先级寄存器):用于设置中断优先级

3.TCON

TCON(定时器控制寄存器):包含外部中断触发方式控制位

4.SCON

SCON(串口控制寄存器):包含串口中断标志位

中断使用步骤

1.配置中断

配置中断源:设置中断触发条件(如外部中断的边沿触发)。

2.使能中断

使能中断:在 IE 寄存器中使能对应的中断

3.设置优先级

设置优先级:在 IP 或 IPH 寄存器中设置中断优先级(可选)。

4.编写中断服务程序

编写中断服务函数:在中断发生时执行特定的代码。

5.清除中断标志

清除中断标志:在中断服务函数中清除中断标志位

示例代码:外部中断使用

以下代码展示了如何使用**外部中断0(INT0)**在 IAP15F2K61S2 上实现按键控制LED。

<code class="prism language-c">class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><reg52.h>class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name">uchar class="token expression">class="token keyword">unsigned class="token keyword">char
class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name">uint class="token expression">class="token keyword">unsigned class="token keyword">intsbit LED class="token operator">= P1class="token operator">^class="token number">0class="token punctuation">;  class="token comment">// LED连接到P1.0
sbit KEY class="token operator">= P3class="token operator">^class="token number">2class="token punctuation">;  class="token comment">// 按键连接到P3.2(INT0)class="token keyword">void class="token function">External_Initclass="token punctuation">(class="token punctuation">) class="token punctuation">{IT0 class="token operator">= class="token number">1class="token punctuation">;  class="token comment">// 设置INT0为下降沿触发EX0 class="token operator">= class="token number">1class="token punctuation">;  class="token comment">// 使能外部中断0EA class="token operator">= class="token number">1class="token punctuation">;   class="token comment">// 使能总中断
class="token punctuation">}class="token keyword">void class="token function">External0_ISRclass="token punctuation">(class="token punctuation">) interrupt class="token number">0 class="token punctuation">{LED class="token operator">= class="token operator">~LEDclass="token punctuation">;  class="token comment">// LED状态取反
class="token punctuation">}class="token keyword">void class="token function">mainclass="token punctuation">(class="token punctuation">) class="token punctuation">{class="token function">External_Initclass="token punctuation">(class="token punctuation">)class="token punctuation">;  class="token comment">// 初始化外部中断class="token keyword">while class="token punctuation">(class="token number">1class="token punctuation">)class="token punctuation">;        class="token comment">// 主循环࿰c;等待中断
class="token punctuation">}
代码说明
External_Init:
设置 INT0 为下降沿触发(IT0 class="token operator">= class="token number">1)。
使能外部中断class="token number">0(EX0 class="token operator">= class="token number">1)。
使能总中断(EA class="token operator">= class="token number">1)。External0_ISR:
外部中断class="token number">0中断服务函数࿰c;每次中断发生时切换LED状态。main:
初始化外部中断c;进入主循环等待中断code>

示例代码:定时器中断使用

以下代码展示了如何使用定时器0中断IAP15F2K61S2 上实现1秒定时。

<code class="prism language-c">class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><reg52.h>class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name">uchar class="token expression">class="token keyword">unsigned class="token keyword">char
class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name">uint class="token expression">class="token keyword">unsigned class="token keyword">intsbit LED class="token operator">= P1class="token operator">^class="token number">0class="token punctuation">;  class="token comment">// LED连接到P1.0class="token keyword">void class="token function">Timer0_Initclass="token punctuation">(class="token punctuation">) class="token punctuation">{TMOD class="token operator">|= class="token number">0x01class="token punctuation">;  class="token comment">// 定时器0࿰c;模式1(16位定时器)TH0 class="token operator">= class="token number">0xFCclass="token punctuation">;    class="token comment">// 初值࿰c;定时1msTL0 class="token operator">= class="token number">0x18class="token punctuation">;ET0 class="token operator">= class="token number">1class="token punctuation">;       class="token comment">// 使能定时器0中断EA class="token operator">= class="token number">1class="token punctuation">;        class="token comment">// 使能总中断TR0 class="token operator">= class="token number">1class="token punctuation">;       class="token comment">// 启动定时器0
class="token punctuation">}class="token keyword">void class="token function">Timer0_ISRclass="token punctuation">(class="token punctuation">) interrupt class="token number">1 class="token punctuation">{class="token keyword">static uint count class="token operator">= class="token number">0class="token punctuation">;TH0 class="token operator">= class="token number">0xFCclass="token punctuation">;  class="token comment">// 重装初值TL0 class="token operator">= class="token number">0x18class="token punctuation">;countclass="token operator">++class="token punctuation">;class="token keyword">if class="token punctuation">(count class="token operator">>= class="token number">1000class="token punctuation">) class="token punctuation">{  class="token comment">// 1秒到达count class="token operator">= class="token number">0class="token punctuation">;LED class="token operator">= class="token operator">~LEDclass="token punctuation">;  class="token comment">// LED状态取反class="token punctuation">}
class="token punctuation">}class="token keyword">void class="token function">mainclass="token punctuation">(class="token punctuation">) class="token punctuation">{class="token function">Timer0_Initclass="token punctuation">(class="token punctuation">)class="token punctuation">;  class="token comment">// 初始化定时器0class="token keyword">while class="token punctuation">(class="token number">1class="token punctuation">)class="token punctuation">;      class="token comment">// 主循环࿰c;等待中断
class="token punctuation">}
代码说明
Timer0_Init:
设置定时器class="token number">0为模式class="token number">1class="token number">16位定时器)。
初值设置为 TH0 class="token operator">= class="token number">0xFC 和 TL0 class="token operator">= class="token number">0x18c;定时class="token number">1ms。
使能定时器class="token number">0中断和总中断。
启动定时器class="token number">0。Timer0_ISR:
定时器class="token number">0中断服务函数࿰c;每次溢出时重装初值。
使用静态变量 count 计数࿰c;达到class="token number">1000次(即class="token number">1秒)时切换LED状态。main:
初始化定时器class="token number">0c;进入主循环等待中断code>

示例代码:串口中断使用

以下代码展示了如何使用串口中断IAP15F2K61S2 上实现数据接收。

<code class="prism language-c">class="token macro property">class="token directive-hash">#class="token directive keyword">include class="token string"><reg52.h>class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name">uchar class="token expression">class="token keyword">unsigned class="token keyword">char
class="token macro property">class="token directive-hash">#class="token directive keyword">define class="token macro-name">uint class="token expression">class="token keyword">unsigned class="token keyword">intclass="token keyword">void class="token function">UART_Initclass="token punctuation">(class="token punctuation">) class="token punctuation">{SCON class="token operator">= class="token number">0x50class="token punctuation">;  class="token comment">// 串口模式1࿰c;8位数据࿰c;1位停止位TMOD class="token operator">|= class="token number">0x20class="token punctuation">; class="token comment">// 定时器1࿰c;模式2(8位自动重装)TH1 class="token operator">= class="token number">0xFDclass="token punctuation">;   class="token comment">// 波特率9600TL1 class="token operator">= class="token number">0xFDclass="token punctuation">;ES class="token operator">= class="token number">1class="token punctuation">;       class="token comment">// 使能串口中断EA class="token operator">= class="token number">1class="token punctuation">;       class="token comment">// 使能总中断TR1 class="token operator">= class="token number">1class="token punctuation">;      class="token comment">// 启动定时器1
class="token punctuation">}class="token keyword">void class="token function">UART_ISRclass="token punctuation">(class="token punctuation">) interrupt class="token number">4 class="token punctuation">{class="token keyword">if class="token punctuation">(RIclass="token punctuation">) class="token punctuation">{     class="token comment">// 如果接收中断标志置位RI class="token operator">= class="token number">0class="token punctuation">;   class="token comment">// 清除接收中断标志P1 class="token operator">= SBUFclass="token punctuation">; class="token comment">// 将接收到的数据输出到P1口class="token punctuation">}
class="token punctuation">}class="token keyword">void class="token function">mainclass="token punctuation">(class="token punctuation">) class="token punctuation">{class="token function">UART_Initclass="token punctuation">(class="token punctuation">)class="token punctuation">;  class="token comment">// 初始化串口class="token keyword">while class="token punctuation">(class="token number">1class="token punctuation">)class="token punctuation">;    class="token comment">// 主循环࿰c;等待中断
class="token punctuation">}
代码说明
UART_Init:
设置串口为模式class="token number">1c;波特率class="token number">9600。
使能串口中断和总中断。
启动定时器class="token number">1。UART_ISR:
串口中断服务函数࿰c;接收数据并将其输出到P1口。main:
初始化串口࿰c;进入主循环等待中断code>

总结

IAP15F2K61S2中断功能非常强大࿰c;能够满足多种实时性要求较高的应用场景。通过合理配置中断源、优先级和中断服务函数c;可以实现高效的事件处理。以上代码示例展示了外部中断、定时器中断和串口中断的基本使用方法࿰c;实际开发中可以根据需求进行扩展和优化。


http://www.ppmy.cn/news/1572891.html

相关文章

计算机视觉+Numpy和OpenCV入门

Day 1&#xff1a;Python基础Numpy和OpenCV入门 Python基础 变量与数据类型、函数与类的定义、列表与字典操作文件读写操作&#xff08;读写图像和数据文件&#xff09; 练习任务&#xff1a;写一个Python脚本&#xff0c;读取一个图像并保存灰度图像。 import cv2 img cv2.im…

DeepSeek生成思维导图

一、准备阶段 工具准备 安装思维导图软件&#xff08;推荐XMind/MindMaster/在线工具如ProcessOn&#xff09; 打开DeepSeek官网或集成平台&#xff08;https://www.deepseek.com/&#xff09; 明确需求 确定思维导图核心主题&#xff08;如"碳中和实施方案"&…

【CSS进阶】CSS元素的水平、垂直居中方法

在前端开发中&#xff0c;实现 水平居中 和 垂直居中 是常见的需求。不同的 HTML 元素&#xff08;块级元素、行内元素、行内块元素&#xff09;以及不同的布局方式&#xff08;传统布局、Flexbox、Grid、绝对定位&#xff09;会有不同的居中方法。以下是各类居中方式的总结&am…

DeepSeek-V3模型底层架构的核心技术一(多Token预测(MTP)技术)

一、DeepSeek-V3的框架结构 DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。这些创新使得模型在处理长序列、平衡计算负载以及生成连贯文本方面表现出色。 1. 基础架构 DeepSeek-V3的基础架构仍然基于Transformer框…

借3D视觉定位东风,汽车零部件生产线实现无人化的精准飞跃

在新能源汽车市场的推动下&#xff0c;汽车零部件制造业正迎来前所未有的发展机遇。然而&#xff0c;传统的生产方式已经无法满足现代制造业对高效、精准的要求。为了应对这一挑战&#xff0c;越来越多的企业开始探索智能化生产的道路。 在这个过程中&#xff0c;3D视觉定位系…

服务器硬件知识--------linux系统初识and安装

#!/bin/bash 学IT&#xff0c;好技术&#xff0c;私&#xff01; 一、服务器硬件与linux系统初识及安装 1、服务器硬件知识 我们知道&#xff0c;组成计算机的硬件主要有主机和输入/输出设备。主机包括机箱、电源、主板、CPU&#xff08;Central Processing Unit&#xff0c;…

ESP32鼠标驱动(ble hid device_demo)【ESP32指向鼠标】

ESP32鼠标驱动(ble hid device_demo)【ESP32指向鼠标】 我使用的vscode开发esp32&#xff0c;用的是ESP-IDF v5.12固件&#xff0c;其提供了很多例程&#xff0c;在搜索里面输入“ESP-IDF: Show Examples Projects”&#xff0c;便可看到例程&#xff0c;如下图所示&#xff0…

19.4.9 数据库方式操作Excel

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。 通过COM来操作Excel操作&#xff0c;请参看第21.2节 在第19.3.4节【…