历史上的今天

今天是:2024年09月04日(星期三)

正在发生

2019年09月04日 | cc2530裸机编程系列笔记5--中断

发布者:JoyfulExplorer 来源: eefocus关键字:cc2530  裸机编程  中断 手机看文章 扫描二维码
随时随地手机看文章

      中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机的中断系统将迫使CPU 暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。


      中断处理过程:

(1)保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态和程序计数器PC 等的值。

(2)分析中断原因,转去执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。

(3)恢复被中断进程的现场,CPU 继续执行原来被中断的进程。


      【本实验的设计思路】

      开发板上已把S1 按键与P0.1 相连,本实验想要达到的效果就是,通过按键S1 触发P0.1的中断,进而在中断服务子程序中控制LED1 的亮/灭。与外部中断相关SFR 寄存器有3 个SFR:EA、IEN1、PICTL(各SFR 详细介绍请查阅《CC2530 中文手册》),开启各级中断使能,涉及:

EA —— 总中断使能;(第一级使能)


      打开中断总开关和使能P0_1 口中断EA = 1;这个是总开关,18 个中断源对应着有18 个独自的中断开关,只有将总开关打开,然后再打开相应的小开关,这样你想要允许的总开关才能奏效。


IEN1 —— P0 中断使能;(第二次级能)


PICTL.3 —— P0.1 口中断使能;(第三级使能)


      设置P0_1 口中断使能P0IEN |= 0x02;CC2530 单片机共有18 个中断源,每一个中断都有一个相应的中断使能特殊功能寄存器,对应位设置为1,使能中断位,当设置为0 屏蔽相应的中断位;这里我们使用的是P0_1,所以我们通过P0IEN |= 0x02 将p0_1 置一。


PICTL.0 —— 设置P0.1 口输入下降沿引起中断触发。




      然后在主函数中使用 while(1) 等待中断即可。代码如下:


#include

#define led1 P1_0

#define led2 P1_1

#define uchar unsigned char

#define uint unsigned int

/*****************************************

//io 及LED 初始化 P01

*****************************************/

void Init_IO_AND_LED(void)

{

P1DIR = 0x03; //0 为输入(默认),1 为输入

led1 = 1;

led2 = 1;

P0IEN |= 0x02; //P01 口中断使能

PICTL |= 0x01; //P01 下降沿

EA = 1;

IEN1 |= 0X20; //P0 口中断使能

P0IFG &= 0x00; //P0 口中断状态,如果有中断发生,相应位置1

}

/*****************************************

//主函数

*****************************************/

void main(void)

{

Init_IO_AND_LED();

while(1);

}

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

{

if(P0IFG == 0x02) //按键中断

{

P0IFG = 0;

led1 = !led1;

}

P0IFG = 0; //清中断标志

}

      中断服务程序的编写有其固定格式,这在前面讲定时器Timer中断方式的使用时也已经使用过了。在中断服务程序中首先进行了判断,到底是哪个中断标志被置位了。然后先清除中断标志,然后对LED灯进行反转。中断服务程序(格式)如下:

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

{

if(P0IFG == 0x02) //按键中断

{

P0IFG = 0;

led1 = !led1;

}

P0IFG = 0; //清中断标志

}

CC2530 中断格式

格式如下:

#pragma vector = P0INT_VECTOR

__interrupt void P0_ISR(void)

a)P0INT_VECTOR——设定 的中断向量名


关键字:cc2530  裸机编程  中断 引用地址:cc2530裸机编程系列笔记5--中断

上一篇:cc2530裸机编程系列笔记6--外中断程序
下一篇:cc2530裸机编程系列笔记3--定时器Timer1自由模式程序

推荐阅读

   近日,SiFive宣布成都锐成芯微加入其DesignShare生态系统。锐成芯微将为DesignShare项目提供超低功耗模拟IoT解决方案和LogicFlash高可靠性嵌入式MTP存储方案。SiFive公司是RISC-V指令架构研发团队所创立的,是领先的商业RISC-V处理器IP供应商,其DesignShare生态系统可为任何公司、发明者或制造商提供驾驭定制化芯片功能的能力,几乎没有前期风险。...
