中断

MSP430F149内部有三种类型中断:系统复位中断,不可屏蔽中断,可屏蔽中断

中断过程
①完成当前正在执行的指令﹔
②把PC寄存器内容入栈;
③把SR寄存器内容入栈;
④如果同时有多个中断,则选择优先级最高的中断;
⑤如果中断是单源中断,则中断标志位自动复位;如果中断是多源中断,则需要中断服务程序复位;
⑥SR清零,结束低功耗模式。由于GIE被清除,其他的中断被屏蔽。因此,中断不能被嵌套;
7.中断向量被装入PC寄存器,并从该地址开始执行中断服务程序。

中断向量表

系统复位中断

POR PUC

不可屏蔽中断

外部管脚NMI的触发(也就是所说的复位模式)
标志位:OFIFG
Flash非法访问
标志位:ACCVIFG
振荡器不稳定
标志位:NMIIFG

可屏蔽中断

状态寄存器SR中的下标为3的GIE位为总中断允许控制位,这是区分是否屏蔽的主要依据

16个外部中断

特点

多元中断:2组8个中断(必须软件清零标志位)
只有边缘跳变中断

引脚配置

(以引脚P2.1为例)

P2DIR |= BIT1;   //配置P2.1方向为输入模式
P2IE  |= BIT1;  //配置P2.1的中断使能
P2IES |= BIT1;   //配置P2.1为下降沿中断响应

其他寄存器可配置,可不配置。引脚功能选择为一般引脚,不是功能引脚。

中断函数配置

(以引脚P2.1为例)

#pragma vector =PORT2_VECTOR
__interrupt void tangle_make(void)
{//用户自定义函数P2IFG = 0x00;  //中断标志位软件清零
}

定时器中断

Timer_A,Timer_B,处于定时模式的看门狗

寄存器配置
 //定时模式示例CCTL0 = CCIE;                              // 捕获/比较中断使能CCR0 = 6000;                               // 比较值为8000,即从0计数到8000产生一次中断  TACTL = TASSEL_2 + MC_1+TACLR;              // 使用SMCLK时钟,使用增计数模式,清零TACCR寄存器  //捕获模式示例TACTL  = TACLR + TASSEL_2 + ID_3 + MC_3;      //清零TACCR寄存器,使用SMCLK时钟,8分频,使用增减计数模式TACCTL0 = CM_2+ CCIS_0 + SCS + CAP + CCIE;   //设置为 下降沿捕获,捕获通道0,同步捕获,捕捉模式,捕获/比较中断使能TACCTL1 = CM_3 + CCIS_1 + SCS + CAP + CCIE;   //设置为 上升下降沿捕获,捕获通道1,同步捕获,捕捉模式,捕获/比较中断使能//PWM输出模式示例TACTL |= TASSEL_2 + ID_3 + MC_2 + TACLR + TAIE; //使用SMCLK时钟,8分频,使用连续计数模式,清零TACCR寄存器,定时器溢出中断TACCTL0= CCIE;CCR0 = 5000;
中断函数配置
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)             //定时器A中断服务程序
{switch(TAIV){case 2:******break;case 4:******break;case 10:******break;}}

使用独立按键作为外部中断控制LED灯,并在数码管显示

