회원가입 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
번호 분류 제목 글쓴이 조회 수 날짜
3 머신러닝, AI & 알고리즘 HOT오목 게임 알고리즘3 새로운하늘 3460 2010.03.29
2 머신러닝, AI & 알고리즘 HOT지하철 최단거리 알고리즘은?2 지워나 2862 2008.06.20
1 머신러닝, AI & 알고리즘 HOT순차 프로그램에 대한 간단한 알고리즘과 재귀 알고리즘의 속도 테스트 - by 아크마7 아크마 3063 2007.08.08
  • 사람은 자기 일이 끝나기 전에는 죽지 않는다.
    - 리빙스턴
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.