专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
我想用msp430f5529做一个按键中断程序,就是通过按键P2.1取控制两个ledP1.0和P4.7轮流点亮,但运行进入不了中断
2019-07-15 15:38
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
5785
8
1222
/*
* dcomain.c
*
* Created on: 2015-7-25
* Author: feng
ti
anxu
*/
#include "MSP430f5529.h"
void P2_IODect();
void P21_Onclick();
void GPIO_Init();
void main(void)
{
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
ZSDZXL
2019-07-16 06:19
从2553那拷贝过来的 改了下IO口 可以直接用
/*
* Interrupt_Key_LED.c
* 硬件描述:Launchpad G2553开发板上P1.3接了一个按键,P1.0和P1.6各接了1个LED(用跳线帽连接)。
* 功能描述:按键按下的瞬间,两个LED切换亮灭状态
* Author: Administrator
*/
#include "MSP430f5529.h"
//-----在main函数前提前申明函数-----
void P2_IODect() ;
void P21_Onclick();
void GPIO_init();
void main(void) {
WDTCTL = WDTPW + WDTHOLD; //关狗
GPIO_init(); //IO初始化
_enable_interrupts(); //使能总中断
_bis_SR_register(LPM3_bits); //休眠
}
/******************************************************************************************************
* 名 称:GPIO_Init()
* 功 能:设定按键和LED控制IO的方向,启用按键IO的上拉电阻
* 入口参数:无
* 出口参数:无
* 说 明:无
* 范 例:无
******************************************************************************************************/
void GPIO_init()
{
//-----设定P1.0和P1.6的输出初始值-----
P1DIR |= BIT0; //设定P1.0和P4.7为输出
P4DIR |= BIT7;
P1OUT |= BIT0; //设定P1.0初值
P4OUT &= ~BIT7; //设定4.7初值
//-----配合机械按键,启用内部上拉电阻-----
P2REN |= BIT1; //启用P2.1内部上下拉电阻
P2OUT |= BIT1; //将电阻设置为上拉
//-----配置P1.3中断参数-----
P2DIR &= ~BIT1; // P2.1设为输入(可省略)
P2IES |= BIT1; // P2.1设为下降沿中断
P2IE |= BIT1 ; // 允许P2.1中断
}
/******************************************************************************************************
* 名 称:PORT1_ISR()
* 功 能:响应P1口的外部中断服务
* 入口参数:无
* 出口参数:无
* 说 明:P1.0~P1.8共用了PORT1中断,所以在PORT1_ISR()中必须查询标志位P1IFG才能知道
* 具体是哪个IO引发了外部中断。P1IFG必须手动清除,否则将持续引发PORT1中断。
* 范 例:无
******************************************************************************************************/
#pragma vector = PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
//-----启用Port1事件检测函数-----
P2_IODect(); //检测通过,则会调用事件处理函数
P2IFG=0; //退出中断前必须手动清除IO口中断标志
}
/******************************************************************************************************
* 名 称:P2_IODect()
* 功 能:判断具体引发中断的IO,并调用相应IO的中断事件处理函数
* 入口参数:无
* 出口参数:无
* 说 明:该函数兼容所有8个IO的检测,请根据实际输入IO激活“检测代码”。
* 本例中,仅有P2.1被用作输入IO,所以其他7个IO的“检测代码”没有被“激活”。
* 范 例:无
******************************************************************************************************/
void P2_IODect()
{
unsigned int Push_Key=0;
//-----排除输出IO的干扰后,锁定唯一被触发的中断标志位-----
Push_Key=P2IFG&(~P2DIR);
//-----延时一段时间,避开机械抖动区域-----
__delay_cycles(10000); //消抖延时
//----判断按键状态是否与延时前一致-----
if((P2IN&Push_Key)==0) //如果该次按键确实有效
{
//----判断具体哪个IO被按下,调用该IO的事件处理函数-----
switch(Push_Key){
// case BIT0: P10_Onclick(); break;
case BIT1: P21_Onclick(); break;
// case BIT2: P12_Onclick(); break;
// case BIT3: P13_Onclick(); break;
// case BIT4: P14_Onclick(); break;
// case BIT5: P15_Onclick(); break;
// case BIT6: P16_Onclick(); break;
// case BIT7: P17_Onclick(); break;
default: break; //任何情况下均加上default
}
}
}
/******************************************************************************************************
* 名 称:P13_Onclick()
* 功 能:P1.3的中断事件处理函数,即当P1.3键被按下后,下一步干什么
* 入口参数:无
* 出口参数:无
* 说 明:使用事件处理函数的形式,可以增强代码的移植性和可读性
* 范 例:无
******************************************************************************************************/
void P21_Onclick()
{
//-----翻转IO电平-----
P1OUT ^= BIT0;
P4OUT ^= BIT7;
}
加载中...
查看其它8个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
/*
* Interrupt_Key_LED.c
* 硬件描述:Launchpad G2553开发板上P1.3接了一个按键,P1.0和P1.6各接了1个LED(用跳线帽连接)。
* 功能描述:按键按下的瞬间,两个LED切换亮灭状态
* Author: Administrator
*/
#include "MSP430f5529.h"
//-----在main函数前提前申明函数-----
void P2_IODect() ;
void P21_Onclick();
void GPIO_init();
void main(void) {
WDTCTL = WDTPW + WDTHOLD; //关狗
GPIO_init(); //IO初始化
_enable_interrupts(); //使能总中断
_bis_SR_register(LPM3_bits); //休眠
}
/******************************************************************************************************
* 名 称:GPIO_Init()
* 功 能:设定按键和LED控制IO的方向,启用按键IO的上拉电阻
* 入口参数:无
* 出口参数:无
* 说 明:无
* 范 例:无
******************************************************************************************************/
void GPIO_init()
{
//-----设定P1.0和P1.6的输出初始值-----
P1DIR |= BIT0; //设定P1.0和P4.7为输出
P4DIR |= BIT7;
P1OUT |= BIT0; //设定P1.0初值
P4OUT &= ~BIT7; //设定4.7初值
//-----配合机械按键,启用内部上拉电阻-----
P2REN |= BIT1; //启用P2.1内部上下拉电阻
P2OUT |= BIT1; //将电阻设置为上拉
//-----配置P1.3中断参数-----
P2DIR &= ~BIT1; // P2.1设为输入(可省略)
P2IES |= BIT1; // P2.1设为下降沿中断
P2IE |= BIT1 ; // 允许P2.1中断
}
/******************************************************************************************************
* 名 称:PORT1_ISR()
* 功 能:响应P1口的外部中断服务
* 入口参数:无
* 出口参数:无
* 说 明:P1.0~P1.8共用了PORT1中断,所以在PORT1_ISR()中必须查询标志位P1IFG才能知道
* 具体是哪个IO引发了外部中断。P1IFG必须手动清除,否则将持续引发PORT1中断。
* 范 例:无
******************************************************************************************************/
#pragma vector = PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
//-----启用Port1事件检测函数-----
P2_IODect(); //检测通过,则会调用事件处理函数
P2IFG=0; //退出中断前必须手动清除IO口中断标志
}
/******************************************************************************************************
* 名 称:P2_IODect()
* 功 能:判断具体引发中断的IO,并调用相应IO的中断事件处理函数
* 入口参数:无
* 出口参数:无
* 说 明:该函数兼容所有8个IO的检测,请根据实际输入IO激活“检测代码”。
* 本例中,仅有P2.1被用作输入IO,所以其他7个IO的“检测代码”没有被“激活”。
* 范 例:无
******************************************************************************************************/
void P2_IODect()
{
unsigned int Push_Key=0;
//-----排除输出IO的干扰后,锁定唯一被触发的中断标志位-----
Push_Key=P2IFG&(~P2DIR);
//-----延时一段时间,避开机械抖动区域-----
__delay_cycles(10000); //消抖延时
//----判断按键状态是否与延时前一致-----
if((P2IN&Push_Key)==0) //如果该次按键确实有效
{
//----判断具体哪个IO被按下,调用该IO的事件处理函数-----
switch(Push_Key){
// case BIT0: P10_Onclick(); break;
case BIT1: P21_Onclick(); break;
// case BIT2: P12_Onclick(); break;
// case BIT3: P13_Onclick(); break;
// case BIT4: P14_Onclick(); break;
// case BIT5: P15_Onclick(); break;
// case BIT6: P16_Onclick(); break;
// case BIT7: P17_Onclick(); break;
default: break; //任何情况下均加上default
}
}
}
/******************************************************************************************************
* 名 称:P13_Onclick()
* 功 能:P1.3的中断事件处理函数,即当P1.3键被按下后,下一步干什么
* 入口参数:无
* 出口参数:无
* 说 明:使用事件处理函数的形式,可以增强代码的移植性和可读性
* 范 例:无
******************************************************************************************************/
void P21_Onclick()
{
//-----翻转IO电平-----
P1OUT ^= BIT0;
P4OUT ^= BIT7;
}
一周热门 更多>