「シミュレーター 2」からダウンロードできるソースファイル(main.asm)について簡単に説明します。
; (セミコロン)で始まり、改行で終わる部分はコメントです。 PICの動作には何ら関係がなく、人の理解を助ける為に使います。 コメントの中には日本語が使えます。
3行目(#INCLUDE <P18F2320.INC>)はアセンブラーに対して、MPLABの標準ヘッダーファイルを指定(インクルード)するように指示しています。 標準ヘッダーファイルはPICデバイス毎に準備されていて、[Microchip]ディレクトリーの下の[MPASM Suite]フォルダーにあります。 拡張子 .inc が全て標準ヘッダーファイルです。
標準ヘッダーファイルをインクルードしない場合は、SFRなど全てのラベルを自分で定義する必要が生じます。 余程特殊な目的でない限り標準ヘッダーファイルの指定が得策だと思います。
11~12行目でアセンブラーに対して自前のラベル定義を指示しています。 000H番地にreg0 001H番地にreg1と言う名前を付けました。
18行目でアセンブラーに対してプログラム・メモリーの0番地からプログラムを書き始めることを指定しています。 PICは電源投入後のリセット直後にプログラム・メモリーの0番地から命令を読み出して実行する為、0番地から書き始めます。
20行目で「PICに対してラベルHOTSから命令を読み出して実行する(ジャンプする)ように指示するプログラムをプログラム・メモリーに書くように」とアセンブラーに指示しています。 折角0番地から動き始めたばかりですが、この先には割り込み時に実行を始めるプログラムを記述しければならない領域がある為、その分を飛ばして(HOTS)から実行を始めるようにしています。
23行目でアセンブラーに対してプログラム・メモリーの100H番地からプログラムを書き始めることを指定しています。 100Hと言う値は割り込み時の領域を避けて私が勝手に決めた値です。 200Hでも1000Hでもかまいません。
25行目でアセンブラーに対してラベルHOTSを定義、「このアドレスに」HOTSと言う名前を付けています。 先程100Hから書き始めると宣言した直後ですから、100H番地にHOTSと言う名前を付けたことに成ります。 この定義と20行目の指示を合わせることでアセンブラーは「PICに対して100H番地から命令を読み出して実行する(ジャンプする)ように指示するプログラム」を0番地に書きます。
26~27行目はPICに対して何かを指示するプログラムをプログラム・メモリーに書くように」とアセンブラーに指示しています。 内容については「データ・メモリーに値を書く」で説明します。
30行目でアセンブラーに対してラベルHOTZを定義、「このアドレスに」HOTZと言う名前を付けています。 26~27行目までのプログラムの直後の番地にHOTZと言う名前を付けたことに成ります。
31行目で「PICに対してラベルHOTZから命令を読み出して実行する(ジャンプする)プログラムをプログラム・メモリーに書くように」とアセンブラーに指示しています。 PICはラベルHOTZから命令を読み出す動作を繰り返すことになります。
33行目でアセンブラーに対してプログラムを書く作業を終わるように指示しています。
「アセンブラーに対して」をクドクドと繰り返し、読み難かったかも知れませんが、アセンブラーのソース・プログラムは(当然ながら)アセンブラーに指示を出すものです。 PICは、「MPLABがアセンブル(ビルド)を実行した結果プログラム・メモリーに書かれたもの」を実行します。 「プログラム・メモリーに書かれたもの」を記録したものがHEXファイルです。
「シミュレーター 5」では「プログラム・メモリーに書かれたもの」を確認します。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
; (セミコロン)で始まり、改行で終わる部分はコメントです。 PICの動作には何ら関係がなく、人の理解を助ける為に使います。 コメントの中には日本語が使えます。
3行目(#INCLUDE <P18F2320.INC>)はアセンブラーに対して、MPLABの標準ヘッダーファイルを指定(インクルード)するように指示しています。 標準ヘッダーファイルはPICデバイス毎に準備されていて、[Microchip]ディレクトリーの下の[MPASM Suite]フォルダーにあります。 拡張子 .inc が全て標準ヘッダーファイルです。
標準ヘッダーファイルをインクルードしない場合は、SFRなど全てのラベルを自分で定義する必要が生じます。 余程特殊な目的でない限り標準ヘッダーファイルの指定が得策だと思います。
11~12行目でアセンブラーに対して自前のラベル定義を指示しています。 000H番地にreg0 001H番地にreg1と言う名前を付けました。
18行目でアセンブラーに対してプログラム・メモリーの0番地からプログラムを書き始めることを指定しています。 PICは電源投入後のリセット直後にプログラム・メモリーの0番地から命令を読み出して実行する為、0番地から書き始めます。
20行目で「PICに対してラベルHOTSから命令を読み出して実行する(ジャンプする)ように指示するプログラムをプログラム・メモリーに書くように」とアセンブラーに指示しています。 折角0番地から動き始めたばかりですが、この先には割り込み時に実行を始めるプログラムを記述しければならない領域がある為、その分を飛ばして(HOTS)から実行を始めるようにしています。
23行目でアセンブラーに対してプログラム・メモリーの100H番地からプログラムを書き始めることを指定しています。 100Hと言う値は割り込み時の領域を避けて私が勝手に決めた値です。 200Hでも1000Hでもかまいません。
25行目でアセンブラーに対してラベルHOTSを定義、「このアドレスに」HOTSと言う名前を付けています。 先程100Hから書き始めると宣言した直後ですから、100H番地にHOTSと言う名前を付けたことに成ります。 この定義と20行目の指示を合わせることでアセンブラーは「PICに対して100H番地から命令を読み出して実行する(ジャンプする)ように指示するプログラム」を0番地に書きます。
26~27行目はPICに対して何かを指示するプログラムをプログラム・メモリーに書くように」とアセンブラーに指示しています。 内容については「データ・メモリーに値を書く」で説明します。
30行目でアセンブラーに対してラベルHOTZを定義、「このアドレスに」HOTZと言う名前を付けています。 26~27行目までのプログラムの直後の番地にHOTZと言う名前を付けたことに成ります。
31行目で「PICに対してラベルHOTZから命令を読み出して実行する(ジャンプする)プログラムをプログラム・メモリーに書くように」とアセンブラーに指示しています。 PICはラベルHOTZから命令を読み出す動作を繰り返すことになります。
33行目でアセンブラーに対してプログラムを書く作業を終わるように指示しています。
「アセンブラーに対して」をクドクドと繰り返し、読み難かったかも知れませんが、アセンブラーのソース・プログラムは(当然ながら)アセンブラーに指示を出すものです。 PICは、「MPLABがアセンブル(ビルド)を実行した結果プログラム・メモリーに書かれたもの」を実行します。 「プログラム・メモリーに書かれたもの」を記録したものがHEXファイルです。
「シミュレーター 5」では「プログラム・メモリーに書かれたもの」を確認します。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。