while文のループについて・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C言語初心者

while文のループについて・・・

#1

投稿記事 by C言語初心者 » 15年前

始めまして
C言語初心者です。

学校の課題でフローチャートを描いていたのですが、行き詰まってしまったので
どなたかアドバイスお願いします。


while(1)
{
AD.ADCSR.BIT.ADST=1;

while(AD.ADCSR.BIT.ADF==0) {}

IO.PDR5.BYTE=(AD.ADDRC>>8);


}
}

この場合、どのような順序で処理が行われるのでしょうか?
お手数ですが、アドバイス頂けると助かります。
よろしくお願いします。

Dixq (管理人)

Re:while文のループについて・・・

#2

投稿記事 by Dixq (管理人) » 15年前

カッコの数がおかしいですし、別スレッドで共通の変数を利用しているならともかく無意味なループがあります。
本当にプログラムコードは正しいですか?

また、今ご自身で解っているのはどの段階ですか?
書きかけのフローチャートなどあれば見せてもらえると間違いの指摘がしやすいかもしれません。

nayo

Re:while文のループについて・・・

#3

投稿記事 by nayo » 15年前

マイコンか何かのプログラムかな?

一番下の}をmainの括弧閉じと仮定してwhile(1)内だけで見るなら

① AD.ADCSR.BIT.ADST=1;
② AD.ADCSR.BIT.ADF=0か?―yes→②へ
      |
      no
      ↓
③ IO.PDR5.BYTE=(AD.ADDRC>>8);
④ ①へ戻る

こんな感じですかね?

おそらくAD.ADCSR.BIT.ADST=1;はAD変換開始フラグを立て、
AD.ADCSR.BIT.ADFが0以外ならばAD変換完了なのでそうなるまで待って、
IO.PDR5.BYTEでAD.ADDRC内のAD変換結果が格納された上位8bitを何かしら出力しているといった感じでしょうか

たかぎ

Re:while文のループについて・・・

#4

投稿記事 by たかぎ » 15年前

マイコンのプログラムでしょうね。
このループだけを見てもダメで、割り込み処理も一緒に見るようにしてください。

non

Re:while文のループについて・・・

#5

投稿記事 by non » 15年前

H8/3664 あたりのマイコンでしょうね。
マイコンなら、型番や、各ポートに何が接続されているか書いてもらわないと困ります。
また、イニシャライズの部分を省略されると、わからない部分もある。
while(1) 
永久ループ、通常マイコンのプログラムは永久ループにして終了しないようにする。
    { 
        AD.ADCSR.BIT.ADST=1; 
AD変換のスタート。恐らく単一モードで動かしている。ADSTを1にすると変換がスタートする。
        while(AD.ADCSR.BIT.ADF==0)    {} 
変換が終了するまで待つ。変換が終了するとレジスタ(ADDRC)に変換結果が格納されADFが1になる。
         
        IO.PDR5.BYTE=(AD.ADDRC>>8); 
データをPDR5に8ビット右シフトして出力。仮に3664なら10ビットですが、bit15からbit6に格納され
ているので、8ビットシフトすれば上位の8ビットが取り出される。これをPDR5に出力。
恐らく、LEDだろうか?
この後、割り込みがあるのなら、いいけど、割り込みがないのなら
AD.ADCSR.BIT.ADF=0;
が必要だと思われる。たぶん。自動的にADFは0に戻らないので、次の変換のために0にしておく。

    }

閉鎖

“C言語何でも質問掲示板” へ戻る