3848|3

31

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430入门之中断基础 [复制链接]

MSP430入门之中断基础

中断的重要性让我怎么分享呢?我个人觉得中断是基于单片机系统编程的核心,熟练的掌握中断是写好SuperLoop程序的基础。单片机的资源毕竟有限,中断掌握好了、协调好了,程序的生命力自然就好了。            
闲话少叙,先上一段程序吧。

Code:该程序实现通过按键,使两个LED灯交替闪烁。P1.3连接button,P1.0和P1.6连接LED。
#include "msp430g2452.h"

void inIt(void);

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
inIt();    //初始化函数,跟昨天相比,提出更高的要求,main函数的可读性要强,所以有了这个函数,将需要初始化的地方都集成到一个函数中,这样后续查程序、维护程序的时候也方便!       
_EINT();    //使能中断

while(1);  //基于中断的程序都是这样的哦,加一个死循环,这个死循环就相当于Windows系统Task Manager里的System Idle Process,系统没事的时候就过来干这个。  
}

void inIt(void)
{
P1DIR &= ~BIT3;    //P1.3配置为输入
P1DIR |= (BIT0 | BIT6);    //P1.0和P1.6配置为输出
P1OUT |= BIT0;    //为了达到交替闪烁的效果,先把P1.0置1,此时P1.6时默认值0   
P1IFG &= ~BIT3;    //清除中断标志,这里先提前记住清除中断标志比较重要哦,后面还会用到   
P1IES |= BIT3;    //设置中断为下降沿触发
P1IE |= BIT3;    //允许P1.3中断
}

#pragma vector = PORT1_VECTOR  //PORT1_VECTOR是中断向量的名字,如果这个名字写错了中断就捕获错了,不清楚的话记得查中断向量表      
__interrupt void PORT1_3(void)    //PORT1_3是中断函数的名字,这个名字是可以自己定义滴
{
unsigned int t = 4000;    //延时,防止按键抖动,其实这里拿掉程序也是可以运行的。如果对实时性要求高的话,延时是必须待拿掉滴!!   
while (t--);
if ((P1IFG & BIT3))    //读取中断标志,在这个程序里其实也可以拿掉,这里多判断一遍起到保险的作用,毕竟大的程序项目里还有别的中断,是可能把中断标志清掉的           
{
P1OUT ^= BIT0;    //取反,这样就交替显示了 
P1OUT ^= BIT6;
P1IFG &= ~BIT3;    //这个地方很重要哦,中断处理完了之后记得要把中断标志位清除掉。暂时还不清楚是不是MSP430特有的,其实AVR中断标志位在中断结束后就自动清掉了!  
}
}

中断函数的要求大家知道的吧?要尽可能的短,能够很快的从中断里跳出来,所以里面加了延时我觉得是非常不合理的。防抖动也不应该在中断里做啊!AVR端口中断是支持硬件防抖的,暂时不知道MSP430硬件上是否有这个功能。把中断函数简写成如下形式,实验下来没发现问题。
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_3(void)
{
P1OUT ^= BIT0;
P1OUT ^= BIT6;
P1IFG &= ~BIT3;
}

后续慢慢的深入这个问题吧~ 
pt void PORT1_3(void)
{
unsigned int t = 4000;
while (t--);
if ((P1IFG & BIT3))
{
//P1OUT |= (BIT0 | BIT6);
P1OUT ^= BIT0;
P1OUT ^= BIT6;
P1IFG &= ~BIT3;
}

 

以上是个转帖,是我在研究主观题的定时器的寄存器时找到的参考,我觉得还不错,发上来给和我一样的菜鸟们参考参考。仔细看看的话对答题会有帮组哦~

答完高级题目和中级题目后,怎么我觉得怎么中级比高级要难一些。

最新回复

讲得还可以吧  详情 回复 发表于 2012-6-29 10:06

点评

呵呵 谢谢分享 :)  详情 回复 发表于 2012-6-28 08:53
 
点赞 关注

回复
举报

2万

帖子

71

TA的资源

管理员

沙发
 

回复 楼主 ljh999 的帖子

呵呵  谢谢分享  
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
没有开总中断吗?GIE?
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(初级)

4
 
讲得还可以吧
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表