当前位置: 首页 > news >正文

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) 通过将数据库表映射到类并将表行映射到应用程序中的对象来工作&#xff0c;这种方法可能不是对每个数据库应用程序都是最佳的&#xff0c;但它被证明在需要复杂逻辑和事务处理的应用程…...

Cesium 100K数据加载 支持弹窗 动态更改位置

前言&#xff1a;今天总结关于point、label、billboard海量数据加载。后续会研究下大量model加载以及大bim(几百G上T)模型记载 海量点加载 弹窗 加载点位时&#xff0c;不加载弹窗。点击点位时在加载弹窗&#xff0c;及有效的减少加载量&#xff0c;优化性能。 const handler …...

MySQL管理表

在创建表时需要提前了解mysql里面的数据类型 常见的数据类型 创建表 创建表方式1&#xff1a; 格式&#xff1a; CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], ………...

【Java 面试合集】打印一个int整数的32位表示

打印一个int整数的32位表示 1. 概述 嗨&#xff0c;大家好【Java 面试合集】又来了&#xff0c;今天给大家分享的主题是打印一个int整数的32位表示. 2. 32位分析 2.1 为什么是32位呢 不知道看到这篇文章的各位是否都知道&#xff0c;一个int类型的表示方式就是32位呢&#x…...

这样在管理后台里实现 403 页面实在是太优雅了

前言403 页面通常表示无权限访问&#xff0c;与 404 页面代表着不同含义。而大部分管理后台框架仅提供了 404 页面的支持&#xff0c;但却忽略了对 403 页面的处理&#xff0c;有的框架虽然也有对 403 页面的处理&#xff0c;但处理效果却不尽人意。那怎么样的 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

以前的相关笔记&#xff0c;归档发布&#xff1b;距离场相关节点&#xff1a;DistanceToNearestSurface节点&#xff1a;求出传入的Position位置到最近的面的距离并输出&#xff0c;在没有Position输入的时候&#xff0c;默认值会直接使用World Position&#xff1a;Position的…...

【ARMv8 编程】ARMv8 指令集介绍

ARMv8 架构中引入的最重要的变化之一是增加了 64 位指令集。该指令集补充了现有的 32 位指令集架构。这种增加提供了对 64 位宽整数寄存器和数据操作的访问&#xff0c;以及使用 64 位长度的内存指针的能力。新指令被称为 A64&#xff0c;以 AArch64 执行状态执行。ARMv8 还包括…...

大数据之Phoenix基本介绍

文章目录前言一、Phoenix简介二、Phoenix入门&#xff08;一&#xff09;创建表语法&#xff08;二&#xff09;查看表信息&#xff08;三&#xff09;删除表&#xff08;四&#xff09;大小写问题前言 #博学谷IT学习技术支持# 上篇文章介绍了Phoenix环境搭建&#xff0c;点击…...

算法leetcode|38. 外观数列(多语言实现)

文章目录38. 外观数列&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;rustgocpythonjava38. 外观数列&#xff1a; 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字…...

异步交互的关键——Ajax

文章目录1,Ajax 概述1.1 作用1.2 同步和异步1.3 案例1.3.1 分析1.3.2 后端实现1.3.3 前端实现2&#xff0c;axios2.1 基本使用2.2 快速入门2.2.1 后端实现2.2.2 前端实现2.3 请求方法别名最后说一句1,Ajax 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 Jav…...

Android自定义View实现打钩签到动画

效果图实现原理我们看实现的动画效果&#xff0c;其实是分为1. 绘制未选中状态图形&#xff08;圆弧和对号&#xff09;2. 绘制选中状态圆弧的旋转的动画3. 绘制选中状态圆弧向中心收缩铺满动画4. 绘制选中状态对号5. 绘制选中状态下圆的放大回弹动画6. 暴露接口接口回调传递选…...

python+pytest接口自动化(3)-接口测试一般流程及方法

首先我们要明确&#xff0c;通常所接口测试其实就属于功能测试&#xff0c;主要校验接口是否实现预定的功能&#xff0c;虽然有些情况下可能还需要对接口进行性能测试、安全性测试。在学习接口自动化测试之前&#xff0c;我们先来了解手工接口测试怎样进行。URL组成为了更好的理…...

