/****************************************************************************/ /* プロジェクト名: rhand */ /* ファイル名: main.c */ /* 内容: Oaks16−SENSOR LABO */ /* サンプルプログラム メイン制御部 */ /* */ /* 1.以下のハードウエアリソース(資源)初期化を行い、 */ /* センサーLABOの制御の準備をする。 */ /* ・センサ初期化関数呼出(senseor.c) */ /* ・モータ初期化関数呼出(motor.c) */ /* 2.センサーLABO制御関数を周期的に呼び出す。 */ /* ・LABO制御関数呼出(labomain.c) */ /* */ /* 特記事項: オプションLED(P70〜P73)追加バージョン */ /* 日付: 2006.7.10 */ /* コンパイラ: NC30WA (Ver.5.10 Release 1) */ /* note: OAKS16対応(OAKS16-SENSOR LABO) */ /* 作成者: Kazuhiko Araki */ /* */ /****************************************************************************/ /* */ /* $Revision: 1.1 $ */ /* $Date: 2006/09/27 08:17:52 $ */ /****************************************************************************/ /* インクルードファイル */ #include "sfr62a.h" /* Oaks16用SFR定義ファイル */ #include "motor.h" /* モータ制御定義ファイル */ #include "sensor.h" /* センサ制御定義ファイル */ /* プロトタイプ宣言 */ void main( void ); /* メインプログラム */ /* マクロ定義 */ #define CNT_TA0 (2500-1) /* timerA0カウンタ値 fck=f1/32→2μs=2.0e-6[s] */ /* timerA0=2.0e-6*2500=5[ms] */ #define CLOSEBY 200 /* センサ判定接近判定距離閾値 */ #define RIGHT_FAR CLOSEBY /* 右壁遊離時距離閾値 */ #define RIGHT_NEAR RIGHT_FAR+50 /* 右壁接近時距離閾値 */ /* 列挙型変数宣言 */ /* 外部変数宣言 */ /*--------------------------------------------------------------------------*/ /* 関数名 :main() */ /* 機能 :スタートアッププログラムから呼び出されるC言語関数 */ /*--------------------------------------------------------------------------*/ void main( void ) { int i; int sense_result; /* センサ判定結果格納変数 */ /* 光測距センサ初期化 */ initSensor(); /* センサ制御初期化関数呼出 */ /* メイン制御で使用するタイマの設定 */ /* timerA0設定 割り込みは使用せず要求ビットのみを監視する。10msに設定 */ ta0ic = 0x00; /* タイマA0割り込みレベルの設定 */ /* bit2,1,0: 000: 割り込みレベル1(割込み禁止) */ /* bit3: 0: 割り込み要求ビット←クリア */ ta0mr = 0x80; /* タイマA0タイマモードの設定 */ /* bit1,0: 00: タイマモード */ /* bit2: 0: パルス出力無し */ /* bit4,3: 0X: ゲート機能無し(TAiIN端子は通常のポート端子) */ /* bit5: 0: タイマモードでは必ず"0" */ /* bit7,6: 10: カウントソース=f32 */ ta0 = CNT_TA0; /* タイマ値の設定 */ /* f32=周期2μsecの時 */ /* (5000-1)を設定すると、5000×2us=10ms */ /* →10ms毎にir_ta0icが”1”になる。 */ /* タイマの起動 */ tabsr = 0x03; /* カウント開始:タイマA0、A1、A2、A3 */ /* bit0: A0:10ms規定用 */ /* bit1: A1:800Hz出力用 */ /* bit2: A2:右モータ速度制御用 */ /* bit0: A3:左モータ速度制御用 */ /* 変数の初期化 */ _asm("\tFSET I"); /* 割り込み許可 */ /* スイッチを入れてすぐに動き出してしまうと不便なので少々待つ */ for( ; ; ) { /* メインループ */ if( ir_ta0ic == 1 ) /* 10ms経過? */ { /* >yes */ ir_ta0ic = 0; sense_result = checkSensor( CLOSEBY ); /* センサ判定用関数 */ } } }