2023.5.19
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第24回]



●SET,RES

前回はI/Oポートにデータを出力するときなどに使われることが多いAND()、OR()について説明をしました。
今回もやはりI/Oポートの出力に利用されることの多い機能についての説明です。
前回のAND()やOR()などは関数ですが今回のSET、RESは命令です。
8ビットの変数の値の特定の1ビットのみを1にするのがSET命令で逆に0にするのがRES命令です。

[1]SET r,b

rは8ビットの変数です。
通常の変数のほかI/OポートのTRISXやPORTXなどのSFR(特殊関数レジスタ)も指定することができます。
bはビット位置を示す0〜7の範囲の数で変数や式で示すこともできます。
rレジスタの値のうちbビットのみを1にします(他のビットは変化しません)。

下はSET命令の最も簡単なテストプログラムです。

変数aの値は$55(’01010101’)です。
SET a,1を実行した結果ビット1がセットされて$57(’01010111’)になりました。

ビットの指定に式を使ったテストプログラムです。

bの値は3です。
SET a,b+2はSET a,5なので実行後はaの値は$75(’01110101’)になりました。

ビット指定の値を0から7に順に変えながらSET a,nを実行するプログラムです。

SET a,nが実行されるたびにnで示されるaのビットが1になっていきます。

同じことをPORTCに対して行なってみました。

このプログラムのようにI/Oポートの特定のビットを高速でセット、リセットする場合はPORTXを使わずLATXを使います([第13回]参照)。
このときPORTCの出力端子をオシロスコープやロジアナで観測すればデータ出力の様子が確認できますがそれは今までにもやってきていますので今回は省略します。
I/Oポートに出力されるデータはLATレジスタを読むことでも確認できます。

[2]RES r,b

rは8ビットの変数です。
通常の変数のほかI/OポートのTRISXやPORTXなどのSFR(特殊関数レジスタ)も指定することができます。
bはビット位置を示す0〜7の範囲の数で変数や式で示すこともできます。
rレジスタの値のうちbビットのみを0にします(他のビットは変化しません)。

下はRES命令の最も簡単なテストプログラムです。

変数aの値は$55(’01010101’)です。
RES a,2を実行した結果ビット2がリセットされて$51(’01010001’)になりました。

ビット指定の値を0から7に順に変えながらRES a,nを実行するプログラムです。

RES a,nが実行されるたびにnで示されるaのビットが0になっていきます。

同じことをPORTCに対して行ないました。

RES LATC,nが実行されるたびにnで示されるLATCのビットが0になっていきます。

今回説明しましたようにI/Oポートの出力のうち特定の出力のみを1または0にしたいときにはSET、RES命令が役に立ちます。

PICBASICコンパイラ[第24回]
2023.5.19upload

前へ
次へ
ホームページトップへ戻る