Lv. 76 (전무보) 62,709 납
79%
Exp. 58,973/59,290 | 79%
회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
152 마이크로프로세서 HOT안녕하세요? ULN2803, UDN2981 에 관해 질문드립니다.14 마프맨 4063 2007.10.11
151 마이크로프로세서 HOT어드레스 디코더에 관해 설명 해 주실분?2 성공신화 1013 2007.10.11
150 마이크로프로세서 HOTrs485통신에 관련해서 ?2 대박 859 2007.10.11
149 마이크로프로세서 HOT저기 밑에 인터럽트에 관한것입니다.1 레드리네 681 2007.10.10
148 마이크로프로세서 HOT코드에 문제점이 무엇일까요?5 챠리스만 783 2007.10.10
147 마이크로프로세서 HOT이래저래 해서 물어봅니다 ㅎㅎ3 뺘쑝 786 2007.10.10
146 마이크로프로세서 HOT[질문] AT89C51과 AT89S51 차이점...3 곰돌푸우 1824 2007.10.09
145 마이크로프로세서 HOT이번에 처음 접했는데요...16진수 카운트 하는 프로그램은 어떻게 짜는거에요?2 니트로마 969 2007.10.09
144 마이크로프로세서 HOTmax232cpe 콘덴서 용량 질문드립니다.2 마프맨 904 2007.10.09
마이크로프로세서 HOT음..코드좀 봐주세용 -0-;;2 챠리스만 830 2007.10.09
142 마이크로프로세서 HOT키보드 스캔...어렵네요..ㅠㅠ6 머스트비 1002 2007.10.09
141 마이크로프로세서 HOT뭐가 좋지요???2 서가래 607 2007.10.08
140 마이크로프로세서 HOT좀 도와주세요!!;;1 아무거나 628 2007.10.08
139 마이크로프로세서 HOT인터럽트에 관한것 질문있습니다.13 레드리네 771 2007.10.07
138 마이크로프로세서 HOT영상처리를 위한 자료 있으신분 있을까용 ....5 뺘쑝 603 2007.10.05
137 마이크로프로세서 HOTds1620을 이용한 온도측정기 수정문의합니다.13 푸르미 1197 2007.10.04
136 마이크로프로세서 HOTRF모듈 하나 구했는데 -_-4 챠리스만 958 2007.10.03
135 마이크로프로세서 HOT103H546-0440(스테핑모터) 궁금증이9 뺘쑝 1584 2007.10.02
134 마이크로프로세서 HOT아~ 미치겠네용 ㅠㅠ 좀 도와주세용7 챠리스만 838 2007.10.02
133 마이크로프로세서 HOT저.. 공부하는 방법 때문에 그런데.. 도움 좀 주세요.. ㅠㅠ 울고싶어잉..14 행복하면 688 2007.09.30
Prev 1 ... 46 47 48 49 50 51 52 53 54 55 ... 58 Next
  • 사람들로 하여금 당신을 좋아하도록 만드는 것은 당신이 그 사람들을 좋아하는 다른 측면에 불과하다.
    - 필
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.