5.2 SW1控制LED1亮灭(中断功能)
中断:CPU收到中断请求后暂停正在执行的程序,而去执行中断服务函数中的程序,处理结束后,继续执行原来的程序。
能够产生中断请求的中断源如下:

CC2530中断设置步骤:使能端口组中断(IEN)——端口组中具体端口中断使能/禁止(PxIEN)——设置中断触发方式PICTL——使能系统总中断(EA)
下文按此思路展开:
1、使能端口组中断
IEN2|=0x10; //10000,设置IEN2的第4位,使能P1端口组中断
2、使能具体端口中断
P1IEN|=0x04; //0100,P1_2口中断
3、设置中断触发方式
PICTL|=0x02; //P_3到P1_1下降沿触发中断,SW1按下,电平由高变低
4、使能总中断
EA=1;
要想使用中断功能,必须使能中断总开关EA,并且使能各个中断源的自身控制开关IEN。
具体寄存器详情如下:




中断服务函数格式:以P1为例。函数体不能带有参数,也不能有返回值
#pragma vector=P1INT_VECTOR
__interrupt void P1_INT(void) //注意,interrupt前是两个_
{
/*处理程序*/
}
中断向量名如下:可查看ioCC2530.h头文件内容

中断标志位:中断源很多,需要识别触发中断的中断源。
P0、P1、P2端口组的中断标志位分别是P0IF、P1IF、P2IF。
P1_2连接着SW1按键,按键按下P1IF值变为1,CPU就去执行P1的中断服务函数。标志位不能自动复位,需要手动清除该中断标志位。
P1IF=0; //清除P1端口组中断标志位
具体是P1中哪一个针脚引起的中断,可以通过PxIFG寄存器的值来判断。当然也需要手动清除具体的针脚标志位(在中断服务函数中)。
P1IFG&0x04 //判断P1_2的中断标志位是否为1
P1IFG &=~ 0x04; //清除P1_2的中断标志位
清除过程,先小再大。即先关局部再关总闸。
#include "ioCC2530.h" #define LED1 P1_0 /*==================端口初始化函数=====================*/
void Init_Port()
{
//将P1_0设置为通用I/O端口功能
P1SEL &= ~0x01;
//将P1_0的端口传输方式设置为输出
P1DIR |= 0x01;
LED1 = ;
}
/*===============外部中断初始化函数==================*/
void Init_INTP()
{
IEN2 |= 0x10; //端口1中断使能
P1IEN |= 0x04; //端口P1_2外部中断使能
PICTL |= 0x02; //端口P1_0到P1_3下降沿触发
EA = ; //使能总中断
}
/*================外部中断1服务函数====================*/
#pragma vector = P1INT_VECTOR //外部中断1的向量入口
__interrupt void Int1_Sevice()
{
LED1 = ~LED1;
/*先清除引脚标志位,再清除端口组标志位,否则会一直进入中断*/
P1IFG &= ~ 0x04; //清除P1_2引脚的标志位
P1IF = ; //清除P1端口组的标志位
}
/*====================主函数==========================*/
void main()
{
Init_Port(); //初始化通用I/O端口
Init_INTP(); //初始化外部中断
}
5.2 SW1控制LED1亮灭(中断功能)的更多相关文章
- 5.1、按键SW1控制LED1亮灭
从图中可以看出,P1_2引脚可以感知SW1的状态,SW1未按下P1_2=1高电平,按下后P1_2=0接地. 注意:P1_2引脚只是感知SW1,不影响SW1. #include "ioCC25 ...
- [ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭
1.CC2530的IO口概述 CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC.定时器或USART外设.这些I/O 口的用途可以通过一系列 ...
- 21-ESP8266 SDK开发基础入门篇--C# TCP客户端 , 控制LED亮灭
https://www.cnblogs.com/yangfengwu/p/11192603.html 由于是台式机,,没有插无线网卡...所以呢我就用调试助手监控下数据 后期让WIFI连接路由器的时候 ...
- 单片机与android手机通信(控制LED小灯亮灭)
1.单片机实验板功能设计 为验证数据通信内容,让单片机板上的四个按键与android手机客户端上的四个LED灯相互控制:为达到上述基本实验要求,采用单字符传输数据即可,硬件需设计两块相同的单片机电路板 ...
- PIC12F629帮我用C语言写个程序,控制三个LED亮灭
http://power.baidu.com/question/240873584599025684.html?entry=browse_difficult PIC12F629帮我用C语言写个程序,控 ...
- (三)开关检测来控制LED灯的亮灭
开关检测案例一: 具体电路图如下: K1--K4闭合,控制 D1—D4 亮灭 产生的问题: 1.关于 R8 R9 R7 R10 的阻值选择问题,倘若太大的话, 比如10K 不管开关断开还是闭合,好像 ...
- 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...
- CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)
目录 1.前期预备知识 1.1 新大陆ZigBee模块LED灯电路 1.2 CC2530相关寄存器 1.3 寄存器操作技巧 1.4 CPU空转延时 1.4 操作流程图 2.程序代码 The End 1 ...
- CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)
目录 1. 前期预备知识 1.1 定时器中断触发 1.2 相关寄存器 1.3 寄存器相关问题 1.4 T1.T3定时器初始化流程 2 程序及代码 THE END 1. 前期预备知识 1.1 定时器中断 ...
随机推荐
- linux硬盘的分区、格式化、挂载以及LVM
linux硬盘的分区.格式化.挂载以及LVM 多块硬盘的组合: 硬盘分两种:ide和scsi. ide硬盘: /dev/hda 第一块IDE硬盘 /dev/hdb 第二块IDE硬盘 ... /de ...
- 替换JDK 对eclipse的影响?
问题 替换原有的JDK 对 eclipse有影响么? 之前用的eclipse是32位的,我的电脑是64位的,装的JDK是也是32位的,所以不影响使用! 但是,前两天装了一个ideal,新配置了一个9 ...
- 三、checkedListBoxControl
一.checkedListBoxControl的使用全选 private void InitDate() { CheckedListBoxItem[] itemArr = { new CheckedL ...
- Hibernate 配置文件hibernate.cfg.xml的详细
<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml ...
- How to remove tag on Github
git tag -d 22 git push origin :refs/tags/22
- docker --环境变量制作模板
比如你现在有配置文件:decoder.conf decoder.conf里面有两个配置项写的是: THREAD_NUM:24 GPU_ID:0 现在你希望通过某个统一的配置来修改这些配置项,以免在部署 ...
- PHP——敏感词过滤
前言 如果可以用第三方的话,那么你是幸运的,因为现在这种敏感词过滤,敏感图片,敏感语音过滤的第三方服务还是挺多的 敏感词过滤 核心代码 利用PHP内置的三个函数 array_combine() | a ...
- 各种MM(存储器)含义
1.rom:read only memory 只读存储器 只能读,不能写. 2.ram:random access memory 随机存取存储器 可读可写. 3.fifo:first in first ...
- centos6.8下安装破解quartus prime16.0以及modelsim ae安装
前言 装逼使用 流程 安装modelsim: 1.modelsim ae在linux下是32位的,对于64位系统需要安装32位库:yum install xulrunner.i686 2.给予权限: ...
- bzoj 2653: middle (主席树+二分)
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2522 Solved: 1434[Submit][Status][Disc ...