회원가입 ID/PW 찾기
AA

전에 아크마님께서 조언해 주신건데요.

 

코드의 전체적인 문맥은 잡았습니다..

 

unsigned int data;

int a=0;

#pragma interrupt_handler int4_isr:6
void int4_isr(void)
{
a=1; 

unsigned int duty;
 _CLI();
 data=duty;
 _SEI();
}

 

void main(void)

{

while(1){

                if(a==0){

                                     모터각도함수(duty); // 90도

                                     delay();

                                     모터각도함수(duty); // 100도

                                     delay();

                                     모터각도함수(duty); // 110도

                                     delay();

                                     .......

                                     모터각도함수(duty); // 180도

                                     delay();

                                     모터각도함수(duty); // 170도

                                     delay();

                                     모터각도함수(duty); // 160도

                                     delay();

                                     ......

                                     모터각도함수(duty); // 90도

                                     delay();

                                    }

             else if(a==1){

                                         모터각도함수(data); X도

                                         ..................

                                         ..............

                                         실행할내용..

                                         .......

                                         ...

                                        }

 

위에 처럼 코드를 생각해봤습니다.

 

문제는 data변수에 duty값을 저장하는건데요... 보시면, 외부인터럽트가 발생되야 저장이 됩니다..

인터럽트금지, 허용을 저렇게 하면 멈췄을 때의 듀비값이 저장될지가 의문이네요 -_-;;;

외부인터럽트 플래그레지스터를 if문의 조건으로 달아놨는데 저게 가능한지 -_-;

아.. 요즘 너무 어수선하네요.. 미치겠습니다 집중이 너무 안되네요..

너무 무기력해있으니...

댓글 2
  • No Profile

    인터럽트금지, 허용을 저렇게 하면 멈췄을 때의 듀비값이 저장될지가 의문이네요 -_-;;;
    -> 저장됩니다.  다른 인터럽트로 진입을 멈춘것으로 상관없습니다. 단지 저러케 하게 되면 타이머 인터럽트도 정지되버릴거에요 그래서  타이머가 죽으면 서보가 동작 안하겠지요..

    님문장에서는 딱히 인터럽트를 껏다켰다할 필요가 없습니다. 언제나 인터럽트 enable로 해주시면 됩니다.

    그리고 a=1이라고 인터럽트 걸릴때 해주셧는데요.

    그럼 main문에서 인터럽트에 따른 처리후에 a=0이라고 넣어주시면 되요.

    또 채터링 방지를 위해서는 인터럽트 문에서도 a=1이라고해서 무조건 실행하지 마시고요

    if(a==0)일때만 하위 명령문을 실행하면 됩니다. (채터링에 의해 2번연속이상 인터럽트 호출루틴이 실행되지 못하게요)

  • No Profile
    글쓴이 챠리스만 07.10.10 00:36 댓글 좋아요 0 싫어요 0

    int data[20]; //duty값을 저장하는 변수

    int  z , x;
    int b = 0;

     

    #pragma interrupt_handler int4_isr:6
    void int4_isr(void)
    {
    b=1;

    data[ x ] = z;
    }

     

    void main(void)

     int b=0;
     int i,j;
        
     while(1){
                    if(b==0) {
                                    while(1){
                for(z=1500,x=0; z<2200; z++,x++)
                   {
                    z=z+(101-1);
                    Servo24SetDuty1(0,7,z);//all Center Value
                    delay();
                 delay();
                 delay();
                }
               
                for(z=2100,x=0; z>1500; z++,x++)
                   {
                 z=z-(101-1);
                 Servo24SetDuty1(0,7,z);
                 delay();
                 delay();
                 delay();
                }
                }
                //}
                
         else if(b==1)          {  
                       while(1)
              {
              Servo24SetDuty1(0,7,data[x]);
              delay(10);
              Servo24SetDuty1(0,7,2300);
              delay(10); 
              }     
           
            }
       }
    } // end main

     

     

    b==1 부분이 죽어라 실행이 안되네요... 스위치를 눌리면 b변수에 1이 할당되면서 되야 하는거 아닌가요 ㅠㅠ?;;

     

    스위치는 핀 2개중에 한개는 GND, 다른쪽은 10k짜리 저항을 물리고 포트E4에 물렀습니다..

     

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

search
번호 분류 제목 글쓴이 조회 수 날짜
187 자유주제 HOT휴~시험 ..5 고문관 19997 2007.10.15
186 자유주제 HOT일주일간..2 빛나는 영혼 6885 2007.10.15
185 자유주제 HOT휴으 -_-;; 힘드네용3 챠리스만 20218 2007.10.14
184 자유주제 HOTTell me4 빛나는 영혼 4025 2007.10.13
183 자유주제 HOT저 안녕 하세요..;; ㅋㅋ 혹시 저..;;2 행복하면 7192 2007.10.12
182 자유주제 HOT접속하면....너무 느려요....;;9 야바 6577 2007.10.12
181 자유주제 HOT포인트....6 악당 11185 2007.10.12
180 자유주제 HOT큰맘먹고;;7 아크마 10807 2007.10.11
179 자유주제 HOT반갑습니다.^^ 새로운 회원입니다.7 cyma 6692 2007.10.11
178 자유주제 HOTat90can128 질문입니다6 고문관 6663 2007.10.11
177 자유주제 HOT아 정말 이 사이트 운영자님..3 레드리네 6760 2007.10.10
176 자유주제 HOT방갑습니다...^^2 야바 6471 2007.10.10
175 자유주제 HOT예전에는 내몸이 이랬는데 흑흑7 뺘쑝 1423 2007.10.10
174 자유주제 HOTrf서보제어 성공~~~기뻐해주십시오5 고문관 7554 2007.10.10
173 자유주제 HOT저.. 궁금한개 있어요..;;3 행복하면 6923 2007.10.10
172 자유주제 HOT무서운 아크마님7 빛나는 영혼 1449 2007.10.09
171 자유주제 HOT오~ 홈페이지가 점점 머찌게 변하네요.. ㅋㅋ6 행복하면 6841 2007.10.09
170 자유주제 HOT무선 스피커 자료요청입니다...5 엘랑 6560 2007.10.09
169 자유주제 HOT음...점점 좋아지는 홈페이지 멋있습니다...4 엘랑 6952 2007.10.09
168 자유주제 HOT안녕하세요들~2 하루 6998 2007.10.09
  • 인생에 있어서 제일 큰일은 자신을 발견하는 일이다.
    - 난센
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.