회원가입 ID/PW 찾기
AA

안녕하세요.

8051을 배우고 있는 초보입니다.

소스 코드 작성 중 delay 함수 관련해서 문의드립니다.

avr 같은 경우는 delay_us, delay_ms를 IAR 컴파일러를 통해 만들어서 통제가 가능한데

keil 컴파일러는 처음 접하다보니 어떻게 소스를 만들어야 하는지 모르겠네요.

소스 만드는 방법과 그런 결과가 어떻게 나왔는지 설명 부탁드립니다.

AVR을 예를들어

void delay_us(time_us){
    u8    i;

    for( i= 0; i < time_us; i++){              4 cycle
        asm("PUSH R0");                        2 cycle
        asm({PUSH R0");                        2 cycle
                   .
                   .
                   .
    }
}

이런식의 설명 부탁드립니다.

댓글 4
  • No Profile

    예제 소스에서 LED.C를 보면

    /* 파일 이름 LED.C */
    #include    <WIN51.H>

    /* 포트 선택 어드레스 */
    #define     SELECT     (*( unsigned char *)(0x2fC48))

    /*  LED 점등을 위한 시간 지연 함수.
       외부에서 지연 상수 del을 받는다.  */
    void    delay( int  del )
    {
        while(del--);  /* del이 제로가 될때까지 루프 */
    }

    void    main( void )
    {
        unsigned char   led = 0xfe; /* led on 초기값 */

        SELECT = 0x9e;  /* led가 연결된 I/O 를 선택한다 그림 3-2 참조 */

        do  {
           P1 = led;           /* LED 점등 */
           delay(30000);       /* LED ON 지연 시간 */
           led <<= 1;          /* LED ON 상태를 왼쪽으로 1비트 이동 */
           led |= 0xf1;        /* 상위 4비트는 1111로 마스크.그림 3-2 참조*/
           /* 그림 3-2에서 P13 까지 ON 되었는지 검사해서, P13까지 ON 되었으면
              LED ON 초기 값을 저장한다.*/
           if( led == 0xff ) led = 0xfe;
        } while(1);                      /* 무한 루프 */
    }

    이렇게 되어있는데   void    delay 가 딜레이문 아닌가요??

  • No Profile

    딜레이를 인터럽트를 사용해서 주는 방법도 알고싶은데..&^^:

  • No Profile
      void delay(int timer){  // 함수 만들고
    int i, j;                               
    for(i=0;i<=1000;i++){
    for(j=0;j<=timer;j++){
    }
    }
    }
    delay(??); //안에 1000번 돌동안 1 넣으면 1000돌시간동안 딜레이가 됩니다. 
    인터럽트를 공부하신뒤 인터럽트 함수를 만들어 응용해보세요;
  • No Profile

    정확한 딜레이 함수를 만들기 위해서는 System Clock Frequency가 어떻게 되는지

    알아야 하며 for문과 같은 명령이 수행되기 위해 몇 Cycles의 clock이 사용되는지

    알아야 합니다.

     

    예를들면 아래와 같이 함수를 만들어 사용할 수 있습니다.

     

    /* Delay Function Example */

    void delay_us(short us)
    {
     int Cnt = ((SYS_CLK/15000) * us / 1000);

     for(; Cnt>0; Cnt--); // 1 instruction = 4 cycles
    }

     

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

search
번호 분류 제목 글쓴이 조회 수 날짜
3384 자유주제 HOT역시 안배운 부분은 어렵군요 ㅠㅠ3 골든위트 4529 2010.10.12
3383 자유주제 HOTAVR Q/A 게시판을 보고 난 후 느낀점.3 WOW 4486 2010.10.12
3382 PADS HOTPADS 9.2 설치 후 ORCAD Capture 실행 않되는 문제.2 머털도사 6541 2010.10.12
3381 전기전자 아무거나 HOT라인트레이서 질문좀 드릴게요~3 궁금해 1714 2010.10.12
3380 전기전자 아무거나 HOT혹시 strong pullup과 weak pullup의 차이점 알고 계신분 있나요??2 히쟈 1819 2010.10.12
3379 자유주제 HOTaa건전지로 휴대용usb충전기 만들어야하는데..1 호랑이어흥 8009 2010.10.11
3378 마이크로프로세서 HOT인터럽트 관련 아이디어좀...3 가랑 1154 2010.10.11
3377 자유주제 HOTatmega128 초보인데 넘 어렵네요 ㅠ11 봉봉뿡짝 10486 2010.10.11
마이크로프로세서 HOTkeil 컴파일러에서 delay함수 만드는 법 문의드립니다.4 히쟈 3375 2010.10.11
3375 개발용역 HOT자동차 밧데리 충전기 개발1 C1 6571 2010.10.11
3374 자유주제 HOT이제 정말 가을이 왔네요~4 스타일피쉬 4945 2010.10.11
3373 자유주제 HOTeeeee29 궁금해 1770 2010.10.08
3372 자유주제 HOT정회원 어떻게 해야돼죠..?18 궁금해 6030 2010.10.08
3371 자유주제 HOTPADS 공부해야해서 죽겠네요;;2 뒹굴곰 4355 2010.10.08
3370 자유주제 HOT쉬운c누드c보고있는데3 동동궁궁 4552 2010.10.08
3369 마이크로프로세서 HOT어떤 좋은 MCU를 써야할까요?3 letsgokcs 888 2010.10.08
3368 ECAD Simulation HOTorcad 파형 볼때 counter.olb에 있는 라이브러리에 대해서요..1 노뜨라인 1730 2010.10.08
3367 전기전자 아무거나 HOT샐런-키 저역통과 필터 는 왜 쓰는거죠? 브이프 1287 2010.10.07
3366 자유주제 HOTisp 다운로드.. fuzebit 설정..하는방법..3 효자동호랭이 4093 2010.10.07
3365 자유주제 HOT타이머카운터를 이용한 시계1 효자동호랭이 9617 2010.10.07
  • 오, 사랑이여! 그대는 바로 악의 신이로다. 하긴 우리들은 그대를 악마라고는 부르지 못 하니까.
    - 바이런
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.