본문 바로가기

AVR 기초/인터럽트

(4)
[AVR 기초] 스탑워치2 *키트는 Atmega128A를 사용하였습니다* //StopWatch SW1 인터럽트 발생시 시간 o #include #include //인터럽트 헤더파일 선언 >> 인터럽트 사용 가능 #define F_CPU 16000000UL #include volatile int currenttime, stoptime = 0; volatile int go = 1;//변수 GO 만듬. GO 의 값 : 1 설정 unsigned char fnd[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67}; unsigned char fnd_pos[4] = {0x01, 0x02, 0x04, 0x08}; volatile int count = 0; ISR(INT4_vec..
[AVR 기초] 스탑워치 1 *키트는 Atmega128A를 사용하였습니다* //StopWatch SW1 인터럽트 발생시 시간X #include #include #define F_CPU 16000000UL//실제 동작 clock Hz -> 16MHz #include //딜레이 헤더파일 선언 volatile int currenttime, stoptime = 0;//변수를 선언할 때 앞에 volatile 을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듬 //currenttime, stoptime 이라는 변수만듬 unsigned char fnd[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67}; unsigned char fnd_pos[4..
[AVR 기초] 스위치를 이용한 FND 4자리 1씩 증가하기 *키트는 Atmega128A를 사용하였습니다* 스위치를 이용해 FND 4자리 스위치 1씩 증가하기 입니다. 예시를 보겠습니다. 코드는 다음과 같습니다. #include #include //인터럽트 헤더파일 선언 #define F_CPU 16000000UL #include unsigned char fnd[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x67}; unsigned char fnd_pos[4] = {0x01, 0x02, 0x04, 0x08}; volatile int count = 0;//변수 count =0. 인터럽트와 메인에서 함께 사용하는 변수는 volatile을 선언하는것이 안전 ISR(INT4_vect){//Interrupt..
[AVR 기초] 인터럽트(Interrupt)란 우선 인터럽트에 대해 알려드리겠습니다. 마이크로프로세서에서 인터럽트란 마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리를 할 수 있도록 하는것을 말합니다. 폴링이 대상을 주기적으로 감시하면서 상황이 발생하면 실행합니다. 이런 작업은 장치의 상태를 읽는데 마이크로프로세서의 자원이 낭비됩니다. 이와 다르게, 인터럽트는 일을 처리해 달라고 요청하는 수단입니다. 해당 하드웨어가 CPU에게 요청하므로 빨리 처리가 된다면 데이터 손실 위험이 작아지고, 필요할 때 처리되는 경향이 있어서 폴링보다 유리합니다. 마이크로프로세서는 인터럽트를 감지하면 지금 실행중인 코드를 중단하고 해당 입터럽트 처리 코드로 점프..