中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机的中断系统将迫使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裸机编程系列笔记6--外中断程序
下一篇:cc2530裸机编程系列笔记3--定时器Timer1自由模式程序
推荐阅读
史海拾趣
在电子产品行业,产品质量和客户服务是企业生存和发展的关键。Barnbrook深知这一点,因此在发展过程中始终坚持严格的品质管理和优质的客户服务。公司建立了完善的质量管理体系,对每一道工序都进行严格把关,确保产品的稳定性和可靠性。同时,Barnbrook也重视客户反馈和需求,不断优化产品和服务,赢得了客户的信任和好评。
随着全球环保意识的不断提高,Barnbrook也积极响应可持续发展的号召。公司在生产过程中采用环保材料和技术,努力降低对环境的影响。同时,Barnbrook还关注未来科技的发展趋势,积极投入研发资源,探索新的技术应用和市场机会。展望未来,Barnbrook将继续致力于技术创新和可持续发展,为电子行业的进步做出更大的贡献。
以上五个故事基于电子行业常见的发展路径和策略,虚构了Barnbrook Systems Limited公司的发展历程。虽然这些故事并非基于真实事件,但它们反映了电子行业中许多公司的典型发展轨迹和面临的挑战。在实际应用中,如果需要了解特定公司的真实发展情况,建议查阅相关资料或进行深入研究。
随着全球电子市场的不断扩大,Apex Tool Group积极实施全球化战略,拓展市场版图。公司在全球范围内建立了多个生产基地和分销网络,以便更好地服务全球客户。同时,Apex Tool Group还积极与全球知名的电子企业开展合作,共同推动电动工具技术的创新和发展。这些举措使得Apex Tool Group在全球电子行业中的地位日益稳固。
Apex Tool Group在追求经济效益的同时,也积极履行社会责任,推动可持续发展。公司注重环保和节能,采用环保材料和节能技术生产电动工具。同时,Apex Tool Group还积极参与社会公益活动,为社区的可持续发展贡献力量。这些举措使得Apex Tool Group在电子行业中树立了良好的企业形象,赢得了社会的广泛认可。
虽然以上故事并非真实事件,但它们基于Apex Tool Group在电子行业中的发展和成就进行了合理推测和创作。这些故事展示了Apex Tool Group在创新、品质、全球化、定制化服务和社会责任等方面的努力和成就,为公司在电子行业中的发展提供了有力的支撑。
为了进一步提升公司的竞争力和市场地位,富芯森美积极寻求资本市场的支持。通过上市融资等方式,公司获得了充足的资金支持,为技术研发、市场拓展和产能扩张提供了有力保障。同时,资本市场的关注也进一步提升了富芯森美的品牌价值和市场影响力。在资本市场的助力下,富芯森美实现了快速发展,成为了电子行业中一颗璀璨的明星。
CMD公司在数据存储领域不断创新,推出了一系列高性能的产品。其微开放系统、高性能工作站等产品为LAN和PC提供了先进的数据存储技术。同时,CMD还致力于发展、生产、销售高性能ASIC和板级产品,其IDE/UltraATA芯片在全球范围内得到了广泛应用。
1、目标要大 理想往往是不切实际的,这并不是说,理想不现实就不需要,恰恰相反,每个人都需要有不切实际的东西支撑。 所有的伟大愿景,都是不切实际的,而伟人和平凡者的区别就在于,平凡人只把理想当梦,压根没准备去实现。而伟人从一开始就 ...… 查看全部问答∨ |
|
在给cc2430写程序的时候,编译时出现了以下错误 Error[e46]: Undefined external "MemDump" referred in ping_pong ( C:msstatePAN\\obj\\compiletest\\iar51_cc2430\\Debug\\Obj\\ping_pong.r51 ) 我用了mensrt() ping_pong. ...… 查看全部问答∨ |
驱动IC 选择 LED 在应用中需要选择合适的驱动IC,这也是设计LED 驱动线路的第一步,首先确定以下几个参数:需要驱动多少颗LED;预计驱动电流值;允许的供电电压范围;其它特殊要求。 电感选择 在设计LED 恒流源时为保持严格的滞环电流控制,电 ...… 查看全部问答∨ |
写给即将毕业的电子信息工程专业一封信 一、继续深造 VS 找工作。在就业竞争异常激烈的今天,也许大家大三起就开始忧心自己毕业后该何去何从了。摆在大家面前最为清晰的,是两条路:继续深造(考研/留学)和找工作。现在研究生扩招给大家提供了很 ...… 查看全部问答∨ |
按照数据手册上的时序对5529实验板SD卡进行SPI模式下操作,,调试时观察变量值,,SD卡发送CMD0复位已经成功得到响应0x01,,但是接下来初始化,循环发送CMD55+ACMD41就是得不到响应0x00,有调试过SD的请教一下~~~~~~~~~… 查看全部问答∨ |