프로그래밍

ATmega8을 이용한 인터럽트 도움부탁드립니다.

by 이응 posted Jan 06, 2015
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?
  • WhiteAT 2015.01.06 21:54

    앞의 글과 거의 비슷한 내용이네요.

    여기에 붙여 넣기 신공을 사용하겠습니다.^^


    =======================================================

    올려 주신 코드는 폴링 방식으로 펄스를 체크하는 방식입니다.

    이런 방식은 정확한 시간을 측정하기 어렵습니다.


    INT0, INT1 을 사용하신거 같은데 상승 에지를 디텍트 하려면


    기본 레지스터를 설정하고

    MCUCR = 0x0F; // INT0, INT1 상승에지 사용

    GICR = 0xC0    ; // INT0, INT1 인터럽트 사용

    _SEI();        // 전체 인터럽트 인에이블

    while(1) {}       // 무한 루프 



     

    인터럽트 루틴을 따로 처리하면 됩니다.

    int starttime=0;

    int endtime=0;

        // INT0 걸리면

      ISR(INT0_vect)

      {

       // INT0 처리

        starttime =  TCNT0;

      }

     

       // INT1 걸리면

      ISR(INT1_vect)

      {

       // INT1 처리

        endtime =  TCNT0;

      }



    시간 차 구하기

    시간차 = (endtime - starttime)/ 스케일값   ; 입니다.

    (이 값은 클럭 속도와 DIV 값에 따라 달라지므로 스케일값을 구해서 계산하시면 됩니다.)