기타/마음수련

[스크랩] Timer 사용법

한상진-터치 2011. 7. 15. 01:04

󰁵 PIC 16F877 인터럽트 서비스 루틴 정의(내부 인터럽트) 󰁵


󰊱 인터럽트 서비루틴의 정의

  1. Timer0 인터럽트

   ① #int_rtcc

      함수명()

      {

        서비스 프로그램

       }

   ② #int_timer0

     함수명()

       {

        서비스 프로그램

       }

  2. timer1 인터럽트

   ① #int_timer1

     함수명()

       {

        서비스 프로그램

       }


 3. timer2 인터럽트

   ① #int_timer2

     함수명()

       {

        서비스 프로그램

       }


󰊲 잍터럽트 서비스 루틴의 동작 (셋트)에 관한 명령

  

 1. 인터럽트 허가 명령(활성화 시킴)

   형식  ENABLE_INTERRUPTS(lebel)

     * lebel 종류

       ① int_ext - 외부 인터럽트

       ② int_rtcc 또는 int_timer0 - 타이터0 인터럽트

       ③ int_timer1 - 타이머1 인터럽트

       ④ int_timer2 - 타이머2 인터럽트

       ⑤ global  - 모든 인터럽트 허용

  2. 인터럽트 중지 명령(금지)

   형식 DISABLE_INTERRUPTS(lebel)

    * lebel 종류

     ① int_ext - 외부 인터럽트

     ② int_rtcc 또는 int_timer0 - 타이머0 인터럽트

     ③ int_timer1 - 타이머1 인터럽트

     ④ int_timer2 - 타이머2 인터럽트


󰊳 인터럽트 카운터 초기 값 세트 명령


  ① SET_RTCC(value) 또는 SET_TIMER0(value) - 타이머0의 초기 값 세트

    - value : 0-255 사이의 값(8bit 타이머)

    - 이 명령 이후는 value 값부터 카운터 시작 

  ② SET_TIMER1(value) - 타이머1의 초기 값 세트

    - value : 0-65535 사이의 값(16bit 타이머)

    - 이 명령 이후는 value 값부터 카운터 시작 

  ③ SET_TIMER2(value) - 타이머2의 초기 값 세트

    - value : 0-2555 사이의 값(8bit 타이머)

    - 이 명령 이후는 value 값부터 카운터 시작 


󰊴 인터럽트 분주 비 설정 명령


  1. 타이머0 인터럽트


   형식  SETUP_COMPUTES(rtcc_internal, ps-state) 

      - rtcc_internal : 내부 클럭 사용

      - ps_state : 분주 설정

        RTCC_DIV_2 : 2개 입력에 rtcc 1개 증가

        RTCC_DIV_4 : 4개 입력에 rtcc 1개 증가

        RTCC_DIV_8 : 8개 입력에 rtcc 1개 증가

        RTCC_DIV_16 : 16개 입력에 rtcc 1개 증가

        RTCC_DIV_32 : 32개 입력에 rtcc 1개 증가

        RTCC_DIV_64: 64개 입력에 rtcc 1개 증가

        RTCC_DIV_128 : 128개 입력에 rtcc 1개 증가

        RTCC_DIV_256 : 256개 입력에 rtcc 1개 증가

  

 2. 타이머1 인터럽트


    형식 SETUP_TIMER_1(t1_internal,t1_state)

     -t1_state :분주 설정

        T1_DIV_BY_1 : 1 대 1로 분주

        T1_DIV_BY_2 : 1 대 2로 분주

        T1_DIV_BY_4 : 1 대 4로 분주

        T1_DIV_BY_8 : 1 대 8로 분주


  3. 타이머2 인터럽트


    형식 SETUP_TIMER_2(mode, period, postcale)

   -  0-255까지 몇번 카운터하면 인터럽트가 발생하도록 할 것 인지를 설정

   -  타이머0와 타이머1은 255와 65536을 넘어면 자동으로 인터럽트 발생

   - mode : 분주 비 설정

           T2_DIV_1  : 1대1로 분주

           T2_DIV_4  : 1대2로 분주

           T2_DIV_16  : 1대16로 분주

   - Period : 카운터 최대값 설정

          0-255사이의 값

   - postscale : 카운터 횟수 설정

          1-15사의 값

   예1) SETUP_TIMER_2(T1_DIV_1, 129, 1)

       내부 클럭을 사용하여 1: 1분주하여 카운터하고 0-129까지 1회 카운터하면

      인터럽트가 발생한다

  예2)  SETUP_TIMER_2(T1_DIV_4, 255, 2)

       내부 클럭을 사용하여 1: 4분하여 카운터하고 0-255까지 2회 카운터하면

      인터럽트가 발생한다

󰊴 인터럽트 사용 방법


 1. TIMER0 인터럽트


  형식    setup_computers(rtcc_internal, rtcc_div_2); //  내부클럭 사용 , 1대2 분주

          set_rtcc(0);                                // 처음부터 카운시작하면 생략

          enable_interrupts(int_rtcc);                 // timer0 인터럽트 허용

          enable_interrupts(global);                   // global  인터럽트 허용


 2. TIMER1 인터럽트


  형식    setup_timer_1(t1_internal); //  내부클럭 사용 , 1대1 분주

          set_timer1(0);                                // 처음부터 카운시작하면 생략

          enable_interrupts(int_timer1);                 // timer1 인터럽트 허용

          enable_interrupts(global);                   // global  인터럽트 허용


 3. TIMER2 인터럽트


  형식    setup_timer_2(t2_div_by_1,255,1); //  내부클럭 사용 , 1대1 분주 하고

                                          0-255까지 1회 카운터하면 인터럽트 발생

          set_timer2(0);                   // 처음부터 카운시작하면 생략

          enable_interrupts(int_timer2);                 // timer2 인터럽트 허용

          enable_interrupts(global);                   // global  인터럽트 허용


출처 : 마이크로프로세서 사랑
글쓴이 : 스타2001 원글보기
메모 : 타이머0 관련

'기타 > 마음수련' 카테고리의 다른 글

고난과 좌절이 행운을 불러온다  (0) 2011.11.22
용기의 원천  (0) 2010.10.28
나하고 놀자  (0) 2010.07.30
답을 찾는 물음  (0) 2010.07.02
축복받은 사람  (0) 2010.05.06