このプログラムを実行すると、上から7行目のところでエラーが出ます。エラーには、
'volatile unsigned char tone [8]' redeclared as different kind of symbol
と出ますが、調べても解決しませんでした。どうしたらエラーが無くなりますか。
#include <avr/io.h> #include <avr/wdt.h> #include <avr/interrupt.h> #define CTOP (0.5*F_CPU/1024-1) volatile unsigned char tone[8] = { 238, 212, 189, 178, 158, 141, 126, 118 }; volatile signed char n = -1; volatile signed char dir = 1; volatile unsigned char sw_cnt = 0;//値を確定するまでの繰り返し数 volatile unsigned char sw = 0;//スイッチの確定値 volatile unsigned char sw_flag = 0;//スイッチ状態の変化ビット unsigned char led[8]={0xAA}; //sw1,2のピン変化で起動 ISR(PCINT1_vect) { sw_cnt = 10;//2 x 10 mSec } //2mSecごとに起動 ISR(TIMER0_COMPA_vect) { static unsigned char sc = 0xfe; static unsigned char scan = 0; unsigned char sw_new; PORTB = 0; PORTD &= 0x3f; sc = (sc << 1) | (sc >> 7); scan = (scan + 1) & 7; PORTB = led[scan]; PORTC = (PORTC & 0xf0) | (sc & 0x0f); PORTD = (led[scan] & 0xc0) | (sc & 0x30) | (PORTD & 0x0f); if(sw_cnt) {//ピン変化割り込みがあれば if(--sw_cnt == 0) {//値が安定するまで待つ sw_new = (~PINC >> 4) & 3;//最新の読み取り値 sw_flag = sw ^ sw_new;//ON/OFF変化を検出 sw = sw_new;//読み取り値を更新 } } } ISR(TIMER1_COMPA_vect) { unsigned char i,k,m; n = (n + 1) & 7; OCR2A = tone[n]; //音階一の縦棒表示 k = 0x80 >> n; m = (TCCR2B & 1) * 3; led[0] ^=0xFF; for (i = 0; i < 2; i++) { led[m + i] = k; } } int main() { DDRB = 0x3f; DDRC = 0x0f; DDRD = 0xf8; PORTB = 0xc0; PORTC = 0xf0;//pull-up PC5,PC4 PORTD = 0x07; PCMSK1 = 0x30; PCICR = _BV(PCIE1); //Timer0 TCCR0A = 0x02;// TCCR0B = 0x04;//CTC,1/256 OCR0A = 124; TCNT0 = 0; TIFR0 = 0x07;//タイマフラグを全クリア TIMSK0 |= _BV(OCIE0A);//比較一致割り込み許可 //Timer1 TCCR1A = 0x00;//Compare Match Output Toggle COM2A,B TCCR1B = 0x0d;//CTC,1/1024 OCR1A = CTOP; TCNT1 = 0; TIFR1 = 0x07;//タイマフラグを全クリア TIMSK1 |= _BV(OCIE1A);//比較一致割り込み許 //Timer2 TCCR2A = 0x12;//Compare Match Output Toggle COM2B TCCR2B = 0x05;//CTC,1/64 OCR2A = 1; TCNT2 = 0; sei();//割り込み許可 for(;;){ wdt_reset(); //読み取り値に変化があれば if(sw_flag) { sw &= sw_flag;//sw_ON 変化のみ抽出 if(sw==1) { } if(sw==2) { } sw_flag = 0; } } return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/07 04:43