회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
364 자유주제 HOT반갑습니다.^^ 새로운 회원입니다.7 cyma 6692 2007.10.11
363 자유주제 HOTat90can128 질문입니다6 고문관 6663 2007.10.11
362 자유주제 HOT아 정말 이 사이트 운영자님..3 레드리네 6760 2007.10.10
361 마이크로프로세서 HOT저기 밑에 인터럽트에 관한것입니다.1 레드리네 681 2007.10.10
360 자유주제 HOT방갑습니다...^^2 야바 6471 2007.10.10
359 마이크로프로세서 HOT코드에 문제점이 무엇일까요?5 챠리스만 783 2007.10.10
358 마이크로프로세서 HOT이래저래 해서 물어봅니다 ㅎㅎ3 뺘쑝 786 2007.10.10
357 자유주제 HOT예전에는 내몸이 이랬는데 흑흑7 뺘쑝 1423 2007.10.10
356 자유주제 HOTrf서보제어 성공~~~기뻐해주십시오5 고문관 7553 2007.10.10
355 자유주제 HOT저.. 궁금한개 있어요..;;3 행복하면 6923 2007.10.10
354 Allegro & OrCAD HOTorcad layout에서 외곽선을 원으로 그리는 방법??3 kaizer 2059 2007.10.09
353 자유주제 HOT무서운 아크마님7 빛나는 영혼 1449 2007.10.09
352 마이크로프로세서 HOT[질문] AT89C51과 AT89S51 차이점...3 곰돌푸우 1824 2007.10.09
351 마이크로프로세서 HOT이번에 처음 접했는데요...16진수 카운트 하는 프로그램은 어떻게 짜는거에요?2 니트로마 969 2007.10.09
350 자유주제 HOT오~ 홈페이지가 점점 머찌게 변하네요.. ㅋㅋ6 행복하면 6841 2007.10.09
349 마이크로프로세서 HOTmax232cpe 콘덴서 용량 질문드립니다.2 마프맨 904 2007.10.09
348 자유주제 HOT무선 스피커 자료요청입니다...5 엘랑 6560 2007.10.09
347 자유주제 HOT음...점점 좋아지는 홈페이지 멋있습니다...4 엘랑 6952 2007.10.09
마이크로프로세서 HOT음..코드좀 봐주세용 -0-;;2 챠리스만 830 2007.10.09
345 자유주제 HOT안녕하세요들~2 하루 6998 2007.10.09
  • 한 친구를 얻는데는 오래 걸리지만 잃는데는 잠시이다.
    - 릴리
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.