회원가입 ID/PW 찾기

마이크로프로세서 HOT질문이 있습니다. 8051인데요

singost22007.04.11 22:4904.11조회 수 2362댓글 19이 게시물을

AA

질문이 있습니다.  8051인데요
4개의 세그먼트를 1 2 3 4 이렇게 숫자를 붙이면요
4번 세그먼트에 0-9까지 숫자 디스플레이 되다가 인터럽트 스위치를 누르면 3번 세그먼트로 이동되면서 계속 0-9까지 숫자가 반복되고요 또 누르면 2번 세그먼트로...

이렇게 가다가 이번엔 다른인터럽트스위치를 누르면 반대쪽으로 9-0으로 숫자가 디스플레이 되는거 하려고 하는데 회로는 다 만들었지만 소스를 어떻게 만들어야할지 모르겟습니다. 조언좀 주실수잇을까요...

singost2
댓글 19
  • No Profile

    글의 정황상으로는 정확히 알순 없지만

    메인문이 돌아가고 있을때 인터럽트가 걸리면 다른 세그먼트를 동작시키려는 거 같네요..

    회로가 없어 정확한 포트같은것을 알수 없어 개략적으로 글을 올립니다.

    int seg_num=4;
    int_함수()
    {

    set_num--;
    if(set_num < 0)
      set_num = 3;
    }


    main()
    {


    seg_num 번호에 해당하는 세그먼트에 값 출력

    }

  • No Profile

    답변 감사합니다^^ 혹시나해서 쪽지 해봣는데 ...   제가 첫번째 회원이군요 ㅎㅎㅎ

    #include <AT89X51.h>

    code unsigned char SEGMENT1[10] = {0xc0,0xf9,0xa4,0xb0,0x99,
                                                       0x92,0x82,0xf8,0x80,0x90}; //0-9까지 값
    code unsigned char SEGMENT2[10] = {0x90,0x80,0xf8,0x82,0x92,
                                                       0x99,0xb0,0xa4,0xf9,0xc0}; //9-0까지 값

    unsigned char temp;     // 인터럽트 상태 저장 전역 변수
    // 외부 인터럽트 0 처리 루틴
    void EX0_INT(void) interrupt 0
    {
      temp=0;
    }
    // 외부 인터럽트 1 처리 루틴
    void EX1_INT(void) interrupt 1
    {
      temp=1;
    }
    // 일정 시간 지연 함수
    void delay (unsigned int i)
    {
       while (i--);
    }

    // 메인
    void main(void)
    {
       unsigned char i;
       P1 = 0xff;  // 포트 초기 설정
       P2 = 0xef;
       IT0 = 1;         // 외부 인터럽트 0 엣지모드
       EX0 = 1;         // 외부 인터럽트 0 인에이블
       IT1 = 1;         // 외부 인터럽트 1 엣지모드
       EX1 = 1;         // 외부 인터럽트 1 인에이블
       EA = 1;          // 인터럽트 모두 인에이블
       temp = 0;       // state 초기 값
       i = 0;           // 포인터 초기 값
       do{
             for(i=0; i<10; i++){

                   P1 = SEGMENT1[i] //포트1에 세그먼트1 값 출력
                   P2 = SEGMENT2[i]  //포트2에 세그먼트2 값 출력
                   delay(10000); //딜레이함수
                   }
              
             if(i==10) i=0; //세그먼트가 9가되면 다시 0으로 돌려줌
           }
       }while(1);                // 무한 루프

    대충 소스가 이런데요.. 여기에 머 더 써야할꺼 같은데...  

    세그먼트 4개가 잇는데 한 세그먼트에 0-9까지 디스플레이되다가 외부인터럽트0 스위치를 누르면 왼쪽으로 이동되고 계속 0-9

    까지 디스플레이됩니다 또누르면 또 왼쪽 세그먼트로 이동되고요.. 그러다가 외부인터럽트1스위치를 누르면 이번에 오른쪽으

    로 이동되면서 9-0으로 거꾸로 디스플레이 되게 하려고합니다. 제가 너무 몰라서 잘 가르쳐 주신거 같은데 어떡해해야할지 몰라서 소스를 올려봅니다 잘못된거좀 지적해주시고 추가할꺼좀 넣어주세요- 부탁드립니다. 

  • No Profile

    temp라는 변수를 사용하셨는데 이것을 이용해서

    왼쪽으로 움직일지 오른쪽으로 움직일지에 대해서 결정해야 합니다.

    그리고 몇번째 포트를 사용해야할지 결정할 변수가 있어야겠군요.



    void EX0_INT(void) interrupt 0
    {
      temp=0;
     seg_num++;
    }


    void EX0_INT(void) interrupt 1
    {
      temp=0;
     seg_num--;
    }


     
     for(i=0; i<10; i++){
     
     switch(seg_num)
     case 0:
      P1 = SEGMENT1[i] //포트1에 세그먼트1 값 출력
     break;
     case 1:
      P2 = SEGMENT2[i]  //포트2에 세그먼트2 값 출력
      break;
     case 3:
      P3 = SEGMENT2[i]  //포트2에 세그먼트2 값 출력
      break;
     }
     delay(10000); //딜레이함수
     

    아 그리고 한번 눌러도 여러번 쉬프트 되는 현상이 있을꺼에요 이것을 채터링 현상이라고 부르는데요

    이 부분은 하드웨어나 소프트웨어로 처리하셔야 합니다.

    전체소스는 짜드리지 않고 힌트만 드렸으니 보시고 만들어보세요.

    마이컴은 직접 해보면서 실력이 상승하니까요^^;;

    정답은 본인이^^


  • No Profile
    case 하고break에서 컴파일하는데 계속 에러가 뜨네요;;

    몇일째 붙잡고 잇는지 모르겠습니다.

    2주째 집에도 못가고.. 이번주에는 집에 갔다 오려고했는데;;

    어렵지 않으면 전체소스 한번 보여주시겠어요?..
  • No Profile

    부탁드립니다.. 이걸 해결해야 집에갈수잇어서..

  • No Profile

    #include <AT89X51.h>

    code unsigned char SEGMENT1[10] = {0xc0,0xf9,0xa4,0xb0,0x99,
                                                       0x92,0x82,0xf8,0x80,0x90}; //0-9까지 값
    code unsigned char SEGMENT2[10] = {0x90,0x80,0xf8,0x82,0x92,
                                                       0x99,0xb0,0xa4,0xf9,0xc0}; //9-0까지 값

    unsigned char temp;     // 인터럽트 상태 저장 전역 변수
    // 외부 인터럽트 0 처리 루틴
    int seg_num=4;
    void EX0_INT(void) interrupt 0
    {
      temp=0;
     seg_num++;
    }
    // 외부 인터럽트 1 처리 루틴
    void EX1_INT(void) interrupt 1
    {
      temp=1;
     seg_num--;
    }
    // 일정 시간 지연 함수
    void delay (unsigned int i)
    {
       while (i--);
    }

    // 메인
    void main(void)
    {
       unsigned char i;
       P1 = 0xff;  // 포트 초기 설정
       P2 = 0xef;
       IT0 = 1;         // 외부 인터럽트 0 엣지모드
       EX0 = 1;         // 외부 인터럽트 0 인에이블
       IT1 = 1;         // 외부 인터럽트 1 엣지모드
       EX1 = 1;         // 외부 인터럽트 1 인에이블
       EA = 1;          // 인터럽트 모두 인에이블
       temp = 0;       // temp 초기 값
       i = 0;           // 포인터 초기 값
       do{
             for(i=0; i<10; i++){
               
                   switch(seg_num)
                  
            case 0:
                      P1 = SEGMENT1[i]; //포트1에 세그먼트1 값 출력
                     break;
                  
            case 1:
                      P2 = SEGMENT2[i];  //포트2에 세그먼트2 값 출력
                     break;
        
               } 
                   delay(10000); //딜레이함수
                  
              
             if(i==10) i=0; //세그먼트가 9가되면 다시 0으로 돌려줌
           }
       while(1);                // 무한 루프
       }

    이렇게 했는데  case 에서 에러가 나네여;;;
    missing enclosing switch 라구..  에구;;

  • No Profile
         switch(seg_num)
                  
            case 0:
                      P1 = SEGMENT1[i]; //포트1에 세그먼트1 값 출력
                     break;
                  
            case 1:
                      P2 = SEGMENT2[i];  //포트2에 세그먼트2 값 출력
                     break;
        
               } 


    블럭이 빠져있습니다.



         switch(seg_num)
              {    
            case 0:
                      P1 = SEGMENT1[i]; //포트1에 세그먼트1 값 출력
                     break;
                  
            case 1:
                      P2 = SEGMENT2[i];  //포트2에 세그먼트2 값 출력
                     break;
        
               } 
  • No Profile

    감사합니다.. 근데.. 확인해보니... 에러는 없는데..

    아에 동작조차 하지 않네요; ㅠ ㅠ

    어찌된일인지 모르겠어요 . 

    아크마님 도움 부탁... 

  • No Profile

    하드웨어가 포함된 작품을 소스만 보고 판단하기에는 무리가 있습니다.

    하드웨어와의 구성도 알아야하기때문인데요..

    소스만을 올려주셔서는 판별이 좀 힘들듯 합니다.

    회로도도 같이 올려주시면 좋겠는데요..

    그리고 제가 짜드린 부분은 대충 힌트 부문만 간단히 짜드린것이고 실제로는

    인터럽트 부분에서


    void EX0_INT(void) interrupt 0
    {
      temp=0; 
     
    if(seg_num < 3)
       seg_num++;
    }

    위와같은 루틴들이 필요합니다. 물론 인터럽트 1에서도요...

    그래야 seg_num이 0에서 3 사이로만 움직일테니까요

    저 소스에서는 seg_num이 숫자가 무한히 올라가므로 switch문의 조건이 부합되지 않는거구요..


  • No Profile
    http://kin.naver.com/db/detail.php?d1id=1&dir_id=10104&eid=gyRfncekslYLEEam5u0RfdFKb5d8eGqZ&qb=wM7Fzbe0xq4= 여기 가시면 답변에 회로도 하나
    있는 데요  그 회로도에서 89c51에 외부 인터럽트0 외부인터럽트1에  스위치 추가된거에여-
    다른건 똑같아요- 
  • No Profile

    아 외부인터럽트0,1 은 포트 3 에 달려잇어여 3.x 3.x 두개요 정확히 몇인지 기억이 잘..

    정확히 알아야하면 알려드릴게여..

  • No Profile

    확인하시고 연락주시길..ㅋ

  • No Profile

    인터럽트1 이 p3.3 인터럽트0이 p3.2 이에요..

  • No Profile

    흠  주말이라..쉬시는건가;;

    오늘내로 마무리해야되는데..

    계속 와보게 되네여^^ ㅎ

  • No Profile
    밑에 글 보시면 소스 있습니다...
  • No Profile
  • No Profile
    오우..
  • No Profile
    와우....
  • No Profile
    감사합니다.

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

