#include <3048F.H> void print_ii_sci1(unsigned int data); void print_s_sci1(char string[80]); void main(void) { unsigned char i; unsigned int ii; float a; /*ポート1を出力に設定*/ P1.DDR = 0xff; /*時間の計算は、クロック=25MHzとして実施*/ /*内部クロック8分周、フリーランニングモード*/ ITU0.TCR.BIT.TPSC = 3; ITU.TSTR.BIT.STR0 = 1; /*****************************************************/ /*電源投入後、PINGが起動するまでしばらく待つこと!*/ while(1 == 1) { P1.DDR = 0xff; /*入力トリガ*/ P1.DR.BIT.B0 = 1; ITU0.TCNT = 0; while(ITU0.TCNT < 15); P1.DR.BIT.B0 = 0; /*ウェイト*/ while(ITU0.TCNT < 30); P1.DDR = P1.DDR & 0xfe; /*ホールドオフ*/ ITU0.TCNT = 0; while(ITU0.TCNT < 1093); /*パルス計測開始*/ while(P1.DR.BIT.B0 == 0); ITU0.TCNT = 0; while(P1.DR.BIT.B0 == 1); ii = ITU0.TCNT; /*ウェイト*/ for(i = 0; i < 25; i++) { ITU0.TCNT = 0; while(ITU0.TCNT < 65000); } /*ターミナルに表示(cm単位) 音速の温度補正は無し*/ a = (float)ii; a = a / (float)19778.5 * (float)100.0; ii = (unsigned int)a; print_ii_sci1(ii); } } /*************************************************/ /*正の整数をターミナル画面に表示する(Asciiコード出力)*/ void print_ii_sci1(unsigned int data) { unsigned int org_data; unsigned int i, j, bitptn; char string[80]; org_data = data; bitptn = 10000; for(i = 0; i < 5; i++) { j = data / bitptn; string[i] = '0' + j; data = data - bitptn * j; bitptn = bitptn / 10; } for(i = 0; i < 4; i++) { if(string[i] == '0') string[i] = ' '; else break; } string[5] = 0x00; print_s_sci1(string); return; } /*char変数80バイト max をシリアルポートへ出力する(Cストリング)*/ void print_s_sci1(char string[80]) { unsigned char i; i = 0; do { print_c_sci1(string[i]); i++; }while(string[i] != 0 && i < 80); print_c_sci1(0x0d); print_c_sci1(0x0a); return; }