ZigBee快速入门——外部中断(Key)

news2024/11/18 0:19:25

外部中断

image.png
image.png
image.png
image.png
image.png
:::tips
理解三道锁:EA——IENx——PxIEN
EA-总开关
IENx-中断使能功能配置,可以配置程总线 IO中断(P0、P1、P2),也可以配置程定时器等中断
PxIEN-总线中具体某一位的中断允许,如刚刚已经配置了 IEN2 即开启了 P2 总线的中断,如果我们想要开启 P20 的中断,则需要将 P2IEN 赋值为 0000 0001,即令 P2IEN = 0x01;
:::

void InitKey(){
    //P01 io功能配置
    P0DIR |= 0xff-2;//1111 1101 // P01为输入
  	P0INP |= 0xff-2;//1111 1101 // P01为上拉或下拉状态
  	P2INP |= 0xff-32;//1101 1111// P01为上拉状态
    //中断三道锁,EA-IEN1-P0IEN
	EA = 1;//打开总中断
 	IEN1 |= 0x20; // 0010 0000 ,IEN1的第5位为端口0中断使能位,允许P0口中断
    P0IEN = 0x02;//由于按键是P01,所以将其配置成中断使能,即0000 0010
    PICTL |= 1;//下降沿触发中断
    P0IFG |= 0;//中断标志位初始化(清0)
}
#pragma vector = P0INT_VECTOR	//	前两行硬背下来
__interrupt void P0_ISR(void)	//	函数名自定义的,并且不用再开头声明了
{
  if(P0IFG & 0x02){	//中断标志位有值,说明中断信号产生
   P0IFG = 0;		//将信号置零
   Delay(100);
   if(P0IFG == 0){	//	P01
    //中断操作 
     D1LED();//D1状态切换
   }
   P0IFG = 0;
  }
}

//过按键 S1 产生外部中断改变 LED1\LED2\LED3 状态
#include <iocc2530.h>
void Delay(unsigned int tvalue);
void IoInit();
void D1LED();
void InteruptInit();
#define D1 P1_0;

void main(){
  IoInit();
  InteruptInit();
  while(1){
    
  }
  
}
void Delay(unsigned int tvalue){
 while(tvalue--); 
}
//初始化配置D1口为输出模式
void IoInit(){
  P1DIR = 0x01;
  P1_0 = 1;
}
//LED-D1控制程序
void D1LED(){
  P1_0 = !P1_0;//D1 ^= 1; 
}
//中断IO配置
void InteruptInit(){
  P0DIR |= 0xff-2;//1111 1101 // P01为输入
  P0INP |= 0xff-2;//1111 1101 // P01为上拉或下拉状态
  P2INP |= 0xff-32;//1101 1111// P01为上拉状态
  
  EA = 1;// 打开总中断
  IEN1 |= 0x20; // 0010 0000 ,IEN1的第5位为端口0中断使能位,允许P0口中断
  PICTL |= 0x02;//下降沿触发
  P0IFG |= 0x00;//初始化中断标志位
  P0IEN |= 0x02;//P01设置为中断方式
}

#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
  if(P0IFG & 0x02){
   P0IFG = 0;
   Delay(100);
   if(P0IFG == 0){
    //中断操作 
     D1LED();//D1状态切换
   }
   P0IFG = 0;
  }
}
#include <iocc2530.h>

void KeyInit();
void LedGPIOInit();
void Delay();
void main(){
 
  LedGPIOInit();//LED-P11初始化
  KeyInit();
  while(1){
  }
}

void LedGPIOInit(){
  P1SEL |= 0xff-2;//P11设定为通用IO模式 1111 1101
  P1DIR |= 0x02;//P11设定为输出模式 0000 0010;
  P1_1 = 1;//默认熄灭
}

