刚入门,写了一个简单中断程序,不知道哪里出毛病了,可以帮忙看看吗,谢谢

zj6240 2023-07-04 20:50:43

#include <msp430.h> 

void delay_ms(int ms)
{
    for(;ms>0;ms--)
    {
        __delay_cycles(1000);
    }
}
/**
 * main.c
 */
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;    // stop watchdog timer
    P1DIR&=~BIT1;
    P1REN|=BIT1;
    P1OUT|=BIT1;
    P1IE|=BIT1;
    P1IES|=BIT1;
    P1DIR|=BIT0;
    P1OUT|=BIT0;
    P1IFG&=~BIT1;
while(1)
{

}

    return 0;
}

#pragma vector = PORT1_VECTOR
  __interrupt void Port_1(void)
 {
     if(P1IFG&BIT1)
     {
         delay_ms(20);
         while(!(P1IN&BIT1));
         P1OUT^=BIT0;
         P1IFG=0;

     }
 }
 

...全文
349 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
六号_ 2023-07-05
  • 打赏
  • 举报
回复

这段代码首先关闭了看门狗定时器,然后配置了P1.1引脚为输入,并启用了内部上拉/下拉电阻。然后,它允许P1.1引脚产生中断,并将中断触发边缘设置为下降沿。接下来,它配置了P1.0引脚为输出,并设置该引脚为高电平。最后,它清除了P1.1的中断标志。

在中断服务例程(ISR)中,如果P1.1的中断标志被设置,那么代码首先延时20毫秒(用于去抖),然后等待P1.1引脚为高电平。然后,它切换P1.0引脚的状态,并清除P1.1的中断标志。

整体来看,这个代码应该是在设置一个按钮中断,当按下按钮(连接到P1.1)时,会切换LED的状态(连接到P1.0)。

至于代码是否有问题,取决于具体的硬件连接和你的需求。但是,通常在处理按钮中断时,你可能需要考虑消除抖动。这个代码中有一个简单的延时去抖,但这可能不是最佳的去抖方案。在更复杂的应用中,你可能需要使用更复杂的去抖策略,比如软件去抖

189

社区成员

发帖
与我相关
我的任务
社区描述
致力于多云管理自动化的探索和创新。 持续构建多云管理工具平台,纵向智能纳管多云资源,横向创新研发高度自动化的业务功能模块,聚合生态,成为云服务商背后的赋能者,助力MSP打造企业云服务管理的IT底座
云原生 企业社区
社区管理员
  • community_740
  • Doran1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