search
번호 분류 제목 글쓴이 조회 수 날짜
5886 자유주제 HOT안녕하세요8 아크마 60125 2007.04.10
5885 마이크로프로세서 HOT8051 강좌를 올릴 계획입니다.48 아크마 4839 2007.04.11
5884 자유주제 HOT안녕하세요~9 화언 30754 2007.04.11
마이크로프로세서 HOT질문이 있습니다. 8051인데요19 singost2 2362 2007.04.11
5882 펌웨어 & 코딩언어 HOT음성변조 관련 프로그램 소스 모음4 아크마 7262 2007.04.13
5881 마이크로프로세서 HOT초고주파 회로 및 무선 활용1 아크마 1549 2007.04.13
5880 펌웨어 & 코딩언어 HOT화상 캠 제어 소스5 아크마 4079 2007.04.13
5879 자유주제 HOT컴박스의 무궁한 발전이 있으시길..18 서주형 44970 2007.04.13
5878 펌웨어 & 코딩언어 HOT시리얼통신 테스트 프로그램2 아크마 3851 2007.04.13
5877 펌웨어 & 코딩언어 HOT시리얼통신 데모 프로그램 소스2 아크마 4027 2007.04.13
5876 펌웨어 & 코딩언어 HOTRS232 컨트롤 소스2 아크마 4540 2007.04.13
5875 마이크로프로세서 HOT4개 세그먼트를 쉬프트시키면서 동작12 아크마 4301 2007.04.15
5874 자유주제 HOT처음오신분 필독!!244 아크마 65368 2007.04.15
5873 마이크로프로세서 HOT모터 구동방식에 대해 다시 질문요;;;4 나야소달ㅋ 2144 2007.04.15
5872 마이크로프로세서 HOTSST42D2120 스텝모터...2 나야소달ㅋ 2702 2007.04.15
5871 자유주제 HOT홈페이지 로고입니다. 투표해주세요 ㅋ14 보해소주 40164 2007.04.16
5870 마이크로프로세서 HOT라인트레이서 만들기 위해 내가 할일4 뺘쑝 1426 2007.04.18
5869 마이크로프로세서 HOT트레이서 트랙을 만들고 있어요.4 나야소달ㅋ 1825 2007.04.18
5868 자유주제 HOT홈페이지 업데이트가 거의 끝났네요..2 아크마 35797 2007.04.20
5867 마이크로프로세서 HOT정말 오랜만에 또 질문...ㅎㅎ3 나야소달ㅋ 1749 2007.04.22
Prev 1 2 3 4 5 6 7 8 9 10 ... 295 Next
  • 많은 사람이 충고를 받지만, 오직 현명한 자만이 충고의 덕을 본다.
    - 푸블릴리우스
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.