TI CC2530基础实验(GPIO通用I/O中断操作——一个中断处理程序处理一个端口的多个中断)

有关CC2530的GPIO基本知识、普通GPIO操作有关寄存器的介绍、IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作——点亮led灯)

有关CC2530通用I/O中断操作的基础知识、相关寄存器介绍:TI CC2530基础实验(GPIO通用I/O中断操作——按键控制灯的亮灭)

电路原理图

程序

/**************************************
 * 基础实验只需要添加以下这个头文件即可
 *************************************/
#include <ioCC2530.h>

/***********************************
 * 程序描述:按一下按键亮一下灯
 **********************************/ 

#define LED1 P1_0
#define KEY1 P0_4
#define KEY2 P0_5

/***********************************
 * 函数描述:初始化LED1
 **********************************/
void LED1Init(void)
{
  P1SEL &= ~0x01;  //功能:普通I/O
  P1DIR |= 0x01;   //方向:输出
  LED1 = 1;        //使其属于灭状态
}

/***********************************
 * 函数描述:初始化按键S1
 **********************************/
void KEY1Init(void)
{
  //即使配置为外设I/O或通用输出的I/O引脚使能时都有中断产生,I/O默认为普通I/O、输出方向
  //P0SEL &= ~0x10;   //功能:普通I/O
  //P0DIR &= ~0x10;   //方向:输入/
  EA     = 1;       //开总中断
  IEN1  |= 0x20;    //允许PO口中断
  P0IEN |= 0x10;    //P0_4端口使能中断
  PICTL |= 0x01;    //下降沿触发
  P0IFG &= ~0x10;   //初始化中断标志位
}

/***********************************
 * 函数描述:初始化按键S2
 **********************************/
void KEY2Init(void)
{
  /*
  即使配置为外设I/O或通用输出的I/O引脚使能时都有中断产生,I/O默认为普通I/O、输出方向*/
  P0SEL &= ~0x20;   //功能:普通I/O
  P0DIR &= ~0x20;   //方向:输入

  EA     = 1;       //开总中断
  IEN1  |= 0x20;    //允许PO口中断

  P0IEN |= 0x20;    //P0_5端口使能中断
  PICTL |= 0x01;    //下降沿触发
  P0IFG &= ~0x20;   //初始化中断标志位
}

/***********************************
 * 函数描述:毫秒级延迟函数
 **********************************/
void Delayms(unsigned int ms)
{
  unsigned int i,j;
  for (i = ms; i > 0; i--)
  {
    for (j = 587; j > 0; j--);
  }
}

/***********************************
 * 函数描述:中断处理函数
 * 格式:#pragma vector = 中断向量  中断处理程序
 **********************************/
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
  Delayms(6);  //去除抖动
 if (0x10 == (P0IFG & 0x10))
  {
    if (0 == KEY1){
    LED1 = ~LED1;    //改变LED状态
    P0IFG &= ~0x10;  //清中断标志,清除中断状态标志,要在清除CPU端口中断标志(PnIF)之前清除
    }
  }

  if (0x20 == (P0IFG & 0x20))
  {
    if (0 == KEY2){
    LED1 = ~LED1;    //改变LED状态
    P0IFG &= ~0x20;  //清中断标志,清除中断状态标志,要在清除CPU端口中断标志(PnIF)之前清除
    }
  }
  P0IF = 0;        //清中断标志,清除整个端口
}

void main()
{
  LED1Init();
  KEY1Init();
  KEY2Init();

  for (;;);
}

注意:每创建一个新工程都要配置IAR(做基础实验),TI CC2530基础实验(普通GPIO操作——点亮led灯)也有IAR相关配置步骤

总结:

在中断处理程序中判断PnIFG寄存器哪一位为1,即对应的引脚产生中断。

时间: 2024-10-21 13:26:51

TI CC2530基础实验(GPIO通用I/O中断操作——一个中断处理程序处理一个端口的多个中断)的相关文章

TI CC2530基础实验(普通GPIO操作——按一下按键亮一下灯)

