Atmega328p外部中断切换模式

时间:2018-07-17 01:45:21

标签: toggle interrupt interrupt-handling led

我正在做一个个人项目,其中涉及我按下一个按钮,该按钮使我可以切换两种模式。我有以下代码。我已经调试了按钮硬件Hardware debug Schematic

到目前为止,发生的事情是当我最初打开MCU的电源时,LED亮了。当我按下按钮时,LED熄灭。当我再次按下按钮时,LED会一直熄灭,直到我一遍又一遍地按下它。 LED将以随机间隔切换。

#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz clock speed
#endif


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>


#define SECUR    PD2     //Mode button
#define DISAM    PD3     //Mode LED

volatile uint8_t toggle0 = 1;


ISR(INT0_vect)
{
if (toggle0){
    toggle0=0;
}
else{
    toggle0=1;
}
}

int main(void)

{


DDRD |= (1<<3);     // configure PORTD2 as input
DDRD &= ~(1<<2);    // configure PORTD3 as output

EICRA |= (1 << ISC00)|(1 << ISC10);    // set INT0 to trigger on       Rising     edge
EIMSK |= (1 << INT0);                 // Turns on INT0
sei();                               // turn on interrupts

sei();               // Enable global interrupts

while (1)

{
    if(toggle0)
    {
        PORTD |= (1<<PD3);   // Mode LED off
    }
        else
        {
        PORTD &= ~(1<<PD3);   //Mode LED on
        }
    }
}

0 个答案:

没有答案