답변 : 코딩 질문이요!!
페이지 정보
작성자 master 작성일18-06-17 15:41 조회4,335회 댓글0건본문
// 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
조회수 : 4,335
등록된 댓글이 없습니다.