9845|20

210

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

MSP430系列IO中断输入,简介和应用 [复制链接]

       看到有网友在请教IO中断方面的问题,我刚好在工作中用过MSP430。论坛这次团购活动很好,收到开发板之后,一直想和大家分享一些自己学习到的东西。

       我的开发环境:软件IAR5.2;硬件是团购的LaunchPad

       MSP430的IO中断由P1口和P2口输入变化的电平触发,P1和P2各有八个输入IO,P1的八个IO共用一个中断向量,P2的八个IO共用另一个中断向量。在中断服务程序中判断到底是哪个IO口触发中断。

       IO口中断相关的寄存器包括:1. PxIFG(中断标志位) 2. PxIES(电平触发边沿) 3. PxIE(中断开启位) 4. PxREN(IO口上下拉)。

       首先是初始化IO中断函数

       void Key_init(void)
       {
           P1REN |= BIT3;              //打开上拉,电路板上没有上拉电阻,触发边沿是从高电平到低电平
           P1IES |= BIT3;                //选择触发边沿,从高电平到低电平

           P1IFG &= ~BIT3;            //清除P1.3的中断标志位(可以不清除,为了确保初始化之后为标志位不会触发中断)
           P1IE  |= BIT3;                 //打开P1的中断      
           
       }

 

       主函数

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗

  P1DIR |= BIT6;                                                 //P1.6管脚设置为输出
  P1OUT |= BIT6;                                               //P1.6管脚输出高电平,点亮LED2
  Key_init();                                                        //调用IO中断初始化函数
  __enable_interrupt();                                      //开启总中断,这一步没有的话,所有的中断都不能触发
  while(1)                                                           //死循环
  {
    ;
  }
}

  中断服务函数

#pragma vector = PORT1_VECTOR                //中断向量声明
__interrupt void Key_interrput(void)
{           
  if(P1IFG&BIT3)                                                //判断是不是P1.3这个IO口产生了中断
  {
    P1OUT ^= BIT6;                                             //LED2取反
    P1IFG &= ~BIT3;                                           //清除中断标志位,这一步一定要有。
  }

  else

 {

   P1IFG = 0x00;

 }
}

 

   注意事项:

   1.记得开启总中断,要不然所有的中断都不能触发。

   2.如果电路板没有上拉电阻,就要设置MSP430的IO内部上拉。

   3.中断服务函数中,要记得清除中断标志位。

touch.rar

29.69 KB, 下载次数: 236

IO中断的源程序

最新回复

嗯,加了之后就功能正常了  详情 回复 发表于 2017-2-13 13:31

点评

经典!  详情 回复 发表于 2012-7-8 17:41

赞赏

1

查看全部赞赏

 
点赞 关注

回复
举报

1万

帖子

16

TA的资源

版主

沙发
 

楼主写的清楚极了,一看就是个老手

:carnation:
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

板凳
 
请问楼主,一般消除按键抖动是怎么处理的?
 
 
 

回复

210

帖子

0

TA的资源

纯净的硅(高级)

4
 
按键去抖一般分为硬件去抖和软件去抖。并且去抖的要求精度也和具体的应用有关系。 硬件去抖一般是并联103或者104的电容,这个是个人的经验习惯。 软件去抖一般是延时再次采样,或者一旦检测到按键,触发定时器例如20ms,再次采样。 我的应用中,IO中断是其他芯片给我的信号,所以没有采取去抖措施。另一个按键对于抖动的要求不高,只是简单的并联电容。
 
 
 

回复

210

帖子

0

TA的资源

纯净的硅(高级)

5
 

回复 沙发 ddllxxrr 的帖子

版主是丹东的?国庆刚去了丹东
 
 
 

回复

1万

帖子

16

TA的资源

版主

6
 

回复 5楼 xingkong911 的帖子

楼主怎么知道我是丹东的?
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

210

帖子

0

TA的资源

纯净的硅(高级)

7
 

回复 6楼 ddllxxrr 的帖子

你的资料中间写着。。。
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢楼主
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢楼主
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

10
 
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 楼主 xingkong911 的帖子

例程解说的很详细了
 
 
 

回复

210

帖子

0

TA的资源

纯净的硅(高级)

12
 
下次再写其他的,有段时间没关注430了
不过论坛里面已经搜集了很多430的详细教程。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

13
 
__enable_interrupt的实现在哪?怎么找不到,  intrinsics.h里就一句话,没看到怎么写寄存器的
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

14
 
楼主,请问为什么只能中断一次啊?再按键就不进中断了啊

点评

晕....复位一下就好了....还纠结那么久...  详情 回复 发表于 2012-6-23 23:20
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

15
 

回复 14楼 AndersonBY 的帖子

晕....复位一下就好了....还纠结那么久...
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

16
 

楼主大神求解

我直接copy你的代码调试后 用launch上面S2按键进入中断  而现象总是出不了 我自己写的也跟你的差不多 但没有上拉这一块 效果确实一样的
我用手或者用杜邦线直接插在1.3引脚上时 反而可以进入中断 困惑中·~~
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

17
 

回复 楼主 xingkong911 的帖子

经典!
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

18
 
为什么运行不出来呢,中断没有用,
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

19
 
楼主的程序可能需要加两句话才能调试通,就是在那个Key_init()那个函数中,加上PIDIR&=~BIT3,设置为输入口,另外是在设置完上拉电阻后,需要加一句P1OUT|=BIT3;我的是这么加过后调试通的,在用户手册里有这么说的,论坛大大也这么讲过
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

20
 
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表