BASIC4MCU | 질문게시판 | ATMEGA128A 질문있습니다 수정자료
페이지 정보
작성자 헤헿헿 작성일2018-12-15 21:38 조회22,021회 댓글6건첨부파일
본문
말씀하신 잘못된곳 고치고 코딩도 조금 바꿔봤습니다.
main안의 while(timer[musicCode1[k].speed] > ms) 여기서
빠져나오지 못하던데 왜 그런지 궁금합니다.
1번파일이 원본이고
2번파일은 timer2대신 delay_ms함수를 써서 테스트 해본 겁니다.
댓글 6
조회수 22,021master님의 댓글
master 작성일
SREG = 0X08;
이 문장에 오류가 있습니다.
SREG = 0x80; // 전역(전체) 인터럽트 이네이블
이렇게 바꿔야지 인터럽트가 걸립니다.
헤헿헿님의 댓글
헤헿헿
으아;; 거기도 틀렸었네요
SREG수정 후에도 while구문을 못벗어나는데 왜그런가요
master님의 댓글
master
TCCR0=(1<<WGM01)|(1<<COM00); TIMSK|=(1<<OCIE0);
타이머0 인터럽트 이네이블 시키고 인터럽트 함수를 만들지 않으면 오동작합니다.
TIMSK|=(1<<OCIE0); 이 설정은 왜 하는지 모르겠군요
CTC 토글 모드로 OC0 펄스 출력을 하려면 위 설정만으로는 출력이 나가지 않습니다.
헤헿헿님의 댓글
헤헿헿
네 그래서 수정본에는 TIMSK를 지웠습니다.
codevision 사용중인데 타이머 인터럽의경우 따로 함수지정을 안해줘도 인식이된다고 알고잇었는데
interrupt[TIM0_COMP]void isr_timer0_comp()
인터럽트 함수라는게 이걸 말씀하시는건가요?
master님의 댓글
master
const char timer[]={188,375,563,750,1500}; // 단위: ms
(코드비젼 프로젝트 설정에서 char = unsigned char 체크되어 있는 경우에) char는 0~255 범위입니다.
char로 255가 넘는 값을 다루지 못하죠
int로 변경하세요
헤헿헿님의 댓글
헤헿헿
몰랐던 내용이네요
감사합니다