STC32单片机 普通 I/O 口中断功能介绍和使用
STC32单片机 普通 I/O 口中断功能和使用
✨STC32单片机普通 I/O 口中断,不是传统外部中断.
- 🔖手册上描述:STC32G 系列支持所有的 I/O 中断,且支持 4 种中断模式:下降沿中断、上升沿中断、低电平中断、高电平中断。每组 I/O 口都有独立的中断入口地址,且每个 I/O 可独立设置中断模式。
注:STC32G12K128-Beta 版芯片的普通 I/O 口下降沿中断和上升沿中断暂时不要使用
🔰由于手上只有
STC32G12K128-Beta版本的,实际测试了低电平 I/O 口中断是有效的,在配置成高电平中断代码模式下,也只能通过低电平才能响应中断,在引脚引入高电平(3.3V或5V)都没有反映。其他两种触发模式未作验证。
🌼 I/O 口中断相关寄存器

🌻端口中断使能寄存器(PxINTE)

- PnINTE.x:端口中断使能控制位(n=07,x=07)
0:关闭 Pn.x 口中断功能
1:使能 Pn.x 口中断功能
📓端口中断标志寄存器(PxINTF)

- PnINTF.x:端口中断请求标志位(n=0~ 7,x=0~7)
0:Pn.x 口没有中断请求
1:Pn.x 口有中断请求,若使能中断,则会进入中断服务程序。标志位需软件清 0。
📗端口中断模式配置寄存器(PxIM0,PxIM1)

- 配置端口的模式

✅端口中断优先级控制寄存器(PINIPL,PINIPH)

- PxIPH,PxIP:Px口中断优先级控制位
00:Px 口中断优先级为 0 级(最低级)
01:Px 口中断优先级为 1 级(较低级)
10:Px 口中断优先级为 2 级(较高级)
11:Px 口中断优先级为 3 级(最高级)
🍁端口中断掉电唤醒使能寄存器(PxWKUE)

- PnxWKUE:端口中断掉电唤醒使能控制位(n=07,x=07)
0:关闭 Pn.x 口中断掉电唤醒功能
1:使能 Pn.x 口中断掉电唤醒功能 - 🚩工程说明:

