msp430f149外中断问题
__interrupt void tangle_make(void)
对于多源中断,需要手动清除标志位。比如:P1、P2的中断,需要手动清楚相应的标志位。如果在这种中断中使用“_EINT();”,开中断,而在打开中断之前,没有进行原来中断标识位的清除工作,就会有相同的中断不断的进行嵌套。而导致堆栈溢出引起复位,所以在这类中断中,必须先清除标志位,再打开中断开关。要不然等着死机吧。
总之,就是说在开总中断之前,需要将多源中断标志位清掉。
/*********************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外中断问题相关推荐
- 外中断03 - 零基础入门学习汇编语言71
第十五章:外中断03 让编程改变世界 Change the world by program 继续编写int 9中断例程 第三步:如果是Esc键的扫描码,改变显示的颜色后返回...... 那么,下一个 ...
- 汇编语言随笔(13)- 外中断(可屏蔽中断)、实验15
端口的作用 在PC系统的接口卡和主板上,装有各种接口芯片.这些外设接口芯片内部有若干寄存器,CPU将这些寄存器当作端口来访问. 外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端 ...
- 外中断---汇编学习笔记
外中断 要及时处理外设的输入,显然需要解决两个问题: 外设的输入随时可能发生,CPU如何得知? CPU从何处得到外设的输入? 15.1 接口芯片和端口 外设的输入不直接送入内存和CPU,而是送入相关的 ...
- 外中断02 - 零基础入门学习汇编语言70
第十五章:外中断02 让编程改变世界 Change the world by program 小甲鱼和大家谈谈心 一个帖子引发小甲鱼的反省! 猫姐曾经说过,步子别迈太大,容易扯着蛋! 结果还真蛋疼了- ...
- 51单片机外中断流水灯
按下K3按键,触发外中断,启动灯效; 按下K4按键,触发外中断,停止灯效 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include< ...
- 内中断,外中断,软中断,硬中断,异常,陷阱
不管是内中断,外中断,软中断还是硬中断都是按照中断源来划分的. 一.外中断 狭义上的中断(interruption)指的就是外中断. 指来自CPU执行指令以外的事件的发生,希望处理机能够向设备发下一个 ...
- 20. GD32F103C8T6入门教程-adc使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组
adc 使用教程6-使用外部中断IT11触发启动adc规则通道,使用外中断IT15触发注入组 ADC支持18个多路通道,可以把转换组织成两组:一个规则组通道和一个注入组通道 规则组,可以按照特定的序列 ...
- 单片机应用系统设计技术——单一外中断的应用
单一外中断的应用 一.实验目的 二.实验内容 三.实验步骤 四.C代码如下 五.实验结果
- 中断:内中断(异常)与外中断(中断)
文章目录 中断 一.中断的概念 1.中断的作用 2.中断机制的基本实现原理 3.中断的分类:内中断(异常)与外中断(中断) 二.外部中断 1.外中断的概念 外中断举例:时钟中断.I/O中断 2.中断响 ...
最新文章
- list对oracle结果集排序了_文章推荐系统系列之基于 FTRL模型的在线排序
- mysql二维数组vb_VBA链接MYSQL的帮助类
- 2021Java就业笔试题总结
- 利用BenchmarkDotNet 测试 .Net Core API 同步和异步方法性能
- golang学习之旅(1)
- 【软件工程】集成开发
- 一个iOS 框架介绍:MKNetworkKit
- Xna环境在PC平台下的功能扩展
- 集训被虐第一天7.31
- 在mac os中设置环境变量
- 让你的AIR程序自动检测更新,并自动下载、更新到新版本。
- 小米无线网卡linux驱动下载,Linux 下小米WIFI 的无线网卡驱动
- db2 jdbc驱动参数_db2的jdbc驱动安装及例子
- excel如何给文件加密、工作簿加密、工作表加密(office2019)
- 重装服务器系统只装C盘,如何只重装C盘的系统?
- 携程航班信息爬取(python)---第一次写博客,不好请别见外!
- 第7章第24节:双图排版:两张图片的一大一小对比排版 [PowerPoint精美幻灯片实战教程]
- 《计算机组成原理》— 计算机组成原理(一)
- ngrok配置信息_ngrok配置https
- 2019最新迅为-i.MX6Q开发板资料目录