始めまして
C言語初心者です。
学校の課題でフローチャートを描いていたのですが、行き詰まってしまったので
どなたかアドバイスお願いします。
while(1)
{
AD.ADCSR.BIT.ADST=1;
while(AD.ADCSR.BIT.ADF==0) {}
IO.PDR5.BYTE=(AD.ADDRC>>8);
}
}
この場合、どのような順序で処理が行われるのでしょうか?
お手数ですが、アドバイス頂けると助かります。
よろしくお願いします。
while文のループについて・・・
Re:while文のループについて・・・
カッコの数がおかしいですし、別スレッドで共通の変数を利用しているならともかく無意味なループがあります。
本当にプログラムコードは正しいですか?
また、今ご自身で解っているのはどの段階ですか?
書きかけのフローチャートなどあれば見せてもらえると間違いの指摘がしやすいかもしれません。
本当にプログラムコードは正しいですか?
また、今ご自身で解っているのはどの段階ですか?
書きかけのフローチャートなどあれば見せてもらえると間違いの指摘がしやすいかもしれません。
Re:while文のループについて・・・
マイコンか何かのプログラムかな?
一番下の}を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を何かしら出力しているといった感じでしょうか
一番下の}を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文のループについて・・・
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にしておく。 }