BASIC4MCU | 질문게시판 | 답변 : ATMEGA128A timer 관련 질문있습니다.
페이지 정보
작성자 master 작성일2018-12-15 17:05 조회6,968회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6897
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-12-15 오후 5:09:01// by Ok-Hyun Park//#include <io.h>//#define LENGTH 99//typedef enum{ra_1,si_1,do_2,re_2,mi_2,fa_2,sol_2,ra_2,high} melody_code; //high: 불가청 음역대 쉼표 표시typedef enum{tf,f,sf,o,t} speed_code;//const char clock_set[]={7,6,6,6,6,6,6,6,2};const char ocr0_set[] ={142,253,238,212,189,179,159,142,1};const int timer[] ={188,375,563,750,1500}; //msconst char led[] ={0x01,0x03,0x07,0x0f,0xff};const char oct[] ={0x06,0x06,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x00};const char scale[] ={0x77,0x39,0x06,0x4f,0x6d,0x7d,0x7f,0x77,0x00};//typedef struct{melody_code melody;speed_code speed;} MUSIC_CODE;//const MUSIC_CODE musicCode1[LENGTH]={{sol_2,o},{mi_2,o},{do_2,o},{high,o},{re_2,sf},{mi_2,tf},{fa_2,f},{re_2,f},{si_1,o},{high,o},//즐겁게 춤을추다가{do_2,o},{do_2,f},{do_2,f},{mi_2,o},{mi_2,o},{sol_2,f},{high,f},{high,o},{high,t},// 그대로 멈춰라{sol_2,o},{mi_2,o},{do_2,o},{high,o},{re_2,sf},{mi_2,tf},{fa_2,f},{re_2,f},{si_1,o},{high,o},//즐겁게 춤을추다가{ra_1,o},{ra_1,f},{ra_1,f},{si_1,o},{si_1,o},{do_2,f},{high,f},{high,o},{high,t},// 그대로 멈춰라{ra_2,o},{ra_2,o},{ra_2,f},{ra_2,f},{ra_2,f},{ra_2,f},// 눈도 감지말고{sol_2,o},{sol_2,f},{sol_2,f},{sol_2,o},{sol_2,o},// 웃지도 말고{fa_2,o},{fa_2,f},{fa_2,f},{fa_2,o},{fa_2,o},// 울지도 말고{mi_2,f},{mi_2,f},{fa_2,f},{fa_2,f},{sol_2,f},{high,f},{high,o},// 움직이지마{sol_2,o},{mi_2,o},{do_2,o},{high,o},{re_2,sf},{mi_2,tf},{fa_2,f},{re_2,tf},{si_1,o},{high,o},//즐겁게 춤을추다가{do_2,o},{do_2,tf},{do_2,f},{mi_2,o},{mi_2,o},{sol_2,f},{high,f},{high,o},{high,t},// 그대로 멈춰라{sol_2,o},{mi_2,o},{do_2,o},{high,o},{re_2,sf},{mi_2,tf},{fa_2,f},{re_2,f},{si_1,o},{high,o},//즐겁게 춤을추다가{ra_1,o},{ra_1,f},{ra_1,f},{si_1,o},{si_1,o},{do_2,f},{high,f},{high,o},{high,t} // 그대로 멈춰라};//int timer2_flag;int ms=0;//interrupt[TIM2_COMP]void isr_timer2_comp(){timer2_flag=1;if(++ms>1000)ms=0;}//void main(){int k;DDRB.4=1; DDRA=0XFF; DDRC=0xFF; DDRG=0x0F;TCCR0=0;TCCR0|=(1<<WGM01)|(1<<COM00);TCCR2|=(1<<WGM21)|(1<<CS20|(1<<CS21); OCR2=249; TIMSK=(1<<OCIE2); //1msSREG=0X08;while(1){if(timer2_flag){timer2_flag=0;for(k=0; k<=98; k++){TCCR0=0; TCCR0|=(1<<WGM01); TCCR0|=(1<<COM00); TCCR0|=clock_set[musicCode1[k].melody];OCR0=ocr0_set[musicCode1[k].melody]; // 여기까지 음정 관련 코드PORTA=led[musicCode1[k].melody]; // led 박자 길이 표시PORTC=8;PORTG=oct[musicCode1[k].melody]; // 옥타브 표시PORTC=1;PORTG=scale[musicCode1[k].melody]; // 음계 표시while(timer[musicCode1[k].speed]>ms); // 박자 조정}}}}
TCCR0|=(1<<WGM01)|(1<<COM00); TIMSK|=(1<<OCIE0);인터럽트 이네이블 시키고 인터럽트 함수를 만들지 않으면 오류 발생합니다.
TCCR0|=(1<<WGM01)|(1<<COM00);
OCR0=ocr0_set[musicCode1[k].melody];
이렇게만 해도 소리가 나든가요?
댓글 1
조회수 6,968헤헿헿님의 댓글
헤헿헿 작성일
아 실수가 있었네요
조금 더 고쳐보겠습니다.