msp430的外中断归根到底 其实只需要两个部分的配置就可以了:
1. 引脚配置
2. 中断函数配置
一 引脚配置(以引脚P2.1为例)
P2DIR = 0x01;//配置为输入
P2IE   |= 0x01;
P2IES |= 0x01;
其他寄存器可配置,可不配置。注意引脚功能选择为一般引脚,不是功能引脚。虽然引脚的配置很简单,但是只要出错,就无法产生中断。
二 中断函数配置
#pragma vector =PORT2_VECTOR
__interrupt void tangle_make(void)
{
       //用户自定义函数
       P2IFG = 0x00;
}     
 
中断函数比较简单,只需要记得将中断标志位清0就可以了。
注意:引发外中断的外模块最好能够与系统的电源模块使用一个电源,使用其他电源供电会产生外中断频发状态。
2016年8月18号更新
    最近一直卡在外中断和串口中断之间。自己在查看了一会原版的手册之后,发现以下几个问题。
Q1:在外中断程序中开总中断,有的时候总是莫名的卡死。
Q2:给外中断加上外部触发模块,比如红外,门磁等模块时,外中断总是不停的触发。
Q3:外中断触发后,程序还能运行,不过每到串口中断就需要外中断促进程序往下跑。
A1:这个问题涉及到中断嵌套问题。

对于多源中断,需要手动清除标志位。比如:P1、P2的中断,需要手动清楚相应的标志位。如果在这种中断中使用“_EINT();”,开中断,而在打开中断之前,没有进行原来中断标识位的清除工作,就会有相同的中断不断的进行嵌套。而导致堆栈溢出引起复位,所以在这类中断中,必须先清除标志位,再打开中断开关。要不然等着死机吧。

总之,就是说在开总中断之前,需要将多源中断标志位清掉。

A2:这个问题我到现在也不是很明白为什么会这样,不过我还是有几个经验可以写下来。
    首先,必须保证硬件的正常,一般的红外模块不需要外加电阻什么的,可以直接接在IO口上。测量红外输出引脚的高低电平是不是正常的,高的时候是不是接近3v,低的时候是不是0v。(在3V情况下,低电平为0.9-1.3V,高电平为1.5-1.9V。1.3V-1.5V为不稳定状态。)
      其次,并没有配置什么上拉下拉电阻。就是依照上面的3个寄存器配置的。可以用。(芯片是msp430f149)。
      硬件没有问题,就是要用软件来解决了:
      第一种方法:在外中断中关闭 外中断使能,然后在外部程序合适的地方再开启。
      第二种方法:在外中断中 加入消抖,就可以了。至于为什么,我也不清楚。。
A3:这个问题我到现在也想不通,理不顺,如果有大神看到的话,请一定要留言告诉我。

/*********************2016.10.18更新***************/
在师兄的帮助下整个系统算是完成了。
更正一下上面的一些问题。
对于外部输入到芯片的引脚,首先值得质疑一下:这个输入引脚的状态到底能不能用万用表来测量。我这里给出的答案是不可取的。(感觉可以用示波器查看,原理的话不是很清楚)所以在写完代码后测试的时候,不应该靠万用表的数值来看是不是产生中断,万用表是不靠谱的,建议使用msp430的仿真器来查看,硬件仿真有时候可以解决很多问题。
下面说一下持续的调试过程中的问题和经验。PS:建议使用仿真器,可以大大提高一些自己不必要的考虑因素。前期自己用小灯来测试感觉真的是蠢的出血。

在调试过程中碰到的最大的问题其实是一般人都碰不到的:那就是考虑电流的问题,首先我的板子是自己焊接的,使用430f149驱动外接模块sim900a发送接受数据和继电器驱动锁开门,红外检测门的开关。整个系统使用同一个电源。发现在每次开门后都会自动的发送一个关门的指令。在经过上百次的测试和调试后,我提出可能是当锁开启的时候需要瞬间的电流,导致系统中其他部分的电流不够用,所以红外模块才会产生中断,导致每次都会产生一次关门的指令。

所以在以后的学习中,可以把电流的分流作为一个考虑的因素。

另外,外中断里的内容写的越少越好,buffer的清空,标志位的清空可以放在外中断函数外边实现,这个系统中我使用了P1口的6和7两个引脚来实现检测门的开关。(对于门的状态检测之前想了好多办法,最后采用了使用一个红外模块接到两个引脚上,两个引脚分别使用上升沿触发和下降沿触发,这样就可以检测到门的开和关了)
下面贴一下外中断的关键部分代码:
//****************************************