void KeyInit(){
  //P20的IO配置
  P2SEL |= 0xff-1;//P20设定为通用IO模式 1111 1110
  P2DIR |= 0x00;//P20设定为输入模式 0000 0000
  P2INP |= 0x80;//P2上拉状态 1000 0000
  //
  EA = 1;//打开总中断
  IEN2 = 0x02;//端口2中断使能,0中断禁止,1中断使能 ~~~~~~~~~~~~~~~~~~~~~~~~~
  P2IEN = 0x01;//由于按键是P20,所以将其配置成中断使能,即0000 0001
  PICTL |= 1;//下降沿触发
  P2IFG |= 0;//中断标志位初始化(清0)
}

#pragma vector = P2INT_VECTOR
__interrupt void P2_ISR(void){
  if(P2IFG & 0x01){//检测P20的中断标志位是否为1,所以要将其与0000 0001作与运算
    P2IFG = 0;//中断标志位清空
    Delay();//相当于按键消抖
    if(P2IFG == 0){
      //相当于按键消抖  
      P1_1 = !P1_1;
    }
    P2IFG = 0;
  }
  
}

void Delay(){
  unsigned int tmp = 100;
  while(tmp--);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3项目部署到服务器,刚打开没事,一刷新页面就404

vue3项目部署到服务器&#xff0c;刚打开没事&#xff0c;一刷新页面就404 vue3项目&#xff0c;在本地调试时各方面都没毛病&#xff0c;刷新也没毛病&#xff0c;但是&#xff0c;扔到服务器上&#xff0c;第一次打开是正常的&#xff0c;再刷新下就404了&#xff0c;不知道什…

软件测评中心▏性能测试之压力测试、负载测试的区别和联系简析

在如今的信息时代&#xff0c;软件已经成为人们日常工作和生活不可或缺的一部分。然而&#xff0c;随着软件的发展和应用范围的不断扩大&#xff0c;软件性能的优劣也成为了影响用户使用体验的重要因素。 软件性能测试即对软件在不同条件下的性能进行评估和验证的过程。通过模…

《MCtalk·CEO对话》正式上线!首期对话高成资本

2015 年 10 月&#xff0c;网易智企发布第一款产品&#xff0c;正式踏上了 ToB 商业化之路。从那以后&#xff0c;我们每年举办不同主题的科技峰会&#xff0c;分享最新的行业体感和洞察&#xff1b;访谈各界企业领导者&#xff0c;记录他们的创新与创业经历&#xff1b;走过大…

黑帽SEO简介

什么是黑帽 SEO&#xff1f; 黑帽SEO是一种违反搜索引擎指南的做法&#xff0c;用于使网站在搜索结果中排名更高。这些不道德的策略并不能解决搜索者的问题&#xff0c;并且通常以搜索引擎的惩罚而告终。黑帽技术包括关键字填充、伪装和使用专用链接网络。 出现在搜索结果中对…

确定性网络技术怎样实现网络的可靠性?

确定性网络技术通过采用特定的协议、机制和策略&#xff0c;有助于提高网络的可靠性。本文通过一些关键的方面&#xff0c;来说明确定性网络技术如何实现这一目标。 时钟同步机制 时钟同步机制是确定性网络中的核心角色。为了实现高度可靠的通信&#xff0c;需要采用先进的时钟…

如何进行有竞争力的SEO审计以超越行业竞争对手

许多营销人员都有兴趣密切关注竞争对手的搜索引擎优化 &#xff08;SEO&#xff09;。这是有道理的——无论你是刚开始做SEO&#xff0c;还是已经做了一段时间&#xff0c;你都希望对搜索引擎结果页面&#xff08;SERP&#xff09;的竞争格局有一个清晰的认识&#xff0c;这样你…

构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的MySQL8.0.32的RPM包

本文适用&#xff1a;rhel9系列&#xff0c;或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期&#xff1a;2023年 因系统版本不同&#xff0c;构建部署应略有差异&#xff0c;但本文未做细分&#xff0c;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

2024年软件测试面试八股文【含答案】

Part1 1、你的测试职业发展是什么&#xff1f;【文末有面试文档免费领取】 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做…

SpringBoot3.X源码分析(启动流程)

SpringBootApplication(scanBasePackages {"com.javaedge.base"} ) public class BaseApplication {public BaseApplication() {}public static void main(String[] args) {SpringApplication.run(BaseApplication.class, args);} } 1 启动入口 静态辅助类&#x…

博弈类问题

巴什博弈(Bash Game) String bashGame2(int n, int m) {return n % (m 1) ! 0 ? "先手" : "后手";} #include<iostream> #include<string> using namespace std;string compute(int n) {return n % 6 ! 0 ? "October wins!" : &q…

iOS开发进阶(六):Xcode14 使用信号量造成线程优先级反转问题修复

文章目录 一、前言二、关于线程优先级反转三、优先级反转会造成什么后果四、怎么避免线程优先级反转五、使用信号量可能会造成线程优先级反转&#xff0c;且无法避免六、延伸阅读&#xff1a;iOS | Xcode中快速打开终端6.1 .sh绑定6.2 执行 pod install 脚本 七、延伸阅读&…

adrv9009使用记录

这里写自定义目录标题 1.首先下载cygwin&#xff0c;CSDN可以直接搜索&#xff0c;按照对应的安装就可以&#xff0c;最后记得加一个make安装包&#xff0c;不然在make时候会导致指令不存在 2.下载完成之后&#xff0c;去adi-github官网找到对应版本的adrv9009工程 https://git…

为什么要进行漏洞扫描工作

随着互联网的普及和信息技术的飞速发展&#xff0c;网络安全问题愈发引人关注。其中&#xff0c;漏洞扫描作为保障网络安全的重要手段&#xff0c;受到了广泛的关注和应用。本文将详细介绍漏洞扫描的概念、效果、使用场景等&#xff0c;以期为读者提供有关漏洞扫描的全面了解。…

PPT自动化处理

python-pptx模块 可以创建、修改PPT(.pptx)文件非Python标准模块&#xff0c;需要单独安装 在线安装方式 pip install python-pptx 读取slide幻灯片 .slides 获取shape形状 slide.shapes 判断一个shape中是否存在文字 shape.has_text_frame 获取文字框 shape.text_f…

查看磁盘里的大文件

查看磁盘里的大文件 在PowerShell中 命令1&#xff1a; gci -r| sort -descending -property length | select -first 10 name, length 命令2&#xff1a; Get-ChildItem -Path C:\ -Recurse | Where-Object { $_.Length -gt 1GB } | Sort-Object -Property Length -Descendin…

微服务自动化docker-compose

一、docker-compose介绍 Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如&#xff0c;一个使用Docker容器的微服务项目&#xff0c;通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢&#xff0c;一个个手动启动&#xff1f;假如有上百个微服…

Docker进阶数据卷目录挂载及在线部署

前言 为了很好的实现数据保存和数据共享&#xff0c; Docker 提出了 Volume 这个概念&#xff0c;简单的说就是绕过默认的联合 文件系统&#xff0c;而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷 一. 数据卷介绍 Docker 中的数据卷&#xff08;Volume&#x…

这是一款户外可充电多功能LED地摊灯 手电筒方案

1,信息来源&#xff1a;深圳市世微半导体有限公司 Augus 2,产品的特性有&#xff1a; 全集成单芯片控制 5 照明循环模式可选 0.5A/1A 固定充电电流可选 内置 MOS 1.8A 驱动电流 可外置 MOS 驱动更大电流 充电指示/低电提示/短路提示 3A 手电筒过流保护? 预设 4.22V 电…

【一文搞懂JVM的内存屏障】

要命的问题&#xff1a; 什么是线程的安全性&#xff1f;怎么保证&#xff1f;jvm什么是的内存屏障&#xff1f;他有什么作用&#xff1f; **线程的安全性是指&#xff1a;**指在多线程环境下&#xff0c;多个线程同时访问同一资源时不会产生意外结果或导致数据出错的状态。其…

贝叶斯优化的基本流程

贝叶斯优化的基本流程 假设已知一个函数&#x1d453;(&#x1d465;)的表达式以及其自变量&#x1d465;的定义域&#xff0c;现在&#xff0c;我们希望求解出&#x1d465;的取值范围上&#x1d453;(&#x1d465;)的最小值&#xff0c;你打算如何求解这个最小值呢&#xf…