BASIC4MCU | 질문게시판 | 답변 : atmega 128 timer interrupt에 관한 질문
페이지 정보
작성자 master 작성일2023-12-13 18:01 조회544회 댓글0건본문
#define F_CPU 16000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//
char Seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F}; //"0123456789"
char M_flag=0,FND[4]={0,0,0,0};
signed char s=0,m=0;
//
void conv_fnd(){ FND[0]=m/10; FND[1]=m%10; FND[2]=s/10; FND[3]=s%10; }
//
ISR(TIMER0_OVF_vect){
static unsigned char n=0;
if(++n>=244){ n=0; PORTG^=3;
if(M_flag){
if(s && m){
s--;
if(s==0 && m==0){ M_flag=0; }
else if(s<0){ s=59; m--; }
}
}
}
}
//
ISR(INT0_vect){ M_flag=1; }
ISR(INT1_vect){ M_flag=0; if(++m>=60)m=0; conv_fnd(); }
ISR(INT2_vect){ M_flag=0; if(++s>=60){ s=0; if(++m>=60)m=0; } conv_fnd(); }
//
int main(void){
int i;
DDRA=0xff;
DDRC=0xff;
DDRG=0x03;
EICRA=0x3F; EIMSK=0x07; // INT0,1,2 Rising Edge
SREG|=0x80;
while(1){
for(i=0;i<4;i++){ PORTC=~(1<<i); PORTA=Seg[FND[i]]; _delay_ms(1); }
}
}
제대로 동작하는지 돌려보세요
댓글 0
조회수 544등록된 댓글이 없습니다.