마이크로프로세서 응용 및 실험 - Interrupt(인터럽트)
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

마이크로프로세서 응용 및 실험 - Interrupt(인터럽트)에 대한 보고서 자료입니다.

목차

마이크로프로세서 응용 및 실험 - Interrupt(인터럽트)

1. 설계과제의 목표 및 제한조건

2. 서론

3. 본론

4. 결론

본문내용

C = 0xff;
}else if(int0_count%2==1){
PORTA = 0x00;
PORTC = segment[n];
}
delay(500,500);
GIFR = 0x80;
}
인터럽트 2번이 실행될 때 마다 n값이 1씩 작아진다. n이 0보다 작아지면 다시 7로 되돌린다.
int0_count가 짝수일 때 led[]의 n번째 값이 led에 출력되도록 하고, int0_count가 홀수일 때 segment[]의 n번째 값이 출력되도록 한다.
bounce방지를 위해 딜레이를 주고 비트클리어를 위해 GIFR=0x20(INTF2)을 준다.
SIGNAL(SIG_INTERRUPT2)
{
n--;
if(n<0)
n=7;
if(int0_count%2==0){
PORTA = led[n];
PORTC = 0xff;
}else if(int0_count%2==1){
PORTA = 0x00;
PORTC = segment[n];
}
delay(500,500);
GIFR = 0x20;
}
핀A, C를 출력으로 설정.
맨 처음의 7-segment는 꺼진 상태로 설정.
int main()
{
initialize();
DDRA = 0xff;
DDRC = 0xff;
PORTC = 0xff;
while(1);
}
void initialize(void)
INT0,1,2를 모두 사용하므로 GICR = 0xe0
INT0,1이 rising 할 때 인터럽트를 발생시키게 하기 위해 MCUCR=0x0f
INT2 또한 Rising edge로 설정
Global interrupt Enable은 sei()로 인터럽트사용을 가능하게 한다.
마지막으로 delay문 넣어준다.
{
GICR = 0xe0;
MCUCR = 0x0f;
MCUCSR = 0x40;
sei();
}
void delay(int d1,int d2)
{
int i,j;
for(i=0;i for(j=0;j }
}
◎ 결과
1) Decoder 설계
아무것도 누르지 않았을 때 첫 번째 led에 불이 들어오는 것을 볼 수 있다.
1번 Push switch만 누르고 있을 때 1칸을 이동한 두 번째 led 에 불이 들어오고, 세 개의 push switch를 누르고 있을 때 마지막 칸인 8번째 led에 불이 들어오는 것을 볼 수 있다.
2) LED 또는 7-segment로의 선택적 점등
맨 처음 작동시켰을 때 led의 첫 번째 칸에 불이 들어온다. 2번 push switch를 누를 때마다 led의 불이 한칸씩 증가되는 것을 볼 수 있었다.
1번 push switch를 눌렀을 때 led가 소등되고 7-segment에 led에 출력되는 수에 해당하는 숫자가 표시되는 것을 볼 수 있었다. 3번 push switch를 누를 때마다 7-segment에 표시되는 숫자가 하나씩 작아지는 것을 확인하였다.
4. 결론
1) Decoder 설계
각 인터럽트에 a=1, b=2, c=4 값을 주고 main에서 n=a+b+c를 하여 led=0x01의 값을 n만큼 시프트하는 방법을 사용하였다.
INT0, INT1의 설정은 MCUCR의 logic change 옵션을 사용하여 어렵지 않게 했지만 INT2의 MCUCSR는 logic change 옵션이 없어서 애를 많이 먹었다. 그래서 logic change를 임의로 코딩해주었다.
if((MCUCSR&0x40)==0x40)
MCUCSR = 0x00;
else if((MCUCSR&0x00)==0x00)
MCUCSR = 0x40;
인터럽트가 실행되고 rising edge가 설정되어 있으면 falling edge로 바꾸어 버튼을 뗄 때 인터럽트가 다시 한 번 실행되게 하여 interrupt_count2와 c의 값을 0으로 바꾼 후 인터럽트가 종료되기 전 위의 else if문으로 다시 rising edge로 설정해주는 방법을 사용하였다.
또한 딜레이를 이용하여 debounce 해주었다.
2) LED 또는 7-segment로의 선택적 점등
INT0로 int0_count라는 변수를 증가시키고 if문을 사용하여 int0_count가 짝수인지 홀수인지 판단하여 led를 출력할지 7-segment를 출력할지 결정하는 방법을 사용하였다.
INT1과 INT2에는 n이라는 변수를 증가, 감소시키도록 해놓고 led와 7-segment의 출력값을 미리 배열시켜놓고 난 후 n번째의 값을 출력하도록 하였다.
여기서는 모든 interrupt를 rising edge로 설정하였다.
이 실험도 역시 딜레이를 이용하여 debounce 해주었다.
  • 가격2,000
  • 페이지수9페이지
  • 등록일2015.04.27
  • 저작시기2015.4
  • 파일형식한글(hwp)
  • 자료번호#965213
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니