AVR > mega128 스톱워치

TODAY16,343 TOTAL4,210,592
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

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


BASIC4MCU | AVR | 타이머 | mega128 스톱워치

페이지 정보

작성자 키트 작성일2017-08-29 09:27 조회4,437회 댓글0건

본문

//=====================================================

// 코드비젼 컴파일러 사용
// 11.0592MHz
//=====================================================
#pragma opt- //최적화금지옵션
//=====================================================
#include <mega128.h>
//=====================================================
#define  fnd_common_off  PORTB=0xFF
#define  fnd_common1     PORTB.0
#define  fnd_common2     PORTB.1
#define  fnd_common3     PORTB.2
#define  fnd_common4     PORTB.3

#define  fnd_data PORTC
//=====================================================
#define  on 0
#define  of 1
//=====================================================
// 7 Segment Pattern Data
// bit별 Segment 위치                  GFEDCBA
#define SEG_0        0xC0        // &B11000000    0    ****A***
#define SEG_1        0xF9        // &B11111001    1    *      *
#define SEG_2        0xA4        // &B10100100    2    F      B
#define SEG_3        0xB0        // &B10110000    3    *      *
#define SEG_4        0x99        // &B10011001    4    ****G***
#define SEG_5        0x92        // &B10010010    5    *      *
#define SEG_6        0x82        // &B10000010    6    E      C
#define SEG_7        0xD8        // &B11011000    7    *      *
#define SEG_8        0x80        // &B10000000    8    ****D***
#define SEG_9        0x98        // &B10011000    9
#define SEG_BLK      0xFF        // &B11111111    10 BLANK
// FND 변수 ===================================================
char fnd_tbl[] = {

    SEG_0, SEG_1, SEG_2, SEG_3, SEG_4, SEG_5, SEG_6, SEG_7, SEG_8, SEG_9, SEG_BLK

};
//=====================================================
#define ON        0
#define OFF       1
//=====================================================
//     Variable Declaration
//=====================================================
bit  CntFlg=0;
char sec10=0, sec1=0, msec10=0, msec1=0;
char fnd_cnt=0;
//=====================================================
//     Interrupt Service Routinue
//=====================================================

// 외부인터럽트0
interrupt [EXT_INT0] void ext_int0_isr(void){  // 정지/시작

    CntFlg=~CntFlg;

}
//=====================================================

// 외부인터럽트1
interrupt [EXT_INT1] void ext_int1_isr(void){  // 리셋

    CntFlg=0;
    sec10=sec1=msec10=msec1=0;
}
//=====================================================

interrupt [TIM1_COMPA] void timer1_compa_isr(void){ //10msec
//time count-up
    if(CntFlg){
        msec1++;
        if(msec1 >9){ msec1=0;  msec10++; }
        if(msec10>9){ msec10=0; sec1++; }
        if(sec1  >9){ sec1=0;   sec10++; }
        if(sec10 >9)  sec10=0;
    }

//segment display
  fnd_common_off;
  if     (fnd_cnt==0){ fnd_data=fnd_tbl[sec10];  fnd_common1=on; fnd_cnt++; }//10sec
  else if(fnd_cnt==1){ fnd_data=fnd_tbl[sec1];   fnd_common2=on; fnd_cnt++; }//1sec
  else if(fnd_cnt==2){ fnd_data=fnd_tbl[msec10]; fnd_common3=on; fnd_cnt++; }//0.1sec
  else                 { fnd_data=fnd_tbl[msec1];  fnd_common4=on; fnd_cnt=0; }//0.01sec
}

//=====================================================

//     Main Routinue
//=====================================================
void main(void){
    DDRB=0xff//FND common
    DDRC=0xff//FND data
    //11059200 / 1024 / (1 + 107)=100, 10msec
    TCCR1B=0x0d; OCR1A=107; TIMSK=0x10;
// 외부 인터럽트0,1
    PORTD=0xff// 인터럽트 스위치 내부풀업저항 사용
    EICRA=0x0a; EIMSK=0x03;         //falling edge
    #asm("sei")
    while(1){}
}
//=====================================================

댓글 0

조회수 4,437

등록된 댓글이 없습니다.

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
모바일버전으로보기