추석에 test를 하다가 제가 외부 인터럽트에 대해서 test하는 도중이였어요 ㅋ
근데 스위치중에 저는 리셋옆에 있는 스타트 스위치만 인터럽트가 발생하던데 ㅋ
다른버튼은 먹통이네여 ㅌㅌ 가르쳐주세요 ㅠ_ㅠ
소스는 ㅋ AVR-GCC로 하였구요 ㅋㅋ
내용은 이렇습니다.
// 작성 년 월 일 : 2007년 9월 26일
// 작성자 : 우주환
// project Name :KEY_TEST
#include <io.h>
#include "D:\내장형하드웨어\AVR\header\delay\delay.h"
#include "D:\내장형하드웨어\AVR\header\Comdef\Comdef.h"
#include <include\avr\interrupt.h>
void Init_Port (void)
{
DDRA=0xff; //Sensor_out PORT
PORTA=0x00;
DDRB=0xff; //LED PORT
PORTB=0xff;
// DDRD=0xff; //LCD PORT
// PORTD=0xff;
DDRE=0x0f; //KEY & BEEP PORT
PORTE=0xf0;
DDRF=0x00; // Sensor_in PORT
PORTF=0x00;
}
void Init_key (void)
{
EICRB=0xAA; //int4~7 핀의 하강에지가 인터럽트를 트리거 한다.
EIMSK=0xf0; //int4~7 핀의 인터럽트를 허용한다.
EIFR=0xff; //clear interrupt flag
}
ISR(INT4_vect)
{
PORTB=0x01; //LED PORT 0b00000001;
Delay_ms(10); //delay 10MS 제가 만든거라서 조금 사용법은 다를수 있습니다.
}
ISR(INT5_vect)
{
PORTB=0x02; //LED PORT 0b00000010;
Delay_ms(10); //delay 10MS 제가 만든거라서 조금 사용법은 다를수 있습니다.
}
ISR(INT6_vect)
{
PORTB=0x04; //LED PORT 0b00000100;
Delay_ms(10); //delay 10MS 제가 만든거라서 조금 사용법은 다를수 있습니다.
}
ISR(INT7_vect)
{
PORTB=0x08; //LED PORT 0b00001000;
Delay_ms(10); //delay 10MS 제가 만든거라서 조금 사용법은 다를수 있습니다.
}
void main (void)
{
Init_port();
Delay_ms(10);
Init_key ();
Delay_ms(10);
sei(); //global interrupt enable
while(1)
{
}
}
//이 소스에서 INT4만 외부인터럽트가 발생하고 나머지는 발생하지 않는데
소스가 잘못된 건가요???
ㅋㅋ 몰라요~~~스코프로 스위치마다 파형함 찍어보시고 제대로 되면~~소스 문제겠지요..
조만간 제가 소스 이것저것 만들어서 전부 테스트를 해봐야할듯;;
눈으로 봐서는..ㅋㅋ
근데 왜 그런지 아직 이해는 안된다는 ㅋㅋㅋ
위의 소스에서 포트 초기화 부분에
void Init_port (void)
{
...
....
DDRE=0xff;
PORTE=0x00;
}
이렇게 선언해주니 되는군요 ㅋ
PORTE=0x00;
헐 출력으로 설정하니 된다니요..먼가 이상한..ㅋㅋㅋ
네네 아직 저도 이해가 안가요 ㅋㅋㅋ 근데 AVR-GCC에선 되요 ㅋㅋㅋ
내부 풀업 풀다운이 의심스럽긴 하군요..근데 저러케 레지스터 설정해서는 풀업이 안될텐데..이궁-_-;;
미스테리하군요.ㅋ.ㅋ
??? 포트를 출력으로 한다는 게 이상하네요