【Zigbee】基础篇(3) Zigbee使用外部中断点亮一个LED灯

大家好,我是皮皮猫吖!

每文一言:每天突破自己的记录,就是一位成功者!


本篇文章:

主要是学习Zigbee的中断使用。使用zigbee,通过外部中断方式来控制LED灯亮灭。

正文如下:

一、外部中断配置(P1_0作为输出口、P0_5作为输入口)

1)初始化P0_5口为普通IO、上拉输入状态(上一篇有详细配置讲解)
  //1. 初始化io口是普通口,呈上拉输入状态
  //P0_5作为普通io口0为普通io口
  P0SEL &= 0xdf;1101 1111
  //P0_5作为输入口,0为输入
  P0DIR &= 0xdf;1101 1111
  //设置P0为上拉模式, 设置P0_5这个io的模式,0为上拉或者下拉模式
  P0INP &= 0xdf;1101 1111
  //设置P0为上拉模式,设置P2INP的第六位为0
  P2INP &= 0xdf;   1101 1111
2)开启IO口组中断:

P0组—P2组的组开关分别为:IEN1的第五位、IEN2的第四位、IEN2的第一位

寄存器IENX(X=1时,选择第五位;X=2时,选择第一位或第四位)
开启外部中断0
关闭外部中断1
3) 开启组内对应的具体IO口中断
寄存器PXIEN(X可以是0、1、2)
开启具体I/O口外部中断1
关闭具体I/O口外部中断0
4)设置开启了中断的输入引脚是上升沿方式触发,还是下降沿方式触发

PICTL寄存器:负责控制外部中断触发方式【上升沿触发 / 下降沿触发】

D7D6D5D4D3D2D1D0
I/O驱动未用未用未用P2_0-P2_4P1_4-P1_7P1_0-P1_3P0_0-P0_7
5)开启CPU总中断:EA=1
6)中断函数处理:

① 判断具体的中断源,判断PXIFG的哪一位发生中断?

② 中断标志位清零:PXIFG(X可以是0、1、2)

③ 组中断标志位清零:PXIF(X可以是0、1、2)

二、练习:当P0_5端口检测到低电平时,P1_0控制的LED灯发生亮灭交替操作

#include iocc2530.h

void delay(){
 for(int i = 0; i  1000; i++)
   for(int j = 0; j  30; j++);
  
}
void main(){
  
  //设置一个io口为中断的步骤
  
  
  //1. 初始化io口是普通口,呈上拉输入状态
  //P0_5作为普通io口0为普通io口
  P0SEL &= 0xdf;1101 1111
  //P0_5作为输入口,0为输入
  P0DIR &= 0xdf;1101 1111
  //设置P0为上拉模式, 设置P0_5这个io的模式,0为上拉或者下拉模式
  P0INP &= 0xdf;1101 1111
  //设置P0为上拉模式,设置P2INP的第六位为0
  P2INP &= 0xdf;   1101 1111
  
 // 2. 总中断设置为1
  EA = 1;
  
  //3. 组内寄存器打开:1
 // 只有P1IE是可以这么使用的,P1IE所在的寄存器的地址是0x9a,不能整除80
  //设置P1IE的时候,需要设置P1IE所在的寄存器IEN2的第四位 IEN2 = 0x10 0001 0000
  //IEN2的第四位表示的就是P1IE
 P0IE = 1;
  
  //4. 组内具体的位寄存器打开:1
  P0IEN = 0x20;0010 0000
  
 // 5. 下降沿触发
  //P0这一组配置为下降沿触发
  PICTL = 0x01; 0000 0001
    
  P1DIR = 0x01;//配置P1_1为普通io输出
  while(1);
    
}

//总中断函数
//PXIFG和PXIF是中断标志位 
#pragma vector=P0INT_VECTOR
__interrupt void f(){
  
  //判断是哪一位触发了中断
  //P0组的第五位触发了中断
  if(P0IFG & 0x20){
   delay(); //延迟一段时间,按键消抖
   if(0==P0_5){
    //如果P0_5仍然是低电平
     P1_0 ^= 1;  //a ^= b == a = a ^ b
   }
  }
  
  //已经触发中断,关闭中断判断位
  P0IFG = 0;
  //中断标志位重置为0,方便下次使用
  P0IF=0;
}


希望本篇文章对大家有所帮助,后续会继续分享Zigbee相关学习知识…

如果文章内容有错误的地方,请在留言处留下你的见解,方便大家共同学习。谢谢!

如有侵权或其他任何问题请联系:QQ1370922071,本文主要用于学习交流,转载请声明!

作者:皮皮猫吖


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值