历史上的今天
返回首页

历史上的今天

今天是:2025年03月26日(星期三)

正在发生

2020年03月26日 | MSP430教程16:MSP430单片机的框架程序

2020-03-26 来源:eefocus

MSP430单片机的框架程序(转)下面给出MSP430的程序框架,我们可以在此基础上修改以及添加自己所需的程序。


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

文件名:main.c

描述:MSP430框架程序。适用于MSP430F149,其他型号需要适当改变。

      不使用的中断函数保留或者删除都可以,但保留时应确保不要打开不需要的中断。

      保留中断函数,编译器将会为BSL密码填充所有的字节。

版本:1.0 2005-1-13

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


//头文件

#i nclude


//函数声明

void InitSys();



int main( void )

{


  WDTCTL = WDTPW + WDTHOLD;              //关闭看门狗


  InitSys();     //初始化


start:

  //以下填充用户代码



 LPM3;   //进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句

 goto start;


}


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

系统初始化

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

void InitSys()

{

   unsigned int iq0;


 //使用XT2振荡器

   BCSCTL1&=~XT2OFF;          //打开XT2振荡器

   do

   {

   IFG1 &= ~OFIFG;     // 清除振荡器失效标志

   for (iq0 = 0xFF; iq0 > 0; iq0--);  // 延时,等待XT2起振

  }

  while ((IFG1 & OFIFG) != 0);    // 判断XT2是否起振


  BCSCTL2 =SELM_2+SELS;     //选择MCLK、SMCLK为XT2


 //以下填充用户代码,对各种模块、中断、外围设备等进行初始化


   _EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句

}


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

端口2中断函数

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

#pragma vector=PORT2_VECTOR

__interrupt void Port2()

{

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

 if((P2IFG&BIT0) == BIT0)

 {

  //处理P2IN.0中断

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

  //以下填充用户代码


 }

 else if((P2IFG&BIT1) ==BIT1)

 {

  //处理P2IN.1中断

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

  //以下填充用户代码


 }

 else if((P2IFG&BIT2) ==BIT2)

 {

  //处理P2IN.2中断

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

  //以下填充用户代码


 }

 else if((P2IFG&BIT3) ==BIT3)

 {

  //处理P2IN.3中断

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

  //以下填充用户代码


 }

 else if((P2IFG&BIT4) ==BIT4)

 {

  //处理P2IN.4中断

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

  //以下填充用户代码


 }

 else if((P2IFG&BIT5) ==BIT5)

 {

  //处理P2IN.5中断

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

  //以下填充用户代码


 }

 else if((P2IFG&BIT6) ==BIT6)

 {

  //处理P2IN.6中断

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

  //以下填充用户代码


 }

 else

 {

  //处理P2IN.7中断

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

  //以下填充用户代码


 }


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

}


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

USART1发送中断函数

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

#pragma vector=USART1TX_VECTOR

__interrupt void Usart1Tx()

{

 //以下填充用户代码



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

}


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

USART1接收中断函数

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

#pragma vector=USART1RX_VECTOR

__interrupt void Ustra1Rx()

{

 //以下填充用户代码



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

}


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

端口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

推荐阅读

史海拾趣

Entegris公司的发展小趣事

在晶圆盒传输业务上,Entegris与台湾的家登精密之间发生了一场长达数年的专利侵权诉讼。Entegris最终获得了胜诉,家登被要求赔偿超过3,000万美元。这一胜利不仅保护了Entegris的知识产权,也进一步巩固了其在半导体材料市场的地位。

Hamamatsu公司的发展小趣事

2019年1月底,Entegris与Versum Materials宣布合并。合并后的公司由Entegris占据五席董事,而Versum占四席。Versum是一家主要生产半导体的化学、气体及输送系统的公司,两家公司的前三大客户均为台积电、英特尔、三星电子。合并后,新公司在半导体材料市场的影响力显著增强,同时也面临着来自德国默克等竞争对手的挑战。

Cressall Power Resistors公司的发展小趣事

随着全球环保意识的提高,Cressall积极响应绿色生产的号召。公司投入资金研发环保型功率电阻器,采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加强了对废弃物的处理和回收利用,实现了资源的循环利用。这些环保措施不仅提升了公司的社会形象,还为公司带来了更多的商机。