#pragma vector=PORT1_VECTOR
__interrupt void SIO_rx (void)
{
  volatile unsigned int x;
  /***************************/
 
  if((P1IFG&0x80)== 0x80)
  {
    for (x = 0xff; x > 0; x--);
    if(((P1IN&0x80)== 0x00))
    {
      P1IFG &= 0x7f;
      _EINT();
      IOinterruptClose();
      closedoor = 1;
      opendoor = 0;
    }
  }
 
  /***************************/
 
  if((P1IFG&0x40)== 0x40)
  {
    for (x = 0xff; x > 0; x--);
    if((P1IN&0x40)== 0x40)
    {
      P1IFG &= 0xBf;
      _EINT();
      IOinterruptClose();
      opendoor = 1;
      closedoor = 0;
    }
  }
  P1IFG &=0X00;
}

//********************代码贴完了^_^

msp430f149外中断问题相关推荐

  1. 外中断03 - 零基础入门学习汇编语言71

    第十五章:外中断03 让编程改变世界 Change the world by program 继续编写int 9中断例程 第三步:如果是Esc键的扫描码,改变显示的颜色后返回...... 那么,下一个 ...

  2. 汇编语言随笔(13)- 外中断(可屏蔽中断)、实验15

    端口的作用 在PC系统的接口卡和主板上,装有各种接口芯片.这些外设接口芯片内部有若干寄存器,CPU将这些寄存器当作端口来访问.       外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端 ...

  3. 外中断---汇编学习笔记

    外中断 要及时处理外设的输入,显然需要解决两个问题: 外设的输入随时可能发生,CPU如何得知? CPU从何处得到外设的输入? 15.1 接口芯片和端口 外设的输入不直接送入内存和CPU,而是送入相关的 ...

  4. 外中断02 - 零基础入门学习汇编语言70

    第十五章:外中断02 让编程改变世界 Change the world by program 小甲鱼和大家谈谈心 一个帖子引发小甲鱼的反省! 猫姐曾经说过,步子别迈太大,容易扯着蛋! 结果还真蛋疼了- ...

  5. 51单片机外中断流水灯

    按下K3按键,触发外中断,启动灯效; 按下K4按键,触发外中断,停止灯效 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include< ...

  6. 内中断,外中断,软中断,硬中断,异常,陷阱

    不管是内中断,外中断,软中断还是硬中断都是按照中断源来划分的. 一.外中断 狭义上的中断(interruption)指的就是外中断. 指来自CPU执行指令以外的事件的发生,希望处理机能够向设备发下一个 ...

  7. 20. GD32F103C8T6入门教程-adc使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组

    adc 使用教程6-使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组 ADC支持18个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道 规则组,可以按照特定的序列 ...

  8. 单片机应用系统设计技术——单一外中断的应用

    单一外中断的应用 一.实验目的 二.实验内容 三.实验步骤 四.C代码如下 五.实验结果

  9. 中断:内中断(异常)与外中断(中断)

    文章目录 中断 一.中断的概念 1.中断的作用 2.中断机制的基本实现原理 3.中断的分类:内中断(异常)与外中断(中断) 二.外部中断 1.外中断的概念 外中断举例:时钟中断.I/O中断 2.中断响 ...

最新文章

  1. list对oracle结果集排序了_文章推荐系统系列之基于 FTRL模型的在线排序
  2. mysql二维数组vb_VBA链接MYSQL的帮助类
  3. 2021Java就业笔试题总结
  4. 利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能
  5. golang学习之旅(1)
  6. 【软件工程】集成开发
  7. 一个iOS 框架介绍:MKNetworkKit
  8. Xna环境在PC平台下的功能扩展
  9. 集训被虐第一天7.31
  10. 在mac os中设置环境变量
  11. 让你的AIR程序自动检测更新,并自动下载、更新到新版本。
  12. 小米无线网卡linux驱动下载,Linux 下小米WIFI 的无线网卡驱动
  13. db2 jdbc驱动参数_db2的jdbc驱动安装及例子
  14. excel如何给文件加密、工作簿加密、工作表加密(office2019)
  15. 重装服务器系统只装C盘,如何只重装C盘的系统?
  16. 携程航班信息爬取(python)---第一次写博客,不好请别见外!
  17. 第7章第24节:双图排版:两张图片的一大一小对比排版 [PowerPoint精美幻灯片实战教程]
  18. 《计算机组成原理》— 计算机组成原理(一)
  19. ngrok配置信息_ngrok配置https
  20. 2019最新迅为-i.MX6Q开发板资料目录

热门文章

  1. 管理员工绩效的 7 个最佳策略
  2. java执行jar包出错:Unable to access jarfile
  3. 鼠标变形史:都是你想不到的奇葩
  4. 基于XInput的罗技手柄编程
  5. 攻防世界(misc)---pdf
  6. 水电厂计算机监控系统设计,水电厂计算机监控系统设计与实现
  7. 2003系统主机溢出提权漏洞分析
  8. 来谈谈海尔采购与供应链管理的智慧!
  9. 【C#】WinForm 之 DOTA2英雄搭配助手(网页抓取+在线绿色版+源码开放)
  10. 计算机等级考试昆山报名点,江苏计算机等级考试报名地点