- 📑通用中断跳转汇编文件代码:
-
- ⚡根据选择不同端口中断,对应的入口地址不同,注意修改。
// ISR.ASM
//将下面的代码保存为 ISR.ASM,然后将文件加入到项目中即可
//CSEG AT 0143H ;P3 口中断入口地址
//CSEG AT 013BH ;P2 口中断入口地址
//CSEG AT 0133H ;P1 口中断入口地址
//CSEG AT 012BH ;P0 口中断入口地址
CSEG AT 013BH ;P2 口中断入口地址
JMP P0INT_ISR
P0INT_ISR:
JMP 006BH ;借用 13 号中断的入口地址
END
📝P0口下降沿中断示例
/*
P0 口下降沿中断
==注:STC32G12K128-Beta 版芯片的普通 I/O 口下降沿中断和上升沿中断暂时不要使用==
//测试工作频率为 11.0592MHz
*///#include "stc8h.h"
#include "stc32g.h" //头文件见下载软件
#include "intrins.h"
void main()
{EAXFR = 1; //使能访问 XFRCKCON = 0x00; //设置外部数据总线速度为最快WTST = 0x00; //设置程序代码等待参数,
//赋值为 0 可将 CPU 执行程序的速度设置为最快P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;P0IM0 = 0x00; //下降沿中断P0IM1 = 0x00;P0INTE = 0xff; //使能 P0 口中断EA = 1;while (1);
}
//由于中断向量大于 31,在 KEIL 中无法直接编译
//必须借用第 13 号中断入口地址
void common_isr() interrupt 13
{unsigned char intf;intf = P0INTF;if (intf){P0INTF = 0x00;if (intf & 0x01){
//P0.0 口中断}if (intf & 0x02){
//P0.1 口中断}if (intf & 0x04){
//P0.2 口中断}if (intf & 0x08){
//P0.3 口中断}if (intf & 0x10){
//P0.4 口中断}if (intf & 0x20){
//P0.5 口中断}if (intf & 0x40){
//P0.6 口中断}if (intf & 0x80){
//P0.7 口中断}}
}
📝P1 口上升沿中断示例代码:
/*P1 口上升沿中断
==注:STC32G12K128-Beta 版芯片的普通 I/O 口下降沿中断和上升沿中断暂时不要使用==
//测试工作频率为 11.0592MHz
*/
#include "stc32g.h" //头文件见下载软件
#include "intrins.h"
void main()
{EAXFR = 1; //使能访问 XFRCKCON = 0x00; //设置外部数据总线速度为最快WTST = 0x00; //设置程序代码等待参数,
//赋值为 0 可将 CPU 执行程序的速度设置为最快P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;P1IM0 = 0xff; //上升沿中断P1IM1 = 0x00;P1INTE = 0xff; //使能 P1 口中断EA = 1;while (1);
}
//由于中断向量大于 31,在 KEIL 中无法直接编译
//必须借用第 13 号中断入口地址
void common_isr() interrupt 13
{unsigned char intf;intf = P1INTF;if (intf){P1INTF = 0x00;if (intf & 0x01){
//P1.0 口中断}if (intf & 0x02){
//P1.1 口中断}if (intf & 0x04){
//P1.2 口中断}if (intf & 0x08){
//P1.3 口中断}if (intf & 0x10){
//P1.4 口中断}if (intf & 0x20){
//P1.5 口中断}if (intf & 0x40){
//P1.6 口中断}if (intf & 0x80){
//P1.7 口中断}}
}
📝P2 口低电平中断示例代码:
/*P2 口低电平中断==注:STC32G12K128-Beta 版芯片的普通 I/O 口下降沿中断和上升沿中断暂时不要使用==
//测试工作频率为 11.0592MHz
*/#include "stc32g.h" //头文件见下载软件
#include "intrins.h"
void main()
{EAXFR = 1; //使能访问 XFRCKCON = 0x00; //设置外部数据总线速度为最快WTST = 0x00; //设置程序代码等待参数,//赋值为 0 可将 CPU 执行程序的速度设置为最快P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;P2IM0 = 0x00; //低电平中断P2IM1 = 0xff;P2INTE = 0xff; //使能 P2 口中断EA = 1;while (1);
}//由于中断向量大于 31,在 KEIL 中无法直接编译
//必须借用第 13 号中断入口地址
void common_isr() interrupt 13
{unsigned char intf;intf = P2INTF;if (intf){P2INTF = 0x00;if (intf & 0x01){
//P2.0 口中断}if (intf & 0x02){
//P2.1 口中断}if (intf & 0x04){
//P2.2 口中断}if (intf & 0x08){
//P0.3 口中断}if (intf & 0x10){
//P2.4 口中断}if (intf & 0x20){
//P2.5 口中断}if (intf & 0x40){
//P2.6 口中断}if (intf & 0x80){
//P2.7 口中断}}
}
📝P3 口高电平中断示例代码:
/*P3 口高电平中断==注:STC32G12K128-Beta 版芯片的普通 I/O 口下降沿中断和上升沿中断暂时不要使用==
//测试工作频率为 11.0592MHz
*/
#include "stc32g.h" //头文件见下载软件
#include "intrins.h"
void main()
{EAXFR = 1; //使能访问 XFRCKCON = 0x00; //设置外部数据总线速度为最快WTST = 0x00; //设置程序代码等待参数,//赋值为 0 可将 CPU 执行程序的速度设置为最快P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;P3IM0 = 0xff; //高电平中断P3IM1 = 0xff;P3INTE = 0xff; //使能 P3 口中断EA = 1;while (1);
}
//由于中断向量大于 31,在 KEIL 中无法直接编译
//必须借用第 13 号中断入口地址
void common_isr() interrupt 13
{unsigned char intf;intf = P3INTF;if (intf){P3INTF = 0x00;if (intf & 0x01){
//P3.0 口中断}if (intf & 0x02){
//P3.1 口中断}if (intf & 0x04){
//P3.2 口中断}if (intf & 0x08){
//P3.3 口中断}if (intf & 0x10){
//P3.4 口中断}if (intf & 0x20){
//P3.5 口中断}if (intf & 0x40){
//P3.6 口中断}if (intf & 0x80){
//P3.7 口中断}}
}
📚工程源码
🚩注意根据选择不同的端口,在ISR.ASM文件中修改对应的中断入口地址。
复制这段内容后打开百度网盘手机App,操作更方便哦
链接: https://pan.baidu.com/s/118gpVK1m1OFgwMyP7Xi6bA
提取码: wv2r
相关文章:
STC32单片机 普通 I/O 口中断功能介绍和使用
STC32单片机 普通 I/O 口中断功能和使用✨STC32单片机普通 I/O 口中断,不是传统外部中断. 🔖手册上描述:STC32G 系列支持所有的 I/O 中断,且支持 4 种中断模式:下降沿中断、上升沿中断、低电平中断、高电平中断。每组 …...
计算机学生如何找到第一份实习?
作为一名计算机专业的学生,找到第一份实习是非常重要的一步,它不仅可以帮助你更好地了解行业,增加实践经验,还可以为即将到来的校招提供有力支持。计算机专业的校招,每年都在变得越来越卷。5年前,可能你只要…...
《Python机器学习》基础代码
1,要学习Python机器学习,第一步就是读入数据,这里我们以读入excel的数据为例,利用jupyter notebook来编码,具体教程看这个视频 推荐先上传到jupyter notebook,再用名字.xlsx来导入 Jupyter notebook导入Excel数据的两种方法介绍_哔哩哔哩_bilibili 2,…...
【前端】JS异步加载
文章目录为什么要异步加载如何实现异步加载参考为什么要异步加载 两个原因其实是一个意思。 原因1: JS是单线程的语言,它会同步的执行代码,从上往下执行 但是,一旦网络不好,或要加载的js文件过大的话,会…...
【MySQL】SQL语言的五个部分
DQL 数据查询语言(Data Query Language,DQL):DQL主要用于数据的查询,其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据。 DML 数据操作语言(Data Manipulation La…...
详细的IO面试题汇总
IO 流简介 IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在…...
在Linux终端管理你的密码!
大家好,我是良许。 现在是互联网时代,我们每天都要跟各种 APP 、网站打交道,而这些东西基本上都需要注册才可以使用。 但是账号一多,我们自己都经常记不清对应的密码了。有些小伙伴就一把梭,所有的账号密码都是一样。…...
【设计模式】策略模式在Java工程中应用
在之前的文章中,曾经给大家介绍过策略模式:【设计模式】策略模式,在该篇文章中,我们曾很清楚的说到,策略模式主要解决的问题是:在有多种算法相似的情况下,解决使用 if...else 所带来的复杂和难以…...
Linux驱动开发工程师需要掌握哪些技能?
一、前言 Linux驱动开发是一项高度技术性的工作,需要深厚的编程技能和对计算机硬件的深入理解。随着物联网、人工智能等领域的快速发展,Linux驱动开发工程师的需求日益增加。在这篇文章中,我将为您介绍一条Linux驱动开发工程师的学习路线&am…...
【人脸识别】FROM:提升遮挡状态下的人脸识别效果
论文题目:《End2End Occluded Face Recognition by Masking Corrupted Features》 论文地址:https://arxiv.org/pdf/2108.09468v3.pdf 代码地址:https://github.com/haibo-qiu/from 1.前言 人脸识别技术已经取得了显著的进展,主要…...
浏览器缓存
什么是缓存? 当第一次访问网站的时候,比如www.baidu.com,电脑会图片,文件等下载下来,当第二次访问网站的时候,网站就会直接被加载出来. 缓存的好处? 减轻服务器压力,减少请求的放松.提高性能,在本地打开资源肯定比在服务器上获取要快减少宽带的消耗,当我们使用缓存时,只会…...
【软考 系统架构设计师】论文范文③ 论数据访问层设计技术及其应用
>>回到总目录<< 文章目录 论数据访问层设计技术及其应用范文摘要正文论数据访问层设计技术及其应用 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清…...
802.11 MCS 的最低SNR分析
常常看到这样的表格: 那么这个SNR如何而来? 看看RSSI和SNR的关系,它们之间隔了一个noise floor。从表格看得出,这个底噪在-80~-90之间。 而SNR的核心,也有类似的原因,它和BER有关。...
用于C++的对象关系映射库—YB.ORM
1 介绍YB.ORM YB.ORM 旨在简化与关系数据库交互的 C 应用程序的开发。 对象关系映射器(ORM) 通过将数据库表映射到类并将表行映射到应用程序中的对象来工作,这种方法可能不是对每个数据库应用程序都是最佳的,但它被证明在需要复杂逻辑和事务处理的应用程…...
Cesium 100K数据加载 支持弹窗 动态更改位置
前言:今天总结关于point、label、billboard海量数据加载。后续会研究下大量model加载以及大bim(几百G上T)模型记载 海量点加载 弹窗 加载点位时,不加载弹窗。点击点位时在加载弹窗,及有效的减少加载量,优化性能。 const handler …...
MySQL管理表
在创建表时需要提前了解mysql里面的数据类型 常见的数据类型 创建表 创建表方式1: 格式: CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], ………...
【Java 面试合集】打印一个int整数的32位表示
打印一个int整数的32位表示 1. 概述 嗨,大家好【Java 面试合集】又来了,今天给大家分享的主题是打印一个int整数的32位表示. 2. 32位分析 2.1 为什么是32位呢 不知道看到这篇文章的各位是否都知道,一个int类型的表示方式就是32位呢&#x…...
这样在管理后台里实现 403 页面实在是太优雅了
前言403 页面通常表示无权限访问,与 404 页面代表着不同含义。而大部分管理后台框架仅提供了 404 页面的支持,但却忽略了对 403 页面的处理,有的框架虽然也有对 403 页面的处理,但处理效果却不尽人意。那怎么样的 403 页面才是即好…...
c++提高篇——STL常用算法
STL常用算法一、常用遍历算法一、for_each 遍历容器二、transform 搬运容器到另一个容器中二、常用查找算法一、find二、find_if三、adjacent_find四、binary_search五、count六、count_if三、常用排序算法一、sort二、random_shuffle三、 merage四、reverse四、常用拷贝和替换…...
Materials - DistanceField Nodes
以前的相关笔记,归档发布;距离场相关节点:DistanceToNearestSurface节点:求出传入的Position位置到最近的面的距离并输出,在没有Position输入的时候,默认值会直接使用World Position:Position的…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
