BASIC4MCU | 질문게시판 | 답변 : 코딩 질문이요!!
페이지 정보
작성자 master 작성일2018-06-17 15:41 조회6,929회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=1934
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-17 오후 3:37:26// by Ok-Hyun Park//#define F_CPU 16000000UL#include <avr/io.h>#include <util/delay.h>unsigned char index=0;unsigned char dir=0;unsigned char led7=0;unsigned char cnt=0;//int main(void){DDRA=0xFF;while(1){if(++cnt>=100){ cnt=0;if(dir==0)PORTA=0x01<<index;else PORTA=0x20>>index;//PORTA=PORTA|(led7<<7)led 7=led7^0x01;index++;index=index%6;if(index==0)idr=dir^0x01;}_delay_ms(1);}}//여기서 틀린 게 있다면 지적해주실 수 있나요?그리고 cnt의 개념을 모르겠습니다. cnt가 0부터 계속 커지다가 100이 되면 0이된다?이게 무슨 의미가 있는건가요??틀린 것은 설명하면서 찾아보기로하고요
cnt부터 설명해드리죠
while(1){if(++cnt>=100){ cnt=0;}_delay_ms(1);}루프 딜레이가 1ms이고
cnt가 1씩 증가하다가 100이 되었을 때 if()문이 실행 되므로
if()문은 100ms마다 실행 되는 셈입니다.
while(1){_delay_ms(100);if(dir==0)PORTA=0x01<<index;else PORTA=0x20>>index;//PORTA=PORTA|(led7<<7)led 7=led7^0x01;index++;index=index%6;if(index==0)idr=dir^0x01;}100ms 딜레이를 사용하면 if()문과 cnt 변수가 필요 없겠죠?
그렇다면 왜 복잡하게 cnt 변수를 사용하고
작은 값의 딜레이를 사용하는지 알아야합니다.
100ms가 아닌 1초 딜레이라고 가정해보죠
위 기능 외에 스위치를 여러개 사용해서 여러가지 기능을 넣는다고 하면
1초 딜레이 때문에 스위치 동작이 무지 답답해집니다.
만약 딜레이가 10초라면 스위치를 최대 10초동안 누르고 있어야지 스위치를 체크하게 됩니다.
while(1){if(++cnt>=100){ cnt=0;}//if(SW1체크){}if(SW2체크){}if(SW3체크){}if(SW4체크){}if(SW5체크){}//_delay_ms(1);}다시 cnt 변수를 사용하는 코드로 넘어가서
스위치 문장을 5개 추가했습니다.
어느 스위치든 체크주기가 1ms라서 누르는대로 바로 응답하는 것처럼 보이게 됩니다.
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-17 오후 3:51:51// by Ok-Hyun Park//#define F_CPU 16000000UL#include <avr/io.h>#include <util/delay.h>//unsigned char index=0,dir=0,cnt=0;//int main(void){DDRA=0xFF;while(1){if(++cnt>=100){ cnt=0;if(dir==0){ if(++index==7)dir=1; } // 좌쉬프트else { if(--index==0)dir=0; } // 우쉬프트PORTA=1<<index;}_delay_ms(1);}}
댓글 0
조회수 6,929등록된 댓글이 없습니다.