シミュレーター 3 で扱った main.asm は、「データ・メモリーの1番地をFFHに書き換える」だけの簡単なものです。 <PICデバイス=18F1320> Watchウィンドウにはデータ・メモリーの0番地と1番地を表示させていますが、main.asmが書き換えるのは1番地だけです。

確かめてみましょう。 Watchウィンドウの二つの値を各々ダブルクリックして80Hに書き換えて下さい。 そのまま Run の後 Halt してもWatchウィンドウに変化はありません。 MPLAB IDE Editor に表示されているソース・リストの中に緑色の矢印で実行中の行を示していますが、31行目( GOTO HOTZ )を示しています。 前回 Halt の続きから動かした為に GOTO HOTZ を繰り返していただけで、データ・メモリーにアクセスしていないことが原因です。

シミュレート中の仮想PICをリセットして、プログラム・メモリーの0番地からやり直させる必要があります。
下図に見える黄色のボタンをクリックしてリセットします。

watch_80_FF

上図はリセットの後で、Run Halt したWatchウィンドウです。 0番地は80Hのままで、1番地がFFHに書き換わっています。 他にも試してみてください。 FFHに書き換えるのではなくてF0Hに書き換えるためには26行目の 0FFH を 0F0H に書き換えて、ビルドすれば良いと思います。


 さて、この記事のタイトルは「データ・メモリーを任意に書き換える」ですから、ここからが本題です。 main.asm では26行目で書き込む値をワーキングレジスタに書いて、27行目でワーキングレジスターの内容を、データ・メモリーの1番地に書き写しています。 reg1の値は12行目で1に定義しています。
          MOVLW     0FFH
          MOVWF     reg1 
26行目の 0FFH を他の値にすると書き込む値が変わり、12行目の 001H を他の値にすると書き込むアドレスが変わります。 いずれもビルドし直す必要があります。

ワーキングレジスタはPICの中にある唯一の汎用演算装置で、Wreg あるいは単に W と記述されることがあります。 プログラムに任意の値を記述してデータ・メモリーに書き込むためには一旦 W に値を入れて、W の値をデータ・メモリーに書き写すと言う手順で行います。

特別なケースでは次のようなニーモニックを使い、W を介さずに書き換えることが出来ます。
          MOVFF     fs , fd       ; データ・メモリー f sの値をデータ・メモリー fdに書き写す。
          CLRF         f , a          ; データ・メモリー f の値を0クリアする。
          SETF         f , a          ; データ・メモリー f の値をFFHにセットする。
          BCF           f , b , a     ; データ・メモリー f のビット b を0クリアする。
          BSF           f , b , a     ; データ・メモリー f のビット b に1をセットする。

他に、何らかの演算結果をデータ・メモリーに書き込む命令がありますが、これらは演算が主な目的と考えて別の記事で紹介します。


一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。