zigbee学习之路(四):按键控制(中断方式)
一.前言
通过上次的学习,我们学习了如何用按键控制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学习之路(四):按键控制(中断方式)的更多相关文章
- zigbee学习之路(七):定时器3(中断方式)
一.前言 上次我们学习了了用定时器3进行查询方式来进行溢出判断,今天我们来换一种方式,用中断方式来检测和查询定时器3的溢出. 二.原理与分析 要使用定时器3,我们必须先要配置的是T3CTL,来把定时器 ...
- zigbee学习之路(三):按键的控制
一.前言 通过前一次的实验,相信大家都已经对cc2530程序的编写有了一定的认识,这次我们来操作和实验的是cc2530上的按键模块. 二.原理分析 我们先来看一下按键的原理图: 根据原理图我们可以得出 ...
- zigbee学习之路(八):定时器1(中断)
一.前言 通过上次的实验,我们已经学会了定时器3的中断方式,这次,我们来看看定时器1通过中断怎么控制. 二.原理分析 定时器1的初始化跟前面提到的一样,也是要配置寄存器T1CTL,还要进行开中断的操作 ...
- zigbee学习之路(五):定时器1(查询方式)
一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...
- zigbee学习之路(十五):基于协议栈的按键实验
一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- [SAM4N学习笔记]按键程序(中断方式)
一.准备工作: 将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...
- 嵌入式Linux驱动学习之路(十一)按键驱动-中断机制
轮询方式: 和led驱动不同的是在配置IO引脚的时候,把LED的输出引脚换成输入,在read函数中向外发送io的状态.必须由应用程序不断的来查询当前IO口的状态来判断. 中断方式: /* file n ...
- zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...
随机推荐
- js在输出时乱码
如果网页头是<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> ...
- oracle函数,查询,事务
函数包括:单行函数,多行函数(分组函数) 数值函数: --绝对值 select abs(-12.3) from dual; --向上取值 select ceil(5.3) from dual; --向 ...
- 转载:有关qsort的使用方法和注意事项
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , co ...
- 杭电ACM 1196
#include<stdio.h>int main(){ int num,j,k,s,f; int a[7]={0,0,0,0,0,0,0}; while(scanf("%d&q ...
- Android NDK开发之Jni调用Java对象
https://my.oschina.net/zhiweiofli/blog/114064 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instan ...
- c语言的输入输出函数
参考文章: http://blog.sina.com.cn/s/blog_784f40b80100psg9.html C语言输入输出函数分为两类: 1.格式化输入输出函数 2.非格式化输入输出 --- ...
- Android 网络通信框架Volley简介
1.1. Volley引入的背景在以前,我们可能面临如下很多麻烦的问题. 比如以前从网上下载图片的步骤可能是这样的流程: 在ListAdapter#getView()里开始图像的读取. 通过Async ...
- 孟加拉央行SWIFT攻击事件恶意木马分析(转)
第一章 分析概述 该恶意木马样本为运行于winodws平台上的PE文件(名称:evtdiag.exe).文件大小为64KB,编译时间是2016年2月5日. 经分析,该样本为定制的攻击SWIFT客户端程 ...
- AngularJS 实现简单购物车
使用AngularJS实现一个简单的购物车,主要感受强大的双向绑定和只关注对象不关注界面特性. 先看看界面: 点击+-操作和删除: 这些全部只需要操作数据源就行,不需要关注界面. 实现过程: 一.使用 ...
- 文件上传去除"Content-Disposition: form-data"
某个项目中为了统一处理文件上传业务,创建了一个FileUpload Handle,由于上传客户端用到各种技术,当时为了方便断点续传,就直接接收请求中的文件内容(可能是分片),所以处理的不是规范的htt ...