BASIC4MCU | 질문게시판 | avr atmeag128 외부 인터럽트 led 순차 점등 질문입니다.
페이지 정보
작성자 넉굴이 작성일2019-12-20 02:06 조회8,594회 댓글2건본문
이제막 avr atmega128 를 배우는 초보입니다.
PD0에 스위치 연결해놓았고 4개의 led가 연결되어 있습니다.
초기상태에서 인터럽트 발생시 1켜지고 꺼진후 2켜지고 꺼진후 3켜지고 꺼진후 4켜지고 꺼진후 led가 초기상태로 돌아오게 하고싶습니다.
처음사진에서는 원하는 작동을 하는데 두번째 사진처럼 쉬프트 명령어 아래 딜레이를 하나더 집어넣으면 led가 12 13 14 순서로 두개씩점등됩니다.
PORTA를 led로 char 안해줘서 그런거 같긴한데 어떻게 고쳐야할까요 ..ㅠㅠㅠ
타이머는 아직 배우지않아서 delay만 사용해야합니다.
아예 싹 뜯어 고쳐주셔도 됩니다 ㅠㅠㅠ 조언 부탁드리겠습니다.
댓글 2
조회수 8,594master님의 댓글
master 작성일소스코드는 텍스트로 첨부해주세요
넉굴이님의 댓글
넉굴이
#define F_CPU16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
ISR(INT0_vect)
{
PORTA=0b11111110;
_delay_ms(100);
while(1)
{
PORTA <<=1;
_delay_ms(100); 이부분에 딜레이 넣을시
PORTA |=0b00000001;
_delay_ms(100);
if(PORTA == 0b11101111)
break;
EIFR=0b000000001;
}
cli();
}
int main()
{
DDRA=0b11111111;
DDRD=0b00000000;
PORTA=0b11111111;
EICRA=0b00000010;
EIMSK=0b00000001;
sei();
while(1)
{PORTA = 0b111110011;
}
}