BASIC4MCU | 질문게시판 | atmega 인터럽트 질문이요
페이지 정보
작성자 qwertyuiop 작성일2021-12-19 04:35 조회934회 댓글2건본문
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
스위치 전체 깜빡임
int main()
{
DDRA = 0xFF;
PORTA = 0xFF;
EICRA = 0x80;
EICRB = 0x00;
EIMSK = 0x08;
sei();
while(1)
{
PORTA = 0xFF;
_delay_ms(500);
PORTA = 0x00;
_delay_ms(500);
}
return (1);
}
스위치 하나씩 깜빡이는 인터럽트 발생
ISR(INT3_vect)
{ char i;
while(1){
for(i=0; i<7; i++)
{
PORTA = ~(0x01 <<i);
_delay_ms(100);
}
for(i=0; i<7; i++)
{
PORTA = ~(0x80 >> i);
_delay_ms(100);
}
}
}
스위치 전체 깜빡임이 지속되다가 스위치를 누르면 인터럽트 발생 (스위치 하나씩 깜빡임)이 일어나고,
다시한번 스위치를 누르면 인터럽트를 빠져나와 다시 전체 깜빡임이 지속되는게
반복되도록 하고 싶은데 어떻게 코드를 짜야하나요..?
댓글 2
조회수 934master님의 댓글
master 작성일
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL
#include <util/delay.h>
//
volatile char
//
ISR(INT3_vect){ flag^=1; }
//
int main(){
char i;
DDRA=0xFF; PORTA=0xFF;
EICRA=0x80; EIMSK=0x08; sei();
while(1){
if(flag){
for(i=0;i<7;i++){ PORTA=~(0x01<<i); _delay_ms(100); }
for(i=0;i<7;i++){ PORTA=~(0x80>>i); _delay_ms(100); }
}
else{
PORTA=0xFF; _delay_ms(500);
PORTA=0x00; _delay_ms(500);
}
}
return (1);
}
master님의 댓글
master 작성일
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL
#include <util/delay.h>
//
volatile char
//
ISR(INT3_vect){ flag^=1; }
//
int main(){
char i;
DDRA=0xFF; PORTA=0xFF;
EICRA=0x80; EIMSK=0x08; sei();
while(1){
if(flag){
for(i=0;i<7;i++){ PORTA=~(0x01<<i); if(flag==0)break; _delay_ms(100); }
for(i=0;i<7;i++){ PORTA=~(0x80>>i); if(flag==0)break; _delay_ms(100); }
}
else{
PORTA=0xFF; for(i=0;i<5;i++){ if(flag)break; _delay_ms(100); }
PORTA=0x00; for(i=0;i<5;i++){ if(flag)break; _delay_ms(100); }
}
}
return (1);
}