/**************************************************/ /* パルス幅の計測 割り込み RIKIYA 2004/02/26 */ /* inputtest4.c */ /* H8-3048/F */ /* キャプチャ割り込みによるパルス幅計測 */ /* 計測結果を0.2秒ごとにシリアル通信で出力する。 */ /* ボーレート 9600bps */ /* データ長 8bit */ /* ストップビット 1 */ /* パリティ なし */ /* フロー制御なし */ /* */ /**************************************************/ #include <3048.h> #include long counter; // グローバル変数宣言 /* メイン関数************************************************/ int main(void){ EI; // 割り込みマクロ P1.DDR = 0xff; // port1出力に設定 表示LED PA.DDR = 0x00; // portA入力に設定 パルス入力用 ITU1.TCR.BYTE = 0x23; // GRAインプットキャプチャ,カウンタクリアGRA clock 1/8 ITU1.TIOR.BYTE = 0xCF; // GRA両エッジインプットキャプチャ ITU1.TIER.BIT.IMIEA = 1; // IMFAフラグ割り込み許可 ITU.TSTR.BIT.STR1 = 1; // カウント開始 timer_init(); // タイマー初期化 sci1_init(); // sci1初期化 while(1){ wait(200); // 0.2秒の待機 sci_number_send(counter); // 計測結果をuS単位でシリアル出力 } } /* 計測結果のシリアル通信出力 *******************************/ int sci_number_send(long counter){ char tx_data[10]; long data; data = counter/2; // カウント速度0.5uSなので 1/2にする tx_data[0]=data/10000 + 0x30; data%=10000; tx_data[1]=data/1000 + 0x30; data%=1000; tx_data[2]=data/100 + 0x30; data%=100; tx_data[3]=data/10 + 0x30; data%=10; tx_data[4]=data + 0x30; tx_data[5]='u'; tx_data[6]='S'; tx_data[7]='\r'; tx_data[8]='\n'; tx_data[9]='\0'; sci1_strtx(tx_data); // 文字列送信 } /* 割り込み処理 *********************************************/ void int_imia1(void){ ITU1.TIER.BIT.IMIEA = 0; // IMFA割り込み禁止 ITU1.TSR.BIT.IMFA = 0; // フラグをクリア if(PA.DR.BIT.B4 == 1){ // 入力パルス立ち上がりの場合 } if(PA.DR.BIT.B4 == 0){ // 入力パルス立下りの場合 counter = ITU1.GRA; // counterに格納 P1.DR.BYTE = counter >> 4; // 4BITシフトさせcounterをP1に表示 } ITU1.TIER.BIT.IMIEA = 1; // IMFA割り込み許可 }