/* ========================================================================== * * リスト1 * SH-2からPCにシリアル通信でデータを送信する * written by Masaru Iritani * ========================================================================== */ /* -------------------------------------------------------------------------- * * シリアル通信で1Byteの文字データを送信する * -------------------------------------------------------------------------- */ void Sputc(char c) { while(SCI1.SSR.BIT.TDRE == 0); // 送信可能になるまで待機 SCI1.TDR = c; // データの送信 SCI1.SSR.BIT.TDRE = 0; } /* -------------------------------------------------------------------------- * * 数値を16進の文字に置換する関数 * -------------------------------------------------------------------------- */ char num2ascii(int n) { if(0 <= n && n <= 9) /* 0 - 9 */ return 0x30 + n; else if(10 <= n && n <=15) /* 0xA - 0xF */ return 0x41 + (n - 10); else /* OTHERS */ return '?'; } /* -------------------------------------------------------------------------- * * 値を16進の文字列に変換する関数.ただし,値は12bit以内(16進で3桁)を仮定 * -------------------------------------------------------------------------- */ void putnum(int n) { Sputc('0'); Sputc('x'); Sputc(num2ascii((n>>8)&0xF)); Sputc(num2ascii((n>>4)&0xF)); Sputc(num2ascii((n>>0)&0xF)); } /* ========================================================================== * * リスト2 * フィギュアスケート方式で値を算出する関数 * 対象とするデータのポインタを与えると,そこまで10個のフィギュアスケート方式の平均を取る * ========================================================================== */ unsigned int average(unsigned int* data){ int sum = data[0]; // 値の合計 int max = data[0]; // 最大値を格納する変数 初期値は最初の値 int min = data[0]; // 最小値を格納する変数 初期値は最初の値 int i; // 2 番目の値から最後の値までのループ for(i = 1; i < 10; i++) { // 値の合計に現在の値を加える sum += data[i]; // 最大値より大きな値が来れば最大値を更新 max = (data[i] > max) ? data[i] : max; // 最小値より小さな値が来れば最小値を更新 min = (data[i] < min) ? data[i] : min; } // 合計から最大値と最小値を引いた 8 つの値で平均を取る return ((sum - max - min) >> 3); } /* ========================================================================== * * リスト3 * 対象とする信号の基準となる信号からの差分をとる関数 * ========================================================================== */ unsigned int diff(unsigned int data, unsigned int base){ return data - base; }