商转乘看似是一条多方面发展的重要之路,但几乎所有的企业都走成了商用车反哺乘用车的尴尬处境。 从2018年7月至今,国内汽车消费市场已然整整下滑了12个月。抗压能力成为了考验各车企最直接的试金石。 江铃汽车发布上半年业绩报告。报告显示,江铃汽车上半年营业收入为137.2亿元,同比下降3.96%;归属于上市公司股东的净利润0.59亿元,同比下降81.55...
遥控车门开关(RKE)系统允许用户使用钥匙扣上的发射机来锁定汽车门或者开锁,该发射机传输数据到汽车内的接收机。(请参看:遥控车门开关系统综述)。 本篇应用笔记描述了 RKE 系统的工作机制与满足低功耗、RKE 收发距离和可靠性等主要设计挑战的方法。 遥控车门开关(RKE)系统框图 从 RKE 框图上可以看到,用户按下钥匙扣上的按钮开关可触发系统工作。这...
当打工人被繁杂的工作压垮,在日复一日的重复性工作后逐渐躺平;企业也在业务流程复杂性和员工生产力中困顿不堪,企业是时候思考如何实现业务流程端到端的自动化,以及组织和员工的协作关系。有远见的企业正在使用自动化与人工智能来增强核心优势,并与员工和客户建立智能高效的协作关系。 根据 IBM 商业价值研究院的一项研究显示,到 2022年,人工...

史海拾趣

问答坊 | AI 解惑

常用电子元器件简明手册

常用电子元器件简明手册…

查看全部问答∨

ZT:游走在理想和现实之间

1、目标要大 理想往往是不切实际的,这并不是说,理想不现实就不需要,恰恰相反,每个人都需要有不切实际的东西支撑。 所有的伟大愿景,都是不切实际的,而伟人和平凡者的区别就在于,平凡人只把理想当梦,压根没准备去实现。而伟人从一开始就 ...…

查看全部问答∨

少数载流子寿命概念

  少数载流子寿命(Minority carriers life time):   (1)基本概念:   载流子寿命就是指非平衡载流子的寿命。而非平衡载流子一般也就是非平衡少数载流子(因为只有少数载流子才能注入到半导体内部、并积累起来,多数载流子即使注入进 ...…

查看全部问答∨

网站接收GPRS数据问题

如题,请问网站方面的代码怎么写才能接收通过无线模块里手机卡GPRS功能发出的数据,保存到数据库中。…

查看全部问答∨

宽带直流放大器设计方案

宽带直流放大器的设计方案,就是今天电子设计大赛的C题。帮忙给点思路或者方案!谢谢!…

查看全部问答∨

[求助]EW8051编译时的报错问题

在给cc2430写程序的时候,编译时出现了以下错误 Error[e46]: Undefined external "MemDump" referred in ping_pong ( C:msstatePAN\\obj\\compiletest\\iar51_cc2430\\Debug\\Obj\\ping_pong.r51 )   我用了mensrt() ping_pong. ...…

查看全部问答∨

LED照明驱动设计及周边元器件选择

驱动IC 选择 LED 在应用中需要选择合适的驱动IC,这也是设计LED 驱动线路的第一步,首先确定以下几个参数:需要驱动多少颗LED;预计驱动电流值;允许的供电电压范围;其它特殊要求。 电感选择 在设计LED 恒流源时为保持严格的滞环电流控制,电 ...…

查看全部问答∨

写给即将毕业的电子信息工程专业一封信

写给即将毕业的电子信息工程专业一封信 一、继续深造 VS 找工作。在就业竞争异常激烈的今天,也许大家大三起就开始忧心自己毕业后该何去何从了。摆在大家面前最为清晰的,是两条路:继续深造(考研/留学)和找工作。现在研究生扩招给大家提供了很 ...…

查看全部问答∨

MSP430F5529实验板驱动SD卡 的初始化错误

按照数据手册上的时序对5529实验板SD卡进行SPI模式下操作,,调试时观察变量值,,SD卡发送CMD0复位已经成功得到响应0x01,,但是接下来初始化,循环发送CMD55+ACMD41就是得不到响应0x00,有调试过SD的请教一下~~~~~~~~~…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved