打印
[信息发布]

Atmel Studio6.2的中断程序

[复制链接]
733|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2025-2-18 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机是mega2560,程序已经够短了,PORTB7引脚***都是高电平,中断有点像是复位,我真的没招了


代码::

#include
#include

int main(void)
{
         DDRB=0x80;
         PORTB=0x00;
         EICRA=0x02;
         EIMSK=0x01;
         sei();
     while(1)
     {
         //TODO:: Please write your application code
     }
}

ISR(INT0_vect)
{
         PORTB=~PORTB;
}

求帮忙

使用特权

评论回复
沙发
huahuagg| | 2025-2-21 18:03 | 只看该作者
试试下面的代码
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h> // 添加看门狗控制头文件

int main(void) {
    wdt_disable();  // 关键!禁用看门狗防止复位
    DDRB  = 0x80;   // PB7输出,其他输入
    PORTB = 0x00;   // 初始低电平
    EICRA = 0x02;   // INT0下降沿触发
    EIMSK = 0x01;   // 使能INT0中断
    sei();

    while(1) { __asm__ __volatile__("nop"); } // 避免空循环优化
}

ISR(INT0_vect) {
    PORTB ^= (1 << PB7); // 仅翻转PB7,避免副作用
}

使用特权

评论回复
板凳
huahuagg| | 2025-2-21 18:03 | 只看该作者
‌看门狗复位‌
ATmega芯片默认不启用看门狗,但部分烧录工具可能意外启用。添加wdt_disable()确保看门狗关闭。

‌中断误操作‌
原始代码使用PORTB=~PORTB会翻转所有PORTB引脚(包括输入引脚),可能导致上拉电阻异常。改为精准操作PB7。

‌信号抖动问题

使用特权

评论回复
地板
花间一壶酒sd| | 2025-2-23 00:12 | 只看该作者
可能是看门狗定时器未关闭,导致单片机不断复位。

使用特权

评论回复
5
zhuotuzi| | 2025-2-24 11:12 | 只看该作者
上面的代码试过解决了吗

使用特权

评论回复
6
zhuotuzi| | 2025-2-24 11:13 | 只看该作者
INT0_vect发生了中断吗

使用特权

评论回复
7
zhuotuzi| | 2025-2-24 11:13 | 只看该作者
是不是没有配置INT0_vect啊,所以没法进入中断?

使用特权

评论回复
8
zhuotuzi| | 2025-2-24 11:14 | 只看该作者
#include <avr/io.h>
#include <avr/interrupt.h>

ISR(INT0_vect) {
    PORTB ^= (1 << PORTB7);  // 翻转 PORTB7 引脚
}

int main(void) {
    // 配置 PORTB7 为输出
    DDRB |= (1 << DDB7);

    // 配置 INT0 为上升沿触发
    EICRA |= (1 << ISC01) | (1 << ISC00);
    EIMSK |= (1 << INT0);

    // 使能全局中断
    sei();

    while (1) {
        // 主循环
    }
}

使用特权

评论回复
9
zhuotuzi| | 2025-2-24 11:14 | 只看该作者
试一下我的 程序可以不

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1376

主题

4321

帖子

0

粉丝