MSP430中断c函数模板大全

发布者:trendsetter10最新更新时间:2021-05-13 来源: eefocus关键字:MSP430  中断  c函数 手机看文章 扫描二维码
随时随地手机看文章

简介:这是一篇MSP430中断c语言函数模板,有IO口中断,定时器中断,ADC中断,USART0中断,看门狗中断,初学者可以看快照着模板入门。

端口1中断函数


多中断中断源:P1IFG.0~P1IFG7


进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次引发中断


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


#pragma vector=PORT1_VECTOR


__interrupt void Port1()


{


//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。


if((P1IFG&BIT0) == BIT0)


{


//处理P1IN.0中断


P1IFG &= ~BIT0; //清除中断标志


//以下填充用户代码


}


else if((P1IFG&BIT1) ==BIT1)


{


//处理P1IN.1中断


P1IFG &= ~BIT1; //清除中断标志


//以下填充用户代码


}


else if((P1IFG&BIT2) ==BIT2)


{


//处理P1IN.2中断


P1IFG &= ~BIT2; //清除中断标志


//以下填充用户代码


}


else if((P1IFG&BIT3) ==BIT3)


{


//处理P1IN.3中断


P1IFG &= ~BIT3; //清除中断标志


//以下填充用户代码


}


else if((P1IFG&BIT4) ==BIT4)


{


//处理P1IN.4中断


P1IFG &= ~BIT4; //清除中断标志


//以下填充用户代码


}


else if((P1IFG&BIT5) ==BIT5)


{


//处理P1IN.5中断


P1IFG &= ~BIT5; //清除中断标志


//以下填充用户代码


}


else if((P1IFG&BIT6) ==BIT6)


{


//处理P1IN.6中断


P1IFG &= ~BIT6; //清除中断标志


//以下填充用户代码


}


else


{


//处理P1IN.7中断


P1IFG &= ~BIT7; //清除中断标志


//以下填充用户代码


}


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


定时器A中断函数


多中断中断源:CC1~2 TA


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


#pragma vector=TIMERA1_VECTOR


__interrupt void TimerA1()


{


//以下为参考处理程序,不使用的中断源应当删除


switch (__even_in_range(TAIV, 10))


{


case 2:


//捕获/比较1中断


//以下填充用户代码


break;


case 4:


//捕获/比较2中断


//以下填充用户代码


break;


case 10:


//TAIFG定时器溢出中断


//以下填充用户代码


break;


}


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


定时器A中断函数


中断源:CC0


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


#pragma vector=TIMERA0_VECTOR


__interrupt void TimerA0()


{


//以下填充用户代码


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


AD转换器中断函数


多中断源:摸拟0~7、VeREF+、VREF-/VeREF-、(AVcc-AVss)/2


没有处理ADC12TOV和ADC12OV中断标志


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


#pragma vector=ADC_VECTOR


__interrupt void Adc()


{


//以下为参考处理程序,不使用的中断源应当删除


if((ADC12IFG&BIT0)==BIT0)


{


//通道0


//以下填充用户代码


}


else if((ADC12IFG&BIT1)==BIT1)


{


//通道1


//以下填充用户代码


}


else if((ADC12IFG&BIT2)==BIT2)


{


//通道2


//以下填充用户代码


}


else if((ADC12IFG&BIT3)==BIT3)


{


//通道3


//以下填充用户代码


}


else if((ADC12IFG&BIT4)==BIT4)


{


//通道4


//以下填充用户代码


}


else if((ADC12IFG&BIT5)==BIT5)


{


//通道5


//以下填充用户代码


}


else if((ADC12IFG&BIT6)==BIT6)


{


//通道6


//以下填充用户代码


}


else if((ADC12IFG&BIT7)==BIT7)


{


//通道7


//以下填充用户代码


}


else if((ADC12IFG&BIT8)==BIT8)


{


//VeREF+


//以下填充用户代码


}


else if((ADC12IFG&BIT9)==BIT9)


{


//VREF-/VeREF-


//以下填充用户代码


}


else if((ADC12IFG&BITA)==BITA)


{


//温度


//以下填充用户代码


}


else if((ADC12IFG&BITB)==BITB)


{


//(AVcc-AVss)/2


//以下填充用户代码


}


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


USART0发送中断函数


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


#pragma vector=USART0TX_VECTOR


__interrupt void Usart0Tx()


{


//以下填充用户代码


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


USART0接收中断函数


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


#pragma vector=USART0RX_VECTOR


__interrupt void Usart0Rx()


{


//以下填充用户代码


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


看门狗定时器中断函数


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


#pragma vector=WDT_VECTOR


__interrupt void WatchDog()


{


//以下填充用户代码


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


比较器A中断函数


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


#pragma vector=COMPARATORA_VECTOR


__interrupt void ComparatorA()


{


//以下填充用户代码


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


定时器B中断函数


多中断源:CC1~6 TB


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


#pragma vector=TIMERB1_VECTOR


__interrupt void TimerB1()


{


//以下为参考处理程序,不使用的中断源应当删除


switch (__even_in_range(TBIV, 14))


{


case 2:


//捕获/比较1中断


//以下填充用户代码


break;


case 4:


//捕获/比较2中断


//以下填充用户代码


break;


case 6:


//捕获/比较3中断


//以下填充用户代码


break;


case 8:


//捕获/比较4中断


//以下填充用户代码


break;


case 10:


//捕获/比较5中断


//以下填充用户代码


break;


case 12:


//捕获/比较6中断


//以下填充用户代码


break;


case 14:


//TBIFG定时器溢出中断


//以下填充用户代码


break;


}


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


定时器B中断函数


中断源:CC0


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


#pragma vector=TIMERB0_VECTOR


__interrupt void TimerB0()


{


//以下填充用户代码


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


不可屏蔽中断函数


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


#pragma vector=NMI_VECTOR


__interrupt void Nmi()


{


//以下为参考处理程序,不使用的中断源应当删除


if((IFG1&OFIFG)==OFIFG)


{


//振荡器失效


IFG1 &= ~OFIFG;


//以下填充用户代码


}


else if((IFG1&NMIIFG)==NMIIFG)


{


//RST/NMI不可屏蔽中断


IFG1 &= ~NMIIFG;


//以下填充用户代码


}


else //if((FCTL3&ACCVIFG)==ACCVIFG)


{


//存储器非法访问


FCTL3 &= ~ACCVIFG;


//以下填充用户代码


}


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


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


基本定时器中断函数


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


#pragma vector=BASICTIMER_VECTOR


__interrupt void BasTimer()


{


//以下填充用户代码


LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽


}


关键字:MSP430  中断  c函数 引用地址:MSP430中断c函数模板大全

上一篇:MSP430单片机的FLASH与存储器结构(3)
下一篇:讲讲我自己对ADC12模块的心得——MSP430f5529

推荐阅读最新更新时间:2024-11-02 17:58

中断响应过程及响应时间
  8051的CPU在每个机器周期期间,顺序采样每个中断源,CPU在下一个机器周期按优先级顺序查询中断标志,如查询到某个中断标志为1,将在下一个机器周期期间按优先级来进行中断处理。在下列任一种情况存在时,中断申请将被封锁。   1、CPU正在执一个同级或高级的中断服务程序2、当前机器周期不是当前指令周期的最后一个机器周期,即要保证把当前指令执行完。   CPU响应中断, 由硬件自动将相应的中断矢量地址装入程序程序计数器PC,转入该中断服务程序进行处理。   对于有些中断源,CPU在响应中断后会自动清除中断标志,如定时器溢出标志TF0,TF1,以及部中断标志IE0,IE1。   而有些中断标志,不会自动清除,只能由用户用户软件清除,
[单片机]
单片机C程序的中断函数调用子程序冲突问题
在单片机或者ARM的使用过程中,必会遇到使用片上中断资源的时候,中断单片机的灵魂和精髓所在,像定时/计数器一样有很重要的作用。设置中断的作用是能及时响应重要的程序响应,以提高MCU和MPU的对重要资源的响应速度。在响应中断的过程中,系统会自动保存断点(C语言编程中),等到中断响应结束之后,程序会再次回到断点处继续执行main函数。这就出现了问题:有可能在中断函数中调用的子函数和main函数中调用的子函数重复,比如,在main函数执行到display()显示函数的时候,发生了ESUART中断,这是程序需要保存现场和断点,将现在的main正在执行的一些资源压入堆栈。如果在interrupt()函数中也调用display()函数的
[单片机]
MSP430 按键程序 (含电路图及源代码)
#i nclude msp430x14x.h void Init_Port(void) { //将P1口所有的管脚在初始化的时候设置为输入方式 P1DIR = 0; //将P1口所有的管脚设置为一般I/O口 P1SEL = 0; // 将P1.4 P1.5 P1.6 P1.7设置为输出方向 P1DIR |= BIT4; P1DIR |= BIT5; P1DIR |= BIT6; P1DIR |= BIT7; //先输出低电平 P1OUT = 0x00; // 将中断寄存器清零 P1IE = 0; P1IES = 0; P1IFG = 0; //打开管脚的中断功能 //对应的
[单片机]
<font color='red'>MSP430</font> 按键程序 (含电路图及源代码)
MSP430状态寄存器SR的使用实验及小结
研究LCD128128驱动程序时,看到一个语句LCD_SDA = CY; 当时明白C51中CY是进位标志,这种写法有点意思,好象很简洁。原程序见下: //传送指令 voidtransfer_command_lcd(unsigned char cmd) { int k; LCD_CS = 0; LCD_RS= 0; for (k=0; k 8; k++) { cmd = cmd 1; LCD_SCL = 0; LCD_SDA = CY; LCD_SCL = 1; } LCD_CS=1; } 因为要用MSP430驱动,很多语句要改,这个C
[单片机]
<font color='red'>MSP430</font>状态寄存器SR的使用实验及小结
快速学Arm(26)--向量中断控制器VIC(4)
VIC是中断源和CPU内核之间的一座桥梁.VIC可以支持32个中断输入,我们可以使用编程将32个中断请求设置为快速中断请求(FIQ)和向量中断请求(IRQ): 我们先来讲一下FIQ,FIQ具有最高的优先级,当FIQ和IRQ同时触发的时候,只能响应FIQ. 我们使用VICIntSelect寄存器来选择哪一个中断为FIQ,哪一个中断为IRQ,这是一个32bit的寄存器,每一位对应着下面的中断源表,这个表要经常用到,大家要记住: 这个表中任何一个中断源请求都可以被分配为FIQ,当然也可以被分配为IRQ.当只有一个中断源被分配为FIQ的时候,中断响应将是最实时的.如果有两个中断源被分配了FIQ,那么则必须在中断服
[单片机]
快速学Arm(26)--向量<font color='red'>中断</font>控制器VIC(4)
基于VxWorks的油井数据采集远程终端的设计
0 引 言 目前,采油厂多以抽油机采油生产为主要任务,抽油机的分布点多面广,工作在条件恶劣的环境中,容易损坏和遭外力破坏,需要经常巡测,人员工作强度大。目前油井工作状态参数监控由于缺乏远程手段,对油井的生产状况均处于事后处理状态,油井出现异常或被盗破坏时不能及时处理,造成大量不明损失。基于CD-MA通迅信道的远程终端(Remote Terminal Unit,RTU)充分利用现有的计算机网络,通过对现场的监测和数据采集、传输,可以满足油井远程监控的需求。该远程终端可以对油井运行时的负荷、位移、油管回压、温度、冲次、工作电流、电压等参数进行实时全自动在线抄收;当现场有异常情况发生时,监控中心能自动发出相关报警信息,调度室可根据报
[测试测量]
基于VxWorks的油井数据采集远程终端的设计
stm32的中断与事件
事件:是表示检测有一某件触发事件发生了。 中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。 事件可以触发中断,也可以不触发 中断有可能被更优先的中断屏蔽,事件不会 事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒). 事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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