有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 电路原理图: 分析:需要按一下按键亮一下灯,并且不采用中断方式,即我们需要实时去监测按下是否被按下(P0_4为低电平表示按下,高电平表示松开). 设置: 灯LED1对应的P1_0引脚为普通I/O.方向为输出 按键S1对应的P0_4引脚为普通I/O.方向为输入 程序: /*****************

TI CC2530基础实验(定时器3中断方式——自由运行模式)

本实验实现通过CC2530的定时器3(8位)查询方式控制LED1以1S的周期性闪烁,此实验使用有关定时器3的2个寄存器T3CTL(定时器3控制寄存器),IEN1(中断使能1寄存器). 有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 原理图: 寄存器分析: 程序: #include <ioCC2530.h> /********************

TI CC2530基础实验(定时器1查询方式——自由运行模式)

本实验实现通过CC2530的定时器1(16位)查询方式控制LED1以1S的周期性闪烁,此实验使用的三个寄存器T1CTL(定时器1控制寄存器),T1STAT(定时器1状态寄存器),IRCON. 有关CC2530的GPIO基本知识.普通GPIO操作有关寄存器的介绍.IAR Embedded Workbench IDE软件使用:TI CC2530基础实验(普通GPIO操作--点亮led灯) 电路原理图: 寄存器分析: 1.定时器1控制寄存器 定时器1的T1CTL寄存器下的模式分析: [自由运行模式]:

CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)

目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. 程序代码 THE END 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 由上图可知,Zigbee模块的SW1按钮连接在P1.2端口上,当SW1导通,P1.2电平从3.3V被拉低接地.所以P1.2输入模式为下拉输入. 1.2 CC2530相关寄存器 寄存器名称 寄存器作用 寄存器描述 P

[ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭

1.CC2530的IO口概述 CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC.定时器或USART外设.这些I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现. I/O 端口具备如下重要特性:    ?? 21 个数字I/O 引脚 ?? 可以配置为通用I/O 或外部设备I/O ?? 输入口具备上拉或下拉能力 ?? 具有外部中断能力. 21 个I/O 引脚都可以用作于外部中断源输入口.因此如果需要外部设备可以产生中断.外部中断

[ZigBee] 4、ZigBee基础实验——中断

前言 上一篇介绍了CC2530的IO的基础知识,并用LED的控制来展示如何配置并控制GPIO的输出,用KEY状态的读取实验来展示如何读取GPIO的状态.从上一节的KEY状态读取的代码看出是采用轮训方式的,这种方式是很浪费资源,本节将介绍一种中断方式来替换轮训的方案. 一.中断 电路依然没变,若要使用CC2530的外部中断需要使用P0IEN.PICTL.P0IFG.INE1寄存器. 按键中断初始设置为: 1 /********************************************

[ZigBee] 6、ZigBee基础实验——定时器3和定时器4(8 位定时器)

上一节讲了16位定时器1,本节讲8位定时器3和定时器4! 1.综述 Timer 3 and Timer 4 are two 8-bit timers(8位定时器). Each timer has two independent capture/compare channels(独立的捕获/比较通道),each using one I/O pin per channel. Features: · Two capture/compare channels· Set, clear or toggle

[ZigBee] 5、ZigBee基础实验——图文与代码详解定时器1(16位定时器)(长文)

1.定时器1概述 定时器1 是一个支持典型的定时/计数功能的独立16 位定时器,支持输入捕获,输出比较和PWM等功能.定时器有五个独立的捕获/比较通道.每个通道定时器要使用一个I/O 引脚.定时器用于范围广泛的控制和测量应用,可用的五个通道的正计数/倒计数模式将允许诸如电机控制应用的实现. 定时器1 的功能如下: • 五个捕获/比较通道• 上升沿.下降沿或任何边沿的输入捕获• 设置.清除或切换输出比较• 自由运行.模或正计数/倒计数操作• 可被1,8,32 或128 整除的时钟分频器• 在每个捕

zigbee协议栈应用与组网(二):串口基础实验

资料里的实验都是已经做好了的,所以我下载了一个全新的ZStack-2.5.1a来做实验,按照步骤做,发现了很多问题. 第一步,配置串口. MT_UART.c中的MT_UartInit(); baudRate设置为115200(默认是38400),flowControl设置为FALSE. 第二步,预定义宏. MT_UartInit()后还有一小部分 1.2行根据预先定义的 ZTOOL或者ZAPP选择不同的数据处理函数. 后面的P1和P2则是串 口0和串口1.我们用ZTOOL,串口0.我们可以在op