Appointech Inc公司的发展小趣事

为了进一步扩大市场份额,Appointech Inc公司开始积极拓展海外市场。通过与国际知名企业的合作,公司成功打入国际市场,产品销量大幅提升。同时,公司还积极参加国际电子展会和交流活动,与全球同行建立了广泛的合作关系,为公司的长远发展奠定了坚实的基础。

Electromagnetic Industries Llp公司的发展小趣事

EMI公司深知产品质量对企业的重要性。因此,公司建立了严格的质量管理体系,从原材料采购到生产加工再到产品检验,每一个环节都严格把关。同时,公司还引进了先进的检测设备和技术手段,确保产品质量的稳定性和可靠性。这些措施的实施使得EMI公司的产品质量得到了客户的广泛认可。

General Microcircuits Corp公司的发展小趣事
选择低噪声的运算放大器,以提高系统的信噪比。

问答坊 | AI 解惑

博客系统使用功能介绍说明书

各位朋友:               eeworld博客系统在线在即,目前已经众多工程师朋友已经帮助我们进行了内部测试,在此,非常感谢大家!               ...…

查看全部问答>

第一讲 LED主要参数与特性

LED是利用化合物材料制成pn结的光电器件。它具备pn结结型器件的电学特性:I-V特性、C-V特性和光学特性:光谱响应特性、发光光强指向特性、时间特性以及热学特性。本文将为你详细介绍。 1、LED电学特性 1.1 I-V特性 表征LED芯片pn结制备性能主 ...…

查看全部问答>

请教各位在职的嵌入式研发工程师

本人09年毕业学的是自动化专业,在学校的时候比较喜欢摆弄单片机一类的东西,对技术比较感兴趣,一直想往嵌入式方面发展,但是毕业的时候工作不好找,那年经济危机了,结果来到了一家制造型公司,做质量方面工作,说实话,我一点也不感兴趣,我一直 ...…

查看全部问答>

自制RTL8019AS以太网连接主机本地连接不稳定,何解?

我在自制的以太网rtl8019as片子上用网线连接计算机,但本地连接显示断开、没有连接、过会又有连接,很不稳定。 正常情况和本地连接上是不是只要给8019AS加电就可以看到,不用跑发送数据程序? 可能自己做的电路很不稳定,是抄的以前公司的以太网 ...…

查看全部问答>

[求助]P0口能否接发光二极管?

请教一下:如果在P0口(如P0.2)外接一发光二极管和一限流电阻,再接一个+5V的VCC,能否通过改变P0.2的0、1状态使发光二极管点亮或熄灭?据了解P0口不能输出高电平,可否通过外置上拉电阻后实现以上结果?如何外置上拉电阻?…

查看全部问答>

lm3s8962上的RT-Thread连载1——任务的基本管理

RT-Thread任务的基本管理 实验目的: ²        理解RTOS中任务管理的基本原理,了解任务的基本状态及其变迁过程; ²        掌握RT-Thread任务管理子系统中的 ...…

查看全部问答>

lan9220接口电路

LAN9220,LAN9221,LAN922i LAN9220-ABZJ,LAN9221-ABZJ,LAN9221i-ABZJ 支持可变电压 I/O 和 HP Auto-MDIX 16 位 Non PCI 小型 10/100 以太网控制器   特点 LAN9220,LAN9221  ,LAN9221i 低 CPU 开销的高效架构 LAN9220,LAN92 ...…

查看全部问答>

dsp不给pci主机中断

在dsp(DM642)上使用PCI_dspIntReqSet()函数,不能产生中断。在硬件仿真下测试,我使用万用表测量了INTA#脚,始终为高,但在发中断与清中断切换时,用windriver观察HSR的值在00000003和00000001之间切换,说明两条语句执行了,主要程序如下:希望 ...…

查看全部问答>

BLDC, BLAC,PMSM的区别

有人用C2000做这电机控制吗? BLDC, BLAC,PMSM的有啥区别…

查看全部问答>

uc/OS-II应用

自学了uc/OS-II的一些理论知识,现在想实际的用他做一些东西?大家推荐一下实用的教程学习一下,谢谢!…

查看全部问答>