#include <3694.h> // H8 Tinyの内部I/O定義 // 送受信用バッファ char txb[10], rxb[10]; /*デバックモニタ用シリアル通信初期化*/ // 通信ポートを初期化 ボーレートは9600[bps] SCI3_INIT (br9600, txb, sizeof(txb), rxb, sizeof(rxb)); // 初期化後は割り込みを許可状態に EI; /*----------------------------------------------------------------------------------------*/ /* 引数x20msウェイト */ /* (CPUクロック20MHz、1/128クロックで1カウントモード、156倍で19968クロック=約1mS) */ /*----------------------------------------------------------------------------------------*/ void wait (unsigned char speed) { long spd; spd = speed * 20; //引数を20倍 while (spd){ /*1mSウェイト*/ TV.TCRV0.BYTE = 0x03; //下の行と合わせて1/128クロックで1カウントモード TV.TCRV1.BYTE = 0X01; while(TV.TCNTV < 156); TV.TCNTV = 0; //カウンタクリア spd--; } } /*----------------------------------------------------------------------------------------*/ /* 引数x10uSウェイト */ /* (CPUクロック20MHz、1/8クロックで1カウントモード、25カウントで=10uS) */ /* ※大きい引数の場合はオーバーヘッド時間の差で遅れます。小さい時間のウェイトに向いている */ /*----------------------------------------------------------------------------------------*/ void wait_10us (unsigned char speed) { while (speed){ /*10uSウェイト*/ TV.TCRV0.BYTE = 0x01; //下の行と合わせて1/8クロックで1カウントモード TV.TCRV1.BYTE = 0X01; while(TV.TCNTV < 25); //25カウントで10uS TV.TCNTV = 0; //カウンタクリア speed--; } } /*----------------------------------------------------------------------------------------*/ /* 超音波距離センサーの距離測定(cmで返す) */ /* P11:トリガー入力 */ /* P12:結果出力 */ /*----------------------------------------------------------------------------------------*/ unsigned int US_OUT (void) { IO.PCR1 = 0x02; //P11を出力ポート,P12を入力ポートへ設定 unsigned int length = 0; //距離格納変数 IO.PDR1.BIT.B1 = 1; //P11(トリガ)をHigh wait_10us(2); //20uSウェイト IO.PDR1.BIT.B1 = 0; //P11(トリガ)をLow(超音波センサー測定開始) while (!(IO.PDR1.BIT.B2)); //センサーの出力が立ち上がるまで待つ TA.TMA.BYTE = 0x13; //タイマーA、クロックの1/512カウントモード while (IO.PDR1.BIT.B2); //センサーの出力が立下りまで待つ(計測終了) length = TA.TCA / 2.4; //タイマーの値を1cm単位に変換 TA.TMA.BYTE = 0x1F; //タイマーAリセット return length; } /*----------------------------------------------------------------------------------------*/ /* メイン */ /*----------------------------------------------------------------------------------------*/ void main(void) { /*一秒置きに距離を測定してモニタに表示*/ while(1){ SCI3_PRINTF("Distance = %d cm\n\n",US_OUT()); wait(50); } }