thr是什么氨基酸| 心境障碍是什么病| 左肩后背疼是什么原因| 小孩晚上睡觉出汗是什么原因| 姊妹什么意思| 黑豚肉是什么肉| 景泰蓝是什么地方的特种工艺| 心肌缺血用什么药| 什么是幽门螺杆菌感染| 低氧血症是什么意思| 鼻塞打喷嚏是什么原因| 摩羯女和什么星座最配| 拜有利主要是治疗什么| 女性解脲支原体阳性吃什么药| 左侧卵巢囊性结构什么意思| 潮起潮落是什么意思| 荼靡是什么意思| 翳什么意思| 天庭是什么意思| 燕窝有什么功效和作用| 20分贝相当于什么声音| 车水马龙的意思是什么| cd4是什么意思| 做梦梦到自己生病了是什么意思| 深喉是什么感觉| 澜字五行属什么| 血糖可以吃什么水果| 什么是封闭针| 面起子是什么| 北海龙王叫什么| 正方形纸能折什么| 牛筋草用什么除草剂| 二院是什么医院| 托班是什么意思| 茯苓长什么样| 肛裂用什么药治最好效果最快| 低密度脂蛋白胆固醇偏低是什么意思| 七月一是什么星座| 结扎对男人有什么伤害| 什么花是蓝色的| 刺猬和豪猪有什么区别| 脸上长粉刺是什么原因引起的| 唠叨是什么意思| 兽性大发是什么生肖| 手脚热是什么原因| 女人手心发热是什么原因| 什么都没有| 腔隙灶是什么意思| 又什么又什么式的词语| 切糕为什么这么贵| 咳嗽雾化用什么药| 授教什么意思| 三甲医院是什么意思| 痈疽是什么意思| 茶宠为什么会变色| ck属于什么档次的品牌| 反应蛋白测定是查什么的| 男人更年期吃什么药| 掌中宝是什么部位| 做梦梦到小孩子是什么意思| 小蓝是什么| 三点水弘读什么| 男性b超检查什么项目| 87岁属什么| 肿标五项查的是什么| 夏天防中暑备什么药| 得了咽炎有什么症状| 帛字五行属什么| 三阳开泰是什么生肖| efg是什么意思| 生活补贴是什么意思| dcr是什么意思| 狗被蜱虫咬了有什么症状| pt950是什么材质| 表里不一是什么意思| abby是什么意思| 荷尔蒙是什么意思啊| 什么是房补| 升白针叫什么名字| 30号来的月经什么时候是排卵期| 心肌桥是什么病| 老人爱睡觉什么征兆| 宫颈炎吃什么药最好| 胰岛素抵抗是什么意思| 女生右手食指戴戒指什么意思| 葡萄糖什么意思| 吃三七粉有什么效果| 3c数码产品是什么| 大腿根部内侧瘙痒用什么药膏| 妨父母痣是什么意思| 有氧运动是指什么| 喉咙痛流鼻涕吃什么药| 云肖是什么生肖| 高锰酸钾治疗男性什么病| 抠脚大汉什么意思| 扫墓是什么意思| apm是什么牌子| 奔豚是什么意思| 正襟危坐什么意思| 解酒喝什么饮料| kt是什么意思| 悉心栽培什么意思| 农历6月28日是什么星座| 血小板平均体积偏高是什么意思| 梅毒单阳性是什么意思| 胆红素偏高挂什么科| 汗疱疹用什么药| 五分类血常规检查什么| 痛经什么原因引起的| 国粹是什么| 撇嘴是什么意思| 热淋是什么意思| 寓是什么意思| trendiano什么牌子| 万事达卡是什么卡| 什么口服液补血补气最好| 罢免是什么意思| 月经来了有血块是什么原因| 喘不上气挂什么科| 成龙姓什么| 手指麻木什么原因| 拔智齿当天可以吃什么| 心存芥蒂是什么意思| 梦见鳝鱼是什么预兆| 什么都不放的冬瓜清汤| 筋膜刀是什么| 双休什么意思| 儿童身高矮小挂什么科| 地贫有什么症状| 馀事勿取什么意思| 1998年五行属什么| 不外乎是什么意思| 咳血是什么病| 梦见剪头发预示什么| 女人怀孕的最佳时间是什么时间| 起伏不定是什么意思| osd是什么意思| 长发公主叫什么名字| 为什么鼻子无缘无故流鼻血| 飞机托运不能带什么| 脉浮是什么意思| 澳门是什么花| 女人梦见仇人代表什么| 低血糖和贫血有什么区别| female什么意思| 身上长疣是什么原因| 鸡蛋炒什么好吃| 花什么叶什么| 辣椒炭疽病用什么药| 呼吸道感染吃什么药最好| 鸡枞菌生长在什么地方| nothomme什么牌子| 血粘度查什么项目| 置换是什么意思| 天降横财什么意思| 狗狗吐是什么原因| 左眼跳什么| 龙日冲狗煞南是什么意思| NG是什么| 松花蛋是什么蛋做的| 猴和什么属相相冲相克| 大便泡沫状是什么原因| 金属过敏用什么药膏| 浮生若梦什么意思| 细佬什么意思| 先明后不争什么意思| 苜蓿是什么| 6月份能种什么菜| 羊的五行属什么| 乳房突然疼痛什么原因| 胡同是什么意思| 虱子长什么样子| 肚子疼挂什么科室| 什么样的孕妇容易翻盘| 晕轮效应是什么意思| 跃然纸什么| 肠胃不好吃什么菜比较好| 以身相许什么意思| 孕妇吃什么鱼对胎儿好| 受贿是什么意思| 幽门螺杆菌吃什么药好| 失眠吃什么中成药| 什么的舞动| 赵云属什么生肖| 小麦过敏可以用什么代替面食| 人彘为什么还能活着| 感冒了可以吃什么水果| 寻常疣是什么原因造成的| 海绵体修复吃什么药| 螃蟹一般吃什么| 肾阴虚吃什么食物| 食管鳞状上皮增生是什么意思| 癸未日五行属什么| 健胃消食片什么时候吃最好| 贫血有什么症状表现| 牛蛙吃什么| 来是什么生肖| 七年之痒什么意思| 炖羊排放什么调料好吃| 三毛为什么自杀| 西凤酒属于什么香型| 成王败寇什么意思| cea是什么意思| 乳头内陷是什么原因| 盆底肌是什么| 由是什么意思| 阴道细菌感染用什么药| m是什么品牌| 南辕北辙是什么意思| 腹泻挂什么科| 什么人容易得天疱疮| 皮肤病用什么药膏好| 天地不仁以万物为刍狗什么意思| 肾虚吃什么药最有效| 蛋白粉有什么用| 基诺浦鞋属于什么档次| 5月19日是什么星座| 肾囊肿是什么原因引起的| 三心二意是指什么生肖| 吃什么容易长高| 87年兔是什么命| 金开什么字| cordura是什么面料| 什么堂大什么| 宠溺是什么意思| 带状疱疹吃什么药好| 榄仁叶是什么树的叶子| 小猫打什么疫苗| 腺肌症是什么原因引起的| 胃窦黄斑瘤是什么病| 留级是什么意思| 跳舞有什么好处| 吃芹菜有什么好处| 五月出生是什么星座| 梦见车丢了是什么征兆| 什么是脑瘫| 808是什么意思| 肺结节吃什么药好| ca724偏高是什么意思| 手机壳什么材质好| 过敏擦什么药膏好得快| 吃什么排铅效果最好| 牙龈肿痛吃什么药最见效| hct是什么| 生物技术专业学什么| 动土是什么意思| 伶牙俐齿是什么生肖| 参芪颗粒适合什么人吃| 鼻渊是什么意思| 脚心痒是什么原因引起的| myp是什么意思| 孕妇有狐臭擦什么最好| 卵巢囊肿吃什么药好得最快| 什么是静息心率| 二倍体是什么意思| 酸梅汤不能和什么一起吃| 低密度脂蛋白偏高是什么原因| 画眉是什么| 什么情什么意| 无赖不还钱最怕什么| 平起平坐是什么动物| 11月20日什么星座| 手足口疫苗叫什么名字| 九牛一毛指什么生肖| 百度

