BASIC4MCU | AVR 따라하기 | 2015년 강좌 | delay_us()보다 더 짧은 딜레이 함수 - 2
페이지 정보
작성자 키트 작성일2017-08-23 16:47 조회4,386회 댓글0건본문
앞 글에서는 1바이트 크기를 사용한 함수를 설명 했는데2바이트 크기의 함수도 있습니다.앞의 글을 읽어 보셨다면 이해 하셨을테니 설명은 따로 적지 않겠습니다.-O0 최적화 옵션은 사용하지 않았으며-O1,-O2,-O3,-Os에서 동일합니다.//-------------------------------
12345678910111213141516171819 #include <io.h>#include <delay.h>//unsigned int t;//#define delay_loop_2 {#asm("sbiw r30,0x01"); #asm("brne pc-1");}//void main(void){while(1){t=1;delay_loop_2; // 6, 0.38ust=2;delay_loop_2; //10, 0.63ust=10;delay_loop_2; //42, 2.63ust=20;delay_loop_2; //82, 5.13us}}cs 코드비젼에서는 전역변수를 사용하세요전체 클럭 수 = ( n회 * 4클럭 ) + 2클럭AVRstudio와 클럭수가 같습니다.//AVRstudio와 비슷하게 함수 모양처럼 변경 해보죠
1234567891011121314 #include <io.h>#include <delay.h>//unsigned int t;#define delay_loop_2(x) {t=x; #asm("sbiw r30,0x01"); #asm("brne pc-1"); }//void main(void){while(1){delay_loop_2( 1); // 6, 0.38usdelay_loop_2( 2); //10, 0.63usdelay_loop_2(10); //42, 2.63usdelay_loop_2(20); //82, 5.13us}}cs //---------------------------------------------------------
1234567891011121314151617181920212223242526272829303132 #include <io.h>#include <delay.h>//#pragma warn- // this will prevent warningsvoid dly_us(unsigned int us){ // 4클럭(call)#asm; ST -Y,R27 ; 2클럭; ST -Y,R26 ; 2클럭nop ; 1클럭sbiw r26,1 ; 2클럭brne dly_us_loop ; 2(Branch) ; 1(pass)ret ; 4클럭dly_us_loop:sbiw r26,1 ; 2클럭-----┐adiw r26,1 ; 2클럭 │sbiw r26,1 ; 2클럭 │adiw r26,1 ; 2클럭 │ 16클럭=1ussbiw r26,1 ; 2클럭 │adiw r26,1 ; 2클럭 │sbiw r26,1 ; 2클럭 │brne dly_us_loop ; 2(Branch)-┘ ; 1(pass)ret ; 4클럭#endasm}#pragma warn+ // enable warnings//void main(void){unsigned int i;while(1){for(i=1;i<60000;i++)dly_us(i);}}cs dly_us() 이 함수는 16MHz용 us 딜레이 함수입니다.클럭이 다르면 소스를 변경 해줘야합니다.
댓글 0
조회수 4,386등록된 댓글이 없습니다.