회원가입 ID/PW 찾기

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

singost22007.04.11 22:4904.11조회 수 1194댓글 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
번호 분류 제목 글쓴이 조회 수 날짜
18 ECAD 아무거나 HOTop amp에서2 깝채 2535 2009.02.05
17 ECAD 아무거나 HOT음... BUILD UP에 관하여 문의 드립니다...1 작은맑음이 4162 2008.11.21
16 ECAD 아무거나 HOT부끄럽지만 초급자가 질문좀 드릴게요.ㅜ2 이웃집바둑이 3537 2008.11.08
15 ECAD 아무거나 HOT기판내에 또다른 기판을 만들때...5 조디악 3681 2008.11.05
14 ECAD 아무거나 HOT기본용어 와는 다른 용어 해서 인거 같습니다2 루기아니 3441 2008.10.19
13 ECAD 아무거나 HOT드릴홀 크기는 몇mil 로 하는것이 적당한가요3 조디악 3946 2008.05.16
12 ECAD 아무거나 HOTmil 이란 무엇인가요??7 앙큼상큼저뽀 3885 2008.04.10
11 ECAD 아무거나 HOTSMPS 관련...4 날뽕녀 3581 2008.04.10
10 ECAD 아무거나 HOT허접한 질문입니다..7 무수리 3154 2008.02.28
9 ECAD 아무거나 HOT그리고 회로도를 그릴 때 AVR 있잖아요3 무수리 2217 2008.01.30
8 ECAD 아무거나 HOTAVR에 전원 인가 하는 거 있잖아요3 무수리 3416 2008.01.30
7 ECAD 아무거나 HOT간단한 문제좀 해결해 주세요^^5 로봇마스터 3009 2008.01.17
6 ECAD 아무거나 HOT책을 보면서 공부 중인데요3 무수리 4233 2008.01.17
5 ECAD 아무거나 HOTPCB 관련해서 좋은 책 없을까요??2 무수리 3287 2008.01.09
4 ECAD 아무거나 HOTPCB 제작하려면 처음에 설정을 어떻게 해야 되나요??1 무수리 3323 2008.01.09
3 ECAD 아무거나 HOT이번주 캐드 시험 있는데....4 shin 3501 2007.11.19
2 ECAD 아무거나 HOTPlace part 질문1 shin 2261 2007.10.31
1 ECAD 아무거나 HOTFET 왜 쓰는거에요?? (댓글에 그림첨부)6 shin 932 2007.10.27
  • 음덕을 베푸틑 자는 반드시 양보를 받는다.
    - 회남자
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.