MPLAB X IDEのSCLでデバッグ(6)

電子工作

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;

SCL記事一覧

コメント

タイトルとURLをコピーしました