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

cc2530按键中断实现控制LED

1开启中断的步骤

1-1使能端口组的中断

IEN1

IEN2 

实例

IEN2 |= 0x10  //使能P1口中断

1-2 端口中断屏蔽

P0IENP1IEN

P2IEN

实例

P1IEN |=0x10;  //使能P1_2口中断

1-3设置触发方式

PICTL

实例

PICTL |=0X02  ;//P1_3到P1_2口下降沿触发 

1-4设置中断优先级

必要时更改,一般不动

1-5开启总中断

IEN0

 

实例
EA = 1    //使能总中断

1-1-1  编辑中断函数

1)中断处理函数的编写格式中断服务处理的编写格式具体如下。
 

#pragma vector=<中断向量>

__interrupt void <函数名称> (void){

/*编写中断处理程序*/

}

在每一个中断处理函数之前,都要加上一行起始语句:

#pragma vector = <中断向量><中断向量>

表示接下来要写的中断处理函数是为哪个中断源进行服务的。

该语句有两种写法,比如为任务所需的P1口中断编写中断处理函数时:

#pragma vector =0x78    或    #pragma vector =P1INT_VECTOR

前者是将<中断向量>用具体的值表示,后者是将<中断向量>用单片机头文件中的宏定义表示。

要查看单片机头文件中有关中断向量的宏定义,可打开“ioCC2530.h”头文件,查找“Interrupt Vectors”部分,便可以看到18个中断源所对应的中断向量定义,如图所示。

 1-1-2进入中断后要清除中断标志

(一片)

 P0、P1P2口分别使用P0IF、P1IFP2IF作为中断标志位,任何一个端口组的I/O口产生外部中断时,会将对应端口组的外部中断标志位自动置位。

(具体哪一个)

P0IFG和P1IFG寄存器的描述 

P2IFG寄存器的描述 

2代码实例(按键控制led) 

#include "ioCC2530.h"

int a=0;

void delay(int n){
    int i,j;
    for(i=0;i<n;i++){
      for(j=0;j<240;j++){
        asm("NOP");
        asm("NOP");
        asm("NOP");
      }
    }
}

void main(void){
    P1SEL &=~ 0x07;  //(00000111)  设置为通用io
    P1DIR |= 0x03;//(0000 0011)    设置为输出

    P1DIR &=~ 0x04;//(0000 0100)   设置为输入

//中断时,不用写(此是按键的输入模式设置)
//    P1INP &=~ 0x04;//(0000 0100)   设置输入模式
//    P2INP &=~ 0x40;//(0100 0000)
    
    IEN2 |= 0x10;//(0001 0000)   io端口组开启中断
    P1IEN |=0x04;//(0000 0100)   使能具体的io口中断
    PICTL &=~ 0x02;//(0000 0010)  中断触发模式
    EA =1;                        //开启总中断
    
      while(1){
        if(a==1){
            P1_0=~P1_0;
            P1_1=~P1_1;
            delay(500);
        }else{
            a=0;
        }
      }
}

#pragma vector=P1INT_VECTOR
__interrupt void P1_int(void){
  if(P1IFG & 0x04){
      
      a++;
      P1IFG &=~ 0x04;//清理具体的中断标志为
      P1IF = 0;      //清理io端口的总中断
  }
}


http://www.kler.cn/news/305622.html

相关文章:

  • 【MySQL】MySQL索引与事务的透析——(超详解)
  • 情感识别系统源码分享
  • 【hot100-java】【搜索二维矩阵 II】
  • 如何应对突发的技术故障和危机?
  • Redis集群_主从复制
  • 每日学习一个数据结构-倒排表
  • Lua热更
  • 【在Linux世界中追寻伟大的One Piece】网络命令|验证UDP
  • Gitlab及Git使用说明
  • 05_Python数据类型_列表的相关运算
  • 日志收集工具 Fluentd vs Fluent Bit 的区别
  • 【SQL】百题计划:SQL最基本的判断和查询。
  • 实时(按帧)处理的低通滤波C语言实现
  • 3.js - 着色器设置点材质(螺旋星系特效)
  • 八股文知识汇总(常考)
  • java中的注解原理是什么?
  • 第十周:机器学习
  • 深度学习的关键数据结构——张量解释
  • [羊城杯 2020]Blackcat1
  • ThinkPHP8出租屋管理系统
  • 【高等数学学习记录】函数
  • RPC远程调用的序列化框架
  • 【python】OpenCV—Age and Gender Classification
  • Threejs合并模型动画(上)
  • quartz 搭配SQL Server时出现deadlock的解决方案
  • ClickHouse总结
  • 如何使用 Vue 3 的 Composition API
  • C++ | Leetcode C++题解之第406题根据身高重建队列
  • 阿里部分集团内部中间件简介
  • 【Elasticsearch系列四】ELK Stack