PICマイコンの開発環境であるMPLAB X IDEに備わっているデバッグ用のプログラミング言語Stimulus Control Languageを使って、自作のPICプログラムをデバッグしてみる記録です。今回は制御文(if
, loop
, while
)について。
If文
条件によって実行する文を変えます。then
ブロックとelse
ブロックは複数の文を書くことができます。
if 条件式 then 文1; 文2; ... else 文3; 文4; ... end if;
条件式にでは結果がtrueまたはfalseになる式を書くことができます。条件式で使えるのは等号(==)、不等号(<, <=, >, >=)とboolean型の変数です。
boolVar // ユーザ定義変数boolVarの値 RA1 == '1' // RA1がHighならtrue RA1 <= 3500 mv // RA1ピンが3.5V以下ならtrue intVar > 123 // intVarが123より大きければtrue intVar - 34 < 123 // intVar - 34が123より小さければtrue
論理演算子(and, or, notなど)は現在のSCLにはまだ実装されていないようです。
if
文はこんな感じで使います(付属サンプルのコピー)。
// RD0の反転をRD1に出力 wait on RD0; if RD0 == '1' then RD1 <= '0'; else RD1 <= '1'; end if; // ピンの電圧をチェック if RD0 > 2500 mv then RD1 <= '0'; RD2 <= '0'; end if; // boolean型変数をチェック if testBool then RD1 <= '0'; RD2 <= '0'; end if;
Loop文
process
ブロック内で明示的なループを記述します。ループから抜けるには、exit
文で条件を指定します。exit
文で条件を指定しなかった場合は無条件でループを抜けます。
loop 文1; 文2; ... exit when 真偽式; // なくても良い。無いと無限ループ end loop;
使い方はこうです。
// 無限ループ loop RD1 <= '0'; wait on RD1; end loop; // プログランカウンタPCが変数fooと同じになるまで繰り返し loop RD0 <= '0'; wait 4 ic; RD0 <= '1'; wait 4 ic; exit when PC == foo; end loop; // 無条件でのループ脱出 loop AN1 <= 3500 mv; exit; // exitに条件を指定しない。 end loop; // 複数のループ脱出条件 loop wait on RD1; RD0 <= '0'; exit when STATUS.Z == 0; exit when RD2 == '0'; end loop;
While文
loop文の亜種で、ループ継続条件をループ先頭で指定します。
while 真偽式 loop 文1; 文2; ... exit when 真偽式; // 明示的にループ脱出条件を書いても良い。 end loop;
使い方はこうです。
// 無限ループ while true loop RD1 <= '0'; wait on RD1; end loop; // プログラムカウンタPCが0x2000より大きい間繰り返し while PC <= #16#2000# loop PIR3.ADIF <= 1; wait 200 us; end loop; // PIR2.EEIFビットがセットされている間繰り返し while PIR2.EEIF == 1 loop RD1 <= '1'; wait on RD0; exit when PC == 0; // デバイスリセット時 end loop;
コメント