《MySQL学习》 表中随机取记录的方式

一.初始化测试表 创建表 words CREATE TABLE words ( id int(11) NOT NULL AUTO_INCREMENT, word varchar(64) DEFAULT NULL, PRIMARY KEY (id)) ENGINEInnoDB;插入测试数据 create procedure idata()begin declare i int; set i 0; while i<10000 do insert into words…...

功率信号源有什么作用和功能呢

功率信号源是指集信号发生器与功率放大器为一体的电子测量仪器&#xff0c;它具有高电压、大功率的特点&#xff0c;在电子实验室中能够帮助用来驱动压电陶瓷、换能器以及电磁线圈等&#xff0c;可以有效的帮助电子工程师解决驱动负载和放大功率的问题。功率信号源和功率放大器…...

一些cmake error fixed

建完虚拟环境后 运行 pip install . 出现报错&#xff0c;显示svox2安装出错&#xff0c;然后开始进入到svox2中进行手动编译和安装。 1. cmake svox2/csrc pybind11找不到 conda install pybind11用 pip install 在虚拟环境中安装不行&#xff0c;据说会安装到全局下… 2. c…...

CentOS 7安装Docker并使用tomcat测试

文章目录环境准备Docker安装安装tomcat环境准备 CentOS 7以上版本linux内核版本需要在3.10以上&#xff0c;可通过uname -r 查看系统内核。 Docker安装 检查docker安装源 yum list docker yum安装docker &#xff1a; yum install docker.x86_64 启动 docker &#xff1a; s…...

临沂网站推广goldball/河源市企业网站seo价格

对于一些数据我们需要进行加密&#xff0c;下面介绍加密的一种方法 前端vue对密码进行加密 import CryptoJS from crypto-js// 默认的 KEY 与 iv 如果没有给 const KEY CryptoJS.enc.Utf8.parse("1234567890123456"); const IV CryptoJS.enc.Utf8.parse(1234567890…...

apmserv wordpress/微商怎样让客源主动加你

在app拉新促活上&#xff0c;相信没什么方式比补贴更加有效。不妨想象一下&#xff1a;经过多日的冥思苦想&#xff0c;你终于完成了一个确信用户会满意的方案。你甚至能看到用户得到实惠后满意的笑容&#xff0c;还有老板看到用户新增和活跃数据飙升时欣慰的神情。你不知道的是…...

wordpress添加标签云/做百度网站一年多少钱

中新经纬客户端11月4日电 4日晚间&#xff0c;网易严选官方微博发文称&#xff0c;“网易严选退出双十一大战。”截图来源&#xff1a;新浪微博网易严选网易严选表示&#xff0c;我们要退出的是这个鼓吹过度消费、为销售数字狂欢的双十一。网易严选称&#xff0c;今年双十一&am…...

皮具 东莞网站建设/西安网是科技发展有限公司

1 当在单元格中输入的数字大于15位时&#xff0c;excel自动对数值进行截断处理。这是可以将单元格格式设置为文本格式。其步骤为右键单击单元格选择‘设置单元格格式,选择数字选项中的‘文本’&#xff0c;然后点击‘确定’即可。转载于:https://blog.51cto.com/rista/987496...

深圳广东网站建设套餐/郑州网站优化排名

01 listPython内置的一种数据类型是列表&#xff1a;list。list是一种有序的集合&#xff0c;可以随时添加和删除其中的元素。比如&#xff0c;列出班里所有同学的名字&#xff0c;就可以用一个list表示&#xff1a;classmates [Michael, Bob, Tracy]print(classmates)变量cla…...

做专业课视频课的网站/互联网营销的十五种方式

如何使用 调用头文件<algorithm>中的make_heap函数是某容器内元素堆化&#xff0c;默认使用的比较函数是less<T>()&#xff0c;默认生成大根堆。 若在第三个参数指定比较函数即可以生成不同的堆&#xff0c;对使用great<T>()可以生成小根堆 代码 #include…...