AVR > 4개의 SW입력 타이머 인터럽트로 처리

TODAY936 TOTAL2,152,322
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | AVR | KEY | 4개의 SW입력 타이머 인터럽트로 처리

페이지 정보

작성자 키트 작성일2017-08-25 17:20 조회2,161회 댓글3건

본문

// 4개의 SW입력 타이머 인터럽트로 처리
#define SW_IN    PINA
#define UpSW     PINA.0
#define DnSW     PINA.1
#define LeftSW   PINA.2
#define RightSW  PINA.3

#define KeyUp    0
#define KeyDn    1
#define KeyLeft  2
#define KeyRight 3

#define U_C    unsigned char

bit    PushFlg=0, KeyFlg=0;
U_C    KeyBuf=0;

interrupt [TIM1_OVF] void timer1_ovf_isr(void){
    TCNT1H=0xD4; TCNT1L=0xCD;
//Key Check
    if((SW_IN&0x0F)!= 0x0F){
        if(!PushFlg){ PushFlg=1;
            if(!UpSW)       KeyBuf=KeyUp;
            else if(!DnSW)  KeyBuf=KeyDn;
            else if(!LeftSW)KeyBuf=KeyLeft;
            else            KeyBuf=KeyRight;
        KeyFlg=1;
        };
    }
    else PushFlg=0;
}


void main(void){
    while(1){ 
        while(!KeyFlg){};
        KeyFlg=0;
        if     (KeyBuf==KeyUp){}
        else if(KeyBuf==KeyDn){}
        else if(KeyBuf==KeyLeft){}
        else if(KeyBuf==KeyRight){};
    };
}

댓글 3

조회수 2,161

모오다님의 댓글

모오다작성일

TCNT1H=0xD4; TCNT1L=0xCD; << 왜 이 값을 사용하셨나요??

master님의 댓글

master댓글의 댓글작성일

TCNT1은 0xd4cd 부터 0xffff까지 증가합니다.
이 후 0으로 오버플로우 하면서 인터럽트가 발생하는 것이므로
0xd4cd~0x10000 까지 증가한다고 보면 되겠죠
0xd4cd~0x10000는 11059 카운트입니다.
즉 11059 카운트마다 인터럽트가 발생합니다.
타이머 관련 레지스터 설정이 첨부 코드에 없으니 1카운트의 시간이 얼마인지는 알 수가 없군요

모오다님의 댓글

모오다댓글의 댓글작성일

아! 검색해서 확인했습니다 감사합니다~
------------------------------------
댓글을 달아주셨군요^^ 감사합니다!

AVRHOME > AVR > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기