회원가입 ID/PW 찾기
AA

이제 막 공부 시작했습니다.
시작부터 막히네요..
ㅜㅜ
아래는 서보를 움직이는 소스입니다.
근데 언제 인터럽트가 발생하는지
그리고 인터럽트가 발생하면
함수 - interrupt[TIM0_OVF] void timer_int0(void) 여기에서 처리하는것 같은데
여기에서 TIM0_OVF 은 무엇인가요?
찾아보니깐 17번이던데
아주초보이니깐 자세히 알려주면 정말 감사하겠습니다.
부탁 드립니다.



#include <mega128.h>

unsigned int tim0_cnt, mos_pos, change;
unsigned int rc_time[6] = {54,150,130,150,210,150};  //0도 , 90도 , 180도     &   54  , 132 , 210
#define SERVO_PORT1  PORTD

 

void port_init()
{
   PORTA = 0x00;  //segment를 위하여
   DDRA  = 0xFF;


   PORTC=0x00;  //segmemt를 위한 출력
   DDRC=0xFF;


   PORTD = 0xFF; //서보 모토
   DDRD  = 0xFF;

}


//타이머 /카운터0 인터럽트 주기
//이론치 (256-238)*8분주 *1/16us = 9us, 실측치 약 10us마다 오버플로우가 발생!!
interrupt[TIM0_OVF] void timer_int0(void)  //TIM_OVF 는 17  0x11
{
            tim0_cnt++;
            TCNT0=238;                 //타이머/카운터0 초기값 재설정
}


void init_device()
{
  //타이머/카운터0 인터럽트 주기
  //이론치(256-238)*8분주*1/16us = 9us: 실측치 10us
 TIMSK = 0x01;  //타이머/카운터 인터럽트 마스크 레지스터   TOIEO  = 1 설정 TOV0을 해서 인터럽트 서비스 루틴 가능케 함
 TCCR0 = 0x02;  //정이머 카운터 제어 레지스터 : 분주비 결정 3으로 결정  (256-238)/8 하면 2.25 그래서 3으로 결정
 TCNT0 = 238;   //타이머 카운트 레지스터  oxff - 238(oxEE) = 0x11;
 SREG = 0x80;
}

void main(void)
{  

 int mydebug;

 port_init();
 init_device();

 tim0_cnt = 0;   //타이머/카운터0 오버플로우 횟수 리셋
 mos_pos = 0;  //모터 위치 = 0도
 change = 0;  //각도 변화 주기 리셋

 
 

 tim0_cnt=0;


  
 while(1)
 {


//rc_time[6] = {54,150,130,150,210,150};
  if(tim0_cnt >= 2000)          //10us * 2000 = 20ms출력
  {      
   tim0_cnt = 0;
   SERVO_PORT1  = 0xFF;
   change++;           
                                   
   //20ms * 100 = 2sec 각도 변화 주기 체크
   if(change == 100)
   {
    mos_pos = (mos_pos+1)%6;
    change = 0;
   }
  }
  if(tim0_cnt >= rc_time[mos_pos])             //모터 LOW 출력
  {             
     SERVO_PORT1 = 0x00;
  }
 
 }

}

댓글 3
  • No Profile
    timer_counter 는 사용자가 임의로 설정한 조건에 따라서 그 조건이 만족될시 자동적으로

    수행되는 함수라고 생각하시면 될것 같습니다.

     타이머가 계수를 하다가(숫자를 세다가)   Tcnt 레지스터  값이 over flow가 되면 인터럽트 함수를 수행하는 계념이지요..^^

    그리고 님이 질문하신  interrupt[TIM0_OVF] void timer_int0(void)  는 코드비전 tool에서 사용하는 문법으로써

    timer_counter 0,1,2,3 번중 0번 카운터가  over_flow 됬을때  핸들러(서비스루틴)을 수행하라는 일종에 함수 선언부 입니다.

  • No Profile
    글쓴이 이슬비00 10.09.16 21:26 댓글 좋아요 0 싫어요 0

    감사합니다.
    많은 도움이 되었습니다..
    너무 친철하게 설명해 주셔서 몸둘바를 모르겠네요.
    풍요로운 한가위 되세요 

  • No Profile
    와 다음강의가 서보인데 많은 참고되었습니다.

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
3264 중고장터 HOT삼성 3.5인치 TFT-LCD (Touch 포함) 싸게 드려요. 삼성 3.5인치 TFT-LCD (Touch 포함) 싸게 드려요. 삼성 3.5인치 TFT-LCD (Touch 포함) 싸게 드려요.1 띵요루슛 4350 2010.09.17
3263 자유주제 HOTㅋㅋ 와 저도 빨리 정회원이7 띵요루슛 1484 2010.09.17
3262 자유주제 HOT아직 정회원이 아나라서 여기 밖에 쓸공간이 없네요 프로그램공부어려운가요?5 홍반장님 4043 2010.09.17
3261 마이크로프로세서 HOTatmega128 twi문의1 김성진 1279 2010.09.17
3260 자유주제 HOT정회원이 될라면?11 나는빅토리아 6761 2010.09.17
3259 마이크로프로세서 HOT왜 strcpy가 에러가 나죠?4 이슬비00 1852 2010.09.17
3258 마이크로프로세서 HOT짧은 예제 하나만 알려주세요2 이슬비00 792 2010.09.16
3257 자유주제 HOT오늘 날씨 쥑이네요 ㅋ4 윤괴물 3380 2010.09.16
3256 자유주제 HOT정회원 되어야 해요3 어호마 3751 2010.09.16
3255 전기전자 아무거나 HOT안녕하세요 초보자가 질문드립니다.!5 윤괴물 957 2010.09.15
3254 자유주제 HOT저도 빨리 정회원이 되고 싶어요ㅠㅠ7 겅국 4732 2010.09.15
3253 자유주제 HOT올 추석은 원서만 써야겠네요ㅠ5 겅국 4621 2010.09.15
3252 자유주제 HOT졸작하고 있는데 힘드네요 ㅠ3 겅국 3750 2010.09.15
3251 자유주제 HOT새로운곳...1 스페셜 3250 2010.09.15
3250 자유주제 HOT이젠 정회원4 박팔뚝 3443 2010.09.15
마이크로프로세서 HOT인터럽트좀 알려주세요..3 이슬비00 1266 2010.09.15
3248 자유주제 HOT여기는 납이 있어야 모든게 되네요3 이슬비00 3209 2010.09.15
3247 자유주제 HOT강의자료에서 댓글은 어디서 쓰나요? 이슬비00 3322 2010.09.15
3246 자유주제 HOT오늘 가입했습니다.6 이슬비00 3634 2010.09.15
3245 전기전자 아무거나 HOTusn zigbex로 pwm구현... Munk_Kuma 788 2010.09.14
  • 사람의 일생에는 불꽃의 시기와 재의 시기가 있다.
    - 레니에
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.