회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
26 펌웨어 & 코딩언어 HOT모니터 정보 읽어올때 프로토콜1 빛나는 영혼 2098 2008.03.06
25 펌웨어 & 코딩언어 HOT아~~20 あさひ 1622 2008.01.15
24 펌웨어 & 코딩언어 HOT최근에 질문 받은 소스-_-;;1 아크마 1405 2007.08.16
23 펌웨어 & 코딩언어 HOTRS232 컨트롤 소스2 아크마 4631 2007.04.13
22 펌웨어 & 코딩언어 HOT시리얼통신 데모 프로그램 소스2 아크마 4201 2007.04.13
21 펌웨어 & 코딩언어 HOT시리얼통신 테스트 프로그램2 아크마 3945 2007.04.13
20 펌웨어 & 코딩언어 HOT화상 캠 제어 소스5 아크마 4191 2007.04.13
19 펌웨어 & 코딩언어 HOT음성변조 관련 프로그램 소스 모음4 아크마 7331 2007.04.13
18 펌웨어 & 코딩언어 HOT어셈으로 구현한 암호화 복호화 - by 아크마4 아크마 3290 2007.08.08
17 펌웨어 & 코딩언어 HOTC를 위한 어셈블리어22 아크마 4076 2007.06.06
16 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #16 [ 입력/출력 ]10 뺘쑝 5601 2007.06.02
15 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #15 [ 인터럽트 : DOS가 서비스를 제공하는 방법 ]5 뺘쑝 3789 2007.06.02
14 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #14 [ 스트링 작업 ]6 뺘쑝 3515 2007.05.24
13 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #13 [ 산술 연산 ]9 뺘쑝 4994 2007.05.24
12 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #12 [ 프로시저 ]9 뺘쑝 4052 2007.05.24
11 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #11 [ 제어 흐름의 구현 ]8 뺘쑝 3230 2007.05.24
10 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #10 [ 제어 흐름 ]7 뺘쑝 4024 2007.05.24
9 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #9 [ 일반 명령문 ]11 뺘쑝 4090 2007.05.11
8 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #8 [ 자료의 정의 ]8 뺘쑝 2571 2007.05.04
7 펌웨어 & 코딩언어 HOT어셈블리어 강좌 #7 [ 프로그램의 처리 ]6 뺘쑝 2860 2007.05.04
  • 일을 몰고 가라. 그렇지 않으면 일이 너를 몰고 갈 것이다.
    - 프랭클린
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.