뉴티씨



  • HOME
  • 고객지원
  • 질문답변

 

 
인터럽트 관련 문의 드립니다.
 글쓴이 : 관리자
작성일 : 20-02-19 13:34
조회 : 6,768  
안녕하세요 고객님,
저희 뉴티씨 제품을 이용하여 주셔서 감사합니다.

EIFR 레지스터를 수정하는 구문(EIFR=0x40; )을 지우시고 다시한번 해보시기바랍니다.
ATmega128 데이터시트상에서는(91페이지) 인터럽트루틴 발생 시
플래그가 clear된다고 되어있습니다.

 - INT7:0 in EIMSK, are set (one), the MCU will jump to the interrupt vector.
 - The flag is cleared when the interrupt routine is executed.

감사합니다.

>
>
> 현재 전원이 on되면 인터럽트 INT0가 활성화되며
> 스위치를 누르면 인터럽트가 off됩니다..
> 이것을 스위치를 on하면 인터럽트가 활성화되게 하려면 어떻게 변경해야 할까요?
>
> #define F_CPU 16000000L          //_delay_ms()를 사용하기 위해서는 클럭 주파수를 정의 해주어야 한다.
> #include <avr/io.h>                        // Atmega128의 각 레지스터와 포트들에 대한 정의를 포함한다. (어떤 cpu든 기본 사용)
> #include <util/delay.h>                  // _delay_ms()를 사용하기 위해 정의 되어 있는 delay.h 파일을 포함한다.
> #include <avr/interrupt.h>
>
>
>
>
> ISR(INT0_vect)// 핵심 인터럽트가 걸리면 여기로 점프
> {
> PORTA=0xF0;
> _delay_ms(500);
> EIFR=0x40;      //인터럽트 발생신호를 초기화해 다시 인터럽트를 받을수 있는 상태로 만듬
> }
>
>
>
> int main(void)
> {
> PORTA=0x00;
> DDRA=0xFF;    //포트A의 모든 포트를 출력상태로 설정
> EIMSK =0x01;  //INT0의 인터럽트를 허용
> MCUCR=0x03;  //MCUCR의 0번, 1번 비트를 1호 상승에지에 인터럽트 동작을 설정
>
> sei();        //모든 인터럽트를 허용
>
> while(1)
> {
> PORTA=0xFF;
> _delay_ms(500);
>     PORTA=0x00;
> _delay_ms(500);
> }
> return 0;
> }
>

 
   
 

 


1