• ベストアンサー

モータの制御

//ステッピングモータの回転 //右に2回転、停止、左に1回転、停止これを3回繰り返す //ITUO使用、フラグが立つのを待つ //10msごとにモータに出力 //str_4.c #include <3048f.h> void ioinit(void) { PB.DDR = 0xff; } void ituinit(void) { ITUO.TCR.BIT.CCLR = 1; //カウンタクリア要因 ITUO.TCR.BIT.TPSC = 3; //タイマプリスケーラ 25MHz/8=3.125MHz ITUO.GRA = 31249; //3.125MHz/31250=100Hz、10ms、100pps ITUO.TIER.BIT.IMIEA = 0; //IMFAフラグによる割り込み禁止 } void wait(void) //停止時間 { Long t=200000; while(t--); } int main(void) { int i = 3; //繰り返しカウンタ int p; //回転パルス数 int md = 0x11; //モータ出力データ ioinit(); ituinit(); PB.DR.BYTE = md; wait(); ITU.TSTR.BIT.STR0 = 1; //タイマスタート while(i--){ for(p=0;p<96;p++){ //2回転 PB.DR.BYTE = md; md <<= 1; //右回転 if(md == 0x110) //4回シフトしたかの判断 md = 0x11; //4回シフトで初期値に戻す while(!ITU0.TSR.BIT.IMFA); //フラグが立つのを待つ ITU0.TSR.BIT.IMFA = 0; //フラグクリア } wait(); //少し停止 for(p=50;p>0;p--){ //1回転、1パルス多くした PB.DR.BYTE = md; md >>= 1; //左回転 if(md == 0x08) //4回シフトしたかの判断 md = 0x88; //4回シフトで初期値に戻す while(!ITU0.TSR.BIT.IMFA); //フラグが立つのを待つ ITU0.TSR.BIT.IMFA = 0; //フラグクリア } wait(); } PB.DR.BYTE = 0x00; //モータ励磁OFF while(1); //ここでとまっている } このプログラムのフローチャートがわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • peeea
  • ベストアンサー率57% (31/54)
回答No.1

http://okwave.jp/qa3576919.html 上記URLでも回答しましたが、学校の課題でしょうか? プログラム中のコメント文を順番通りに並べれば フローチャートが完成します。 例えばプログラムの最後の部分は以下のようになります。 ・4回シフトしたか?  ・Yesなら4回シフトで初期値に戻す ・フラグが立つのを待つ ・フラグクリア ・50回繰り返し 課題の丸投げはあまりよくありませんので補足をお願いします。 何がわかっていて、何がわからないのですか? ・int ・for ・while ・>>= などの文の内、どれがわからなくて プログラムのどの部分がわかるかなどを補足してください

その他の回答 (1)

  • Interest
  • ベストアンサー率31% (207/659)
回答No.2

もうソースコードが手元にあって、A4の紙1枚に印刷できる程度の分量なのですよね。そしたら、何のためにフローチャートが必要なのですか? フローチャートの用途は主として (a) プログラム設計時、処理の流れを考えるため (b) 他人に処理の流れを説明するため (c) 他人が設計したプログラムを理解するため になるかとおもいます。 poscam33さんの用途は (c) ですか?

関連するQ&A