#include <msp430x14x.h>unsigned char Seg_code[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
// SEG 数字0—9   共阳
unsigned char Seg_Wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};
// 位选unsigned char Flag = 0;void Port_Init()
{P1DIR = 0x00;   //P1端口设置为输入模式P1IE = 0xff;   //P1端口多元中断使能P1IES = 0xff;  //P1端口下降沿触发中断P3DIR = 0xff;   //P3端口设置为输出模式P3OUT = 0xff;  //P3端口输出高电平P5DIR = 0x07;   //P4端口设置为输出模式   P5.0=STCP  P5.1=SHCP  P5.2=DS P5OUT = 0xff;  //P4端口输出高电平}void Clock_Init()
{unsigned char i;BCSCTL1 = RSEL0 + RSEL1 + RSEL2;          // 采用最高频率7   ACLK = XT2BCSCTL1&=~XT2OFF; //打开XT2振荡器do{IFG1 &= ~OFIFG; // 清除振荡器失效标志for (i = 255; i > 0; i--); // 延时,等待XT2起振}while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振BCSCTL2 |= SELS+SELM_2;                          // SMCLK = MCLK = XT2
}void WR_595(unsigned char Data)     //要写入的数据
{unsigned char i;for(i=0;i<8;i++){ if(Data&0x80)P5OUT|=0x04;else  P5OUT&=0xfB;P5OUT|=0x02;                   // SHCP=1;  上升沿P5OUT&=0xfD;Data<<=1;                      //从高位开始取数据 } P5OUT|=0x01;                    //STCP=1;P5OUT&=0xfe;                   // STCP=0;}void main(void)
{   WDTCTL = WDTPW + WDTHOLD;               //关闭看门狗Port_Init();Clock_Init();//_BIS_SR(LPM0_bits + GIE);                   // _BIS_SR(LPM0_bits + GIE) 具有同时打开全局中断和进入LPM0;  等同于:_EINT();  LPM0;// 如果只使用定时器之类的功能时,可以使用低功耗模式,而不使用while(1)_EINT();while(1){switch(Flag){case 1:{P3OUT = 0xfe;WR_595(Seg_Wei[0]);WR_595(Seg_code[0]);break;}case 2:{P3OUT = 0xfd;WR_595(Seg_Wei[1]);WR_595(Seg_code[1]);break;}case 3:{P3OUT = 0xfb;WR_595(Seg_Wei[2]);WR_595(Seg_code[2]);break;}case 4:{P3OUT = 0xf7;WR_595(Seg_Wei[3]);WR_595(Seg_code[3]);break;}case 5:{P3OUT = 0xef;WR_595(Seg_Wei[4]);WR_595(Seg_code[4]);         break;}case 6:{P3OUT = 0xdf;WR_595(Seg_Wei[5]);WR_595(Seg_code[5]);break;}case 7:{P3OUT = 0xbf;WR_595(Seg_Wei[6]);WR_595(Seg_code[6]);break;}case 8:{P3OUT = 0x7f;WR_595(Seg_Wei[7]);WR_595(Seg_code[7]);break;  }}Flag = 0;P5OUT&=0xfe;  P5OUT|=0x01;while(Flag == 0);      }
}#pragma vector=PORT1_VECTOR
__interrupt void PORT_1 (void)             //外部中断P1中断服务程序
{switch(P1IFG){case 0x01:Flag = 1;break;case 0x02:Flag = 2;break;case 0x04:Flag = 3;break;case 0x08:Flag = 4;break;case 0x10:Flag = 5;break;case 0x20:Flag = 6;break;case 0x40:Flag = 7;break;case 0x80:Flag = 8;break;    }P1IFG = 0x00;}

MSP430F149——中断及案例相关推荐

  1. 一个mysql复制中断的案例

    问题描述  上周四(2018-07-05),下午1点左右,有个客户反馈业务数据库复制中断.这个客户使用了我们的easydb产品,当时easydb上的的主备状态信息如下, 问题排查 a. 复制信息检查 ...

  2. 正点原子IMX6UL 多路按键中断实际案例

    1 前言 项目上需要多个按键输入, 因此记录一下多个按键的中断如何做 2 修改设备树 pinctrl_gpio_keys: gpio-keys {fsl,pins = <MX6UL_PAD_SN ...

  3. STM32的异常“、“中断”和“事件”区别和理解

    1 异常与中断(Cortex-M3) 1.1 异常与中断 原话:  Cortex‐M3 在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断.  其中,编号为 1-15 的对应系统异常 ...

  4. STM32的“外部中断”和“事件”区别和理解

    凡从事过ST MCU应用开发的人往往会遇到事件.中断事件 中断三个概念或术语.这三个概念彼此关联,有时会让人有点混淆或犯迷糊. 先拿一件生活中的事情打比方对上述三个概念做个基本的粗略理解,之后再分享一 ...

  5. 创客(米思奇编程)- 02 - 复习+中断

    案例1:按下心脏跳动,再按下停止跳动 上次最后写了一个同样效果的代码,但是需要设置延长时间较短,今天上课讲的时候说好像是因为在延迟的时候是不接受新的信息输入(具体什么我也忘了...) 改进的方法就是用 ...

  6. React(二):jsx事件绑定、条件渲染、列表渲染、jsx的本质、购物车案例

    React(二) 一.jsx事件绑定 1.this的绑定方式 2.jsx中绑定this的三种方式 3.事件对象和传参 (1)事件对象怎么传 (2)其他参数怎么传? 二.条件渲染 1.直接if-else ...

  7. 51单片机学习--定时器--中断--串口通信

    51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...

  8. 12 | 套路篇:CPU 性能优化的几个思路

    上一节我们一起回顾了常见的 CPU 性能指标,梳理了核心的 CPU 性能观测工具,最后还总结了快速分 析 CPU 性能问题的思路.虽然 CPU 的性能指标很多,相应的性能分析工具也很多,但理解了各种指 ...

  9. 三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程

    三菱PLC在80年代进入中国市场,已有30多年历史.由于三菱PLC编程易学,功能强大,深受中国用户喜爱.随着时间推移,市场上已经淘汰掉二代产品,关系图如下: 说明 90年代老型号 2000年代老型号 ...

最新文章

  1. html5 游戏制作软件,制作h5小游戏的免费软件有哪些?
  2. 【Linux】一步一步学Linux——grep命令(49)
  3. java异常 json,记一个toJSONString异常
  4. .NET Core 如何禁止.resx文件自动生成Designer.cs
  5. springboot+shiro:ShiroConfiguration配置
  6. MySQL 基础 ———— 存储过程与函数
  7. iOS Category 和 Extention 的本质区别【面试必备】
  8. 自动化SQL Server Analysis Server表格模型的文档
  9. mybatis association 问题
  10. HTML+css实现元素居中对齐的方法
  11. 游戏服务器应该怎么选择
  12. 微信H5音乐自动播放
  13. MySQL海量运维管理如何保障京东大促?
  14. IT历史上被引述最多的10句名人名言
  15. 2022 IDEA全家桶使用最新主题(免申请)
  16. JSON字符串转数组并取值
  17. Vue3 自定义指令:ClickOutside(点击当前区域之外的位置)
  18. Apollo path_bounds_decider解析
  19. 神经网络模型结果怎么看,神经网络的数据预处理
  20. Linux内存管理(十七):内存 watermark 详解

热门文章

  1. linux中安装libreoffice的简单方法
  2. Delphi中ActionList组件, Action 事件的自由调用方法
  3. python学习之旅【第一篇】简介和入门
  4. Delphi 环境下使用DirectDraw实现简单的绘制
  5. 小游戏--俄罗斯方块
  6. 推翻傻大黑粗的PC旧王朝,PC再次变革的希望何在?
  7. 【40nm版图问题记录】
  8. 南京计算机与软件学院,夏志华 - 南京信息工程大学 - 计算机与软件学院
  9. 天津有什么好的IT公司吗?
  10. 用H5游戏进行节日营销案列分享