新闻中心

EEPW首页 > 嵌入式系统 > MSP430学习笔记

千峡湖生态旅游度假区一期建设如火如荼 冲刺试营业

——
作者: 时间:2025-08-04 来源:电子产品世界 收藏
百度 论坛以新时代的中国为主题。

  这只是我在学习公司生产的16位超的功耗单片机的随笔,希望能对其他朋友有所借鉴,不对之处还请多指教。

  下面,开始430之旅。

  讲解430的书现在也有很多了,不过大多数都是详细说明底层硬件结构的,看了不免有些空洞和枯燥,我认为了解一个MCU的操作首先要对其基础特性有所了解,然后再仔细研究各模块的功能。

  1.首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。

  0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储

  剩下的从0xffff开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x1100

  2.复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清楚信号PUC。POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误是产生。但是,无论那种信号触发的复位,都会使msp430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。复位后的状态不写了,详见参考书,嘿嘿。

  3.系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。430最多有三个振荡器,DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ-8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。

  430有三种时钟信号:MCLK系统主时钟,可分频1 2 4 8,供cpu使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。

  4.中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状态,有事件时中断唤醒cpu,处理完毕再次进入低功耗状态。

  整个中断的响应过程是这样的,当有中断请求时,如果cpu处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的pc值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位SR.GIE复位,相应的中断向量值装入pc,程序从这个地址继续执行。

  这里要注意,中断允许位SR.GIE和中断嵌套问题。如果当你执行中断程序过程中,希望可以响应更高级别的中断请求时,必须在进入第一个中断时把SR.GIE置位。

  其实,其他的外围模块时钟沿着时钟和中断这个核心来执行的。具体的结构我也不罗索了,可以参考430系列手册。

  明天开始,讲述msp430单片机C语言编程的故事

  上回把430单片机的基础特性交待了一下,让大家整体有了结构的印象,今天我想在写一下c语言对430编程的整体结构。基本上属于框架结构,即整体的模块化编程,其实这也是硬件编程的基本法则拉(可不是我规定的法则哦)。

  首先是程序的头文件,包括#include <x14x.h>,这是14系列,因为常用149;其他型号可自己修改。还可以包括#include "data.h" 等数据库头文件,或函数变量声明头文件,都是你自己定义的哦。

  接着就是函数和变量的声明 void Init_Sys(void);系统初始化

  系统初始化是个整体的概念,广义上讲包括所有外围模块的初始化,你可以把外围模块初始化的子函数写到Init_Sys()中,也可以分别写各个模块的初始化。但结构的简洁,最好写完系统的时钟初始化后,其他所用到的模块也在这里初始化。

