외부 인터럽트실험2
INT0, INT1 을 이용한 인터럽트 테스트
LED를 천천히 한 이유는...?
루틴 복귀지점을 정확히 파악하기 위함임...
4번째에서 인터럽트 시키면 복귀 할 때 다음작업인 5번째에서 켜짐
아주 똑똑한 녀석임.. ^^*
( 참고 : 스위치가 정확히 눌리기가 어려워 인터럽트가 2번 발생할 경우도 있음 )
===========================================================================================
// 인터럽트를 실험 하기 위한 소스
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include "avr/dy.h"
unsigned char i,pb_sum, pc_sum;
void port_init(void)
{
DDRB = 0xff;
DDRC = 0xff;
DDRD = 0x00;
PORTB = 0x00;
PORTC = 0x00;
}
void port_subinit(void)
{
 pb_sum = 0;
 pc_sum = 0;
 PORTB = 0x00;
 PORTC = 0x00;
 delay_ms(1000);
}
SIGNAL(SIG_INTERRUPT0)
{
 port_subinit();
 for(i = 32; i > 0; i/=2)
 {
  pc_sum += i;
  PORTC = pc_sum;
  delay_ms(2000);
 }
for(i = 32; i > 0; i/=2)
{
  pb_sum += i;
  PORTB = pb_sum;
  delay_ms(2000);
 }
port_subinit();
}
SIGNAL(SIG_INTERRUPT1)
{
 char num[2][6]={ {32, 48, 56, 60, 62, 63}, 
   {1, 3, 7, 15, 31, 63} };
 port_subinit(); 
for(i = 0; i < 6; i++)
 {
  PORTB = num[0][i];
  PORTC = num[1][i];
  delay_ms(2000);
 }
 port_subinit();
}
void extint_init(void)
{
 MCUCR = (1<<ISC11)|(1<<ISC10)|(1<<ISC01)|(0<<ISC00);
}
void extpin_enable(void)
{
 GIMSK = (1<<INT1)|(1<<INT0);
}
int main(void)
{
 unsigned char i,pb_sum, pc_sum;
port_init();
 extint_init();
 extpin_enable();
 sei();
while(1)
 {
  for(i = 1; i < 64; i*=2)
  {
   pb_sum += i;
   PORTB = pb_sum;
   delay_ms(2000);
  }
  for(i = 1; i < 64; i*=2)
  {
   PORTB = 0xff;
   pc_sum += i;
   PORTC = pc_sum;
   delay_ms(2000);
  }
pb_sum = 0;
  pc_sum = 0;
  PORTB = 0x00;
  PORTC = 0x00;
  delay_ms(1000);
 }
}
'MicroProcessor > AVR' 카테고리의 다른 글
| [AVR] Step1. 개발환경 구축하기 (AVR Studio 4.19) (0) | 2017.03.12 | 
|---|---|
| cmd에서 avrdude를 이용하여 퓨즈비트 쓰기 (0) | 2012.05.23 | 
| USBasp - avrdude 명령어 (0) | 2012.05.22 | 
| 폴링방식과 인터럽트 방식의 차이점 (0) | 2012.03.09 | 
| USART 통신 기본 (0) | 2012.03.09 | 
| 1분 카운터 & LED switching (0) | 2012.03.09 | 
| ATmega8 OSCCAL 레지스터 사용하기 (0) | 2012.03.09 | 
댓글
이 글 공유하기
다른 글
- 
cmd에서 avrdude를 이용하여 퓨즈비트 쓰기cmd에서 avrdude를 이용하여 퓨즈비트 쓰기2012.05.23
- 
USBasp - avrdude 명령어USBasp - avrdude 명령어2012.05.22
- 
폴링방식과 인터럽트 방식의 차이점폴링방식과 인터럽트 방식의 차이점2012.03.09
- 
USART 통신 기본USART 통신 기본2012.03.09