BASIC4MCU | 질문게시판 | 스위치 눌렀다떼면 동작 질문
페이지 정보
작성자 전자학습자 작성일2020-01-22 10:43 조회3,611회 댓글0건본문
안녕하세요. atmega128 8비트 타이머 오버플로 인터럽트를 이용해서
PINE&4에 연결된 버튼을 한번 눌렀다 떼면 LED1개를 1초동안 켰다가 끄는 동작을 아래와같이 짜서 실행했습니다.
실제로 동작을 시켜보니 버튼을 누르면 PORTB=1 에 연결된 LED가 ON되고
버튼에서 손을 떼면 LED가바로 OFF됩니다. 버튼을 계속 누르고있으면 LED가 설정된 시간만큼(1초) ON되고 꺼집니다.
그리고 한번더 동작시키고싶어서 버튼을 눌러도 LED가 ON되질않습니다.
그래서 빨간색 글씨와같이 수정을해봤습니다.
실제로 동작을 시켜보면 버튼을 누르면 LED가 계속 ON되어있습니다.
어떤식으로 접근해서 수정해야할까요??
#define F_CPU 16000000L
#include <avr/io.h>
#include <avr/interrupt.h>
int count=0, sec=0;
ISR (TIMER0_OVF_vect)
{
if ((PINE&4)==0)
{
count++;
if(count>=1000){
count=0;
if(sec <1)sec++;}
if (sec < 1) PORTB=1;
else PORTB=0;
}
}
int main(void)
{
DDRE = 0x00;
PORTE = 0x00;
sec=0;
count=0;
DDRB = 0x07;
TCCR0 = 0x04; //분주비 64 설정
TIMSK |= (1 << TOIE0);
sei();
while(1);
return 0;
}
=============================================================================
ISR (TIMER0_OVF_vect) { w=0; if ((PINE&8)==0) { w=w+1;}
if(w>=1)
{
while(1) {
count++; if(count>=1000){ count=0; if(sec < 1)sec++;}
if (sec <1) PORTB=1; else { PORTB=0; w=0; count=0; sec=0; } }
}
}
댓글 0
조회수 3,611등록된 댓글이 없습니다.