BASIC4MCU | 질문게시판 | 스위치 누르기전에 동작합니다.
페이지 정보
작성자 전자학습자 작성일2020-01-21 17:17 조회15,369회 댓글4건본문
안녕하세요 atmega128 8비트 타이머 오버플로 인터럽트를 이용해서
LED3개를 켰다가 끄는 동작을 짜서 실행했습니다.
결과는 전원을 넣자마자 LED 1(PORTB=1) , LED2(PORTB=2), LED3(PORTB=4)이
순서대로 각각 1초씩 켜졌다 꺼집니다.
이것을 스위치(외부풀업사용) PINE&4를 눌렀을때 동작하고싶어서
아래와같이 수정했습니다 (빨간글씨)
if문을 넣엇음에도 전원을 켜자마자 바로 동작을해버리는 상황입니다.
놓친부분이 무엇이있을까요??
#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 <3)sec++;}
if (sec < 1) PORTB=1;
else if (sec < 2) PORTB=2;
else if (sec < 3) PORTB=4;
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;
}
댓글 4
조회수 15,369master님의 댓글
master 작성일
PE2에 외부 풀업저항 달려있나요?
스위치 누르기 전에 HIGH로 있어야하며, 누르면 LOW가 되어야합니다.
전자학습자님의 댓글
전자학습자
예 외부풀업을 달아놓았습니다. 스위치를 high->low로 하던지 low->high로 하던지
무조건 전원을 넣으면 바로 동작합니다. 스위치를 누르면 led가 켜지는 기본동작도 테스트해보았습니다.
master님의 댓글
master
문제가 될만한 부분이 보이지 않습니다.
잘 체크해보세요
전자학습자님의 댓글
전자학습자
그다지 바꾼것은없는데 뺏다꽂았다 다시 프로그래밍해보고하다보니
갑자기 동작이되고있습니다.. 감사합니다