一.前言

通过上次的学习,我们学习了如何用按键控制led,但是在实际应用中,这种查询方式占用了cpu的时间,如果通过中断控制就可以解决这个问题,我们今天就来学习按键控制的中断方式。

二.原理分析

传统的51单片机如果要使用中断,也要对相应的寄存器进行控制,cc2530芯片也不例外,而且相对复杂。需要配置多个中断寄存器,下面来一一介绍。

这个寄存器是来控制端口0中断使能的,要开启中断,应设为1.

这个是配置各种中断使能的,我们只需要配置P0IE.

这个是配置中断触发方式的,根据上次的按键原理图,我们应该选择低下降沿触发模式。

中断状态标志位,当中断没有发生或者结束时,应将标志位置0.

三.程序代码

#include <ioCC2530.h>

#define uint unsigned int

#define uchar unsigned char

#define LED1 P1_0      //LED1为P1_0端口控制

#define LED2 P1_1      //LED2为P1_1端口控制

#define LED3 P1_4      //LED3为P1_4端口控制

//函数声明 void Delayms(uint);

//延时函数 void InitLed(void);

//LED_IO初始化 void KeyInit(void);

//KEY_IO初始化

/************** 函 数 名  : Delayms  功能描述  : 毫秒延时  输入参数  : xms:延时时间,如 i=xms 即延时i毫秒  输出参数  : none  返 回 值  : none **/

void Delayms(uint xms)

{     uint i,j;

for(i=xms;i>0;i--)

for(j=587;j>0;j--);

}

/******************* 函 数 名  : InitLed  功能描述  : LED_IO初始化  输入参数  : none  输出参数  : none  返 回 值  : none *********************************/

void InitLed(void)

{     P1DIR |= 0xff;       //P1端口定义为输出

LED1 = 1;            //LED1灯熄灭

LED2 = 1;            //LED2灯熄灭

LED3 = 1;            //LED3灯熄灭 }

/*********************  函 数 名  : InitKey  功能描述  : KEY_IO初始化(中断方式配置)  输入参数  : none  输出参数  : none  返 回 值  : none ******************/

void InitKey(void)

{     P0IEN |= 0x10;  //设置P0_4为中断方式

IEN1 |= 0x20;   //允许P0口中断

PICTL |= 0x01;  //下降沿触发

P0IFG = 0x00;   //清中断标志位

EA = 1;         //开总中断 }

/**************  函 数 名  : P0_ISR  功能描述  : 中断处理函数  输入参数  : none  输出参数  : none  返 回 值  : none ***********/

#pragma vector = P0INT_VECTOR         //格式:#pragma vector = 中断向量

__interrupt void P0_ISR(void)     //接着是中断处理程序(函数名可以任意取)

{     LED1=~LED1;      //改变LED状态

LED2=~LED2;

LED3=~LED3;

P0IFG = 0;       //清中断标志

P0IF = 0; }

/******************* 函 数 名  : main  功能描述  : KEY测试(通用IO中断的使用)  输入参数  : NONE   输出参数  : NONE  返 回 值  : NONE ************/

void main(void)

{     InitLed();  //调用初始化函数

InitKey();

while(1);     }

四.总结

led的控制函数和之前一样,大家要注意中断函数的定义,这是一种定义中断的格式,还有一定要使POIF=0,用来清除标志位,这样中断才能发生,还有大家学会用模块化的思想去写程序。

zigbee学习之路(四):按键控制(中断方式)的更多相关文章

  1. zigbee学习之路(七):定时器3(中断方式)

    一.前言 上次我们学习了了用定时器3进行查询方式来进行溢出判断,今天我们来换一种方式,用中断方式来检测和查询定时器3的溢出. 二.原理与分析 要使用定时器3,我们必须先要配置的是T3CTL,来把定时器 ...

  2. zigbee学习之路(三):按键的控制

    一.前言 通过前一次的实验,相信大家都已经对cc2530程序的编写有了一定的认识,这次我们来操作和实验的是cc2530上的按键模块. 二.原理分析 我们先来看一下按键的原理图: 根据原理图我们可以得出 ...

  3. zigbee学习之路(八):定时器1(中断)

    一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...

  4. zigbee学习之路(五):定时器1(查询方式)

    一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...

  5. zigbee学习之路(十五):基于协议栈的按键实验

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  6. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  7. [SAM4N学习笔记]按键程序(中断方式)

    一.准备工作:      将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...

  8. 嵌入式Linux驱动学习之路(十一)按键驱动-中断机制

    轮询方式: 和led驱动不同的是在配置IO引脚的时候,把LED的输出引脚换成输入,在read函数中向外发送io的状态.必须由应用程序不断的来查询当前IO口的状态来判断. 中断方式: /* file n ...

  9. zigbee学习之路(十四):基于协议栈的无线数据传输

    一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...

随机推荐

  1. windows用户用VMware 虚拟机安装黑苹果Mac.OS.X操作系统

    使用的操作系统操作系统 windows7 SP1 X64 本教程所用 的软件的下载地址都在本教程中 ) 电脑内存低于 4G 的,加内存吧 … 1. SecurAble (检测你的 CPU 是否支持硬件 ...

  2. Java Web项目_部门内部留言板

    t_user用户登录数据表 用户登录界面 JSP开发 通过post请求提交给Servlet处理 Servlet处理连接数据库的处理 登陆成功服务器跳转RequestDispatcher到main.js ...

  3. javascript:正则大全

    :replace函数,为写自己的js模板做准备 待完善 function 1,声明&用法 //数组: var arr=[];//字面量 var arr=new Array();//构造函数 / ...

  4. lr并发量和迭代的区别

    1.并发量 并发量也就是同时运行的量.比如100个用户同时登录,那么并发量就是100.当然这100个用户可以进行参数化,也可以采用设置虚拟用户数(vuser). 2.迭代 迭代就是单个用户运行的次数. ...

  5. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  6. 一步一步来做WebQQ机器人-(三)(登录QQ并保持在线)

    × 本篇的目的是让你的QQ真正的上线:挤下你的PCQQ,和让好友状态栏显示webqq在线 目前总进度大概50% 全系列预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在 ...

  7. bat批处理完成jdk tomcat的安装

    在完成一个web应用项目后,领导要求做一个配置用的批处理文件,能够自动完成jdk的安装,tomcat的安装,web应用的部署,环境变量的注册,tomcat服务的安装和自动启动 参考了网上很多的类似的批 ...

  8. ionic2安装时报错

    Installing npm packages...Error with start undefinedError Initializing app: There was an error with ...

  9. python Shapely 使用指南

    翻译:http://toblerity.org/shapely/manual.html 引入包 from shapely.geometry import Point from shapely.geom ...

  10. cocos2dx 3.x(屏幕截图的两种方法)

    [RenderTexture] RenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片. 屏幕截图主要步骤: > 开始截图:render->begin(); >  ...