void Init_Sys()
{
  unsigned int i;

  BCSCTL1&=~XT2OFF;       //打开XT2振荡器
  do
  {
  IFG1 &= ~OFIFG;             // 清除振荡器失效标志
  for (i = 0xFF; i > 0; i--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0);   // 判断XT2是否起振

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

//以下对各种模块、中断、外围设备等进行初始化

                ........................................

  _EINT(); //打开全局中断控制
}

  这里涉及到时钟问题,通常我们选择XT2为8M晶振,也即系统主时钟MCLK为8M,cpu执行命令以此时钟为准;但其他外围模块可以在相应的控制寄存器中选择其他的时钟,ACLK;当你对速度要求很低,定时时间间隔大时,就可以选择ACLK,例如在定时器Timea初始化中设置。

主程序:               void main( void )
                        {

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

                          InitSys();   //初始化

                          //自己任务中的其他功能函数

                            。。。。。。。。。。。。。。。。。。。。。

                        while(1);

                        }

  主程序之后我要讲讲中断函数,中断是你做单片机任务中不可缺少的部分,也可以说是灵魂了(夸张吗)。

              /*****************************************************************************
                各中断函数,可按优先级依次书写
                ***********************************************************************/

举个定时中断的例子:

  初始化             void Init_Timer_A(void)
                      {
                        TACTL = TASSEL0 + TACLR;         // ACLK, clear TAR
                        CCTL0 = CCIE;                 // CCR0 中断使能
                        CCR0=32768;                   //定时1s
                        TACTL|=MC0;                   //增计数模式
                        }

  中断服务           #pragma vector=MERA0_VECTOR
                      __interrupt void TimerA0()

                      {

                        // 你自己要求中断执行的任务

                      }

  当然,还有其他的定时,和多种中断,各系列芯片的中断向量个数也不同。

  这就是简单的整体程序框架,写得简单啦,还忘谅解,明天详细了解一下各外围模块的初始化和功能,晚安。


  整体的程序设计结构,包括了所有外围模块及内部时钟,中断,定时的初始化。具体情况大家可以根据自己的需要添加或者减少,记住,模块化设计时最有力的武器。

  这可是个人总结的经典阿,谢谢支持。因为经常使用149,所以这是149的结构,其他的再更改,根据个人需要。{{分页}}

/*****************************************************************************
文件名:main.c
描述:框架程序。适用于MSP430F149,其他型号需要适当改变。
    不使用的中断函数保留或者删除都可以,但保留时应确保不要打开不需要的中断。
 
*****************************************************************************/

//头文件
#include <MSP430x14x.h>

//函数声明
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=MERA1_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; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}


 

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

存储器相关文章:存储器原理


晶振相关文章:晶振原理


关键词: MSP430 TI 嵌入式

评论


相关推荐

技术专区

关闭
西洋参补什么 爻卦是什么意思 喝什么水解酒 备孕期间不能吃什么 儿童尿路感染吃什么药
ooc是什么意思 什么血型容易被蚊子咬 燃气是什么气体 24岁属什么生肖 脸上长痣是什么原因造成的
孕妇喝什么水比较好 脚踝疼痛是什么原因 腋下属于什么科 金多水浊什么意思 amy是什么意思
pdr是什么意思 藤壶是什么 白细胞30是什么意思 楞严神咒是什么意思 生肖本命带红花是什么生肖
霉菌性阴道炎是什么症状tiangongnft.com 什么药治牙疼最快hcv8jop1ns6r.cn 庭字五行属什么hcv8jop0ns7r.cn 复制是什么意思hcv7jop5ns5r.cn 垂问是什么意思hcv8jop5ns5r.cn
耳语是什么意思hcv8jop7ns3r.cn 为什么哭会流鼻涕hcv9jop7ns2r.cn 预防脑梗吃什么药hcv8jop2ns0r.cn 今天吃什么菜hcv9jop1ns9r.cn 基尼是什么货币hcv7jop6ns5r.cn
尿检阳性是什么意思hcv8jop1ns4r.cn 1909年属什么生肖hcv8jop6ns7r.cn 局限是什么意思hcv9jop6ns4r.cn 孕妇吃葡萄对胎儿有什么好处hcv7jop6ns6r.cn 做梦梦到小孩子是什么意思hcv9jop1ns4r.cn
晓五行属性是什么hcv8jop8ns8r.cn 眼压高吃什么药hcv7jop7ns0r.cn 喉咙干痒是什么原因hcv8jop9ns0r.cn 最聪明的狗是什么狗hcv9jop6ns9r.cn 市政协副主席是什么级别hcv8jop5ns4r.cn
百度