ソースプログラムの構成

【全体のプログラムの構成】

プログラムを作成するにあたり、プログラムのソース全体
の構成をどうするかを知っている必要があります。
ソースというのはエディタで書いたプログラムそのものを
指しています。
このソースの構成を大きな部分で捕えて簡単に示すと下記と
なります。

 (1)ハードウェア定義部
 (2)データレジスタ定義部
 (3)ORG
 (4)初期化、メイン処理部
 (5)主処理部
 (6)サブルーチン部
 (7)END

この中で、(4)、(5)、(6)は別のページで説明します。


【ハードウェア定義】

ここではこれから作るプログラムの機種定義をします。そして
それに特有のレジスタ類のラベルをあらかじめ定義してある
標準ヘッダーファイルを取り込みます。
(これをIncludeするといいます)

(1)機種定義
 定義の仕方は「PROCESSOR」か「LIST」命令を使って下記の
 ようにします。ここで指定するプロセッサ名称はパッケージの
 種類を示すサフィックス(最後の英記号の部分)は不要です。

    PROCESSOR  PIC16F84
 または
    LIST  P=PIC16F84

(2)標準ヘッダーファイルのインクルード
 この標準ヘッダーファイルが何かというと、各プロセッサが
 持っている Special Function Register をラベル(記号)で
 使える様にするため、ラベルとハードウェアの場所とを定義
 しているファイルです。
 標準ヘッダーファイルは 「プロセッサ名.INC」という
 ファイル名で統一されて、MPLABのディレクトリに格納されて
 います。従って、これのインクルード方法は下記のようにして
 行います。

    INCLUDE  "P16F84.INC"

 この標準ヘッダーファイルの内容には、ハードウェア定義方法
 などの説明文が含まれていますので、一度読んでおくと良いで
 しょう。
 メモ帳などでファイル名を指定すれば読むことが出来ます。
 下記はPIC16F84の例の一部です。
 下記から分かるように、特定のラベルを実際のレジスタファイル
 のアドレスに割り付ける役割をしています。

;==================================
;
;  Register Definitions
;
;==================================

W     EQU  H'0000'
F     EQU  H'0001'

;----- Register Files--------
INDF    EQU  H'0000'
TMR0    EQU  H'0001'
PCL    EQU  H'0002'
STATUS   EQU  H'0003'
FSR    EQU  H'0004'
PORTA   EQU  H'0005'
PORTB   EQU  H'0006'
EEDATA   EQU  H'0008'
EEADR   EQU  H'0009'
PCLATH   EQU  H'000A'
INTCON   EQU  H'000B'

OPTION_REG EQU  H'0081'
TRISA   EQU  H'0085'
TRISB   EQU  H'0086'
EECON1   EQU  H'0088'
EECON2   EQU  H'0089'




【データレジスタ定義】

ここでは、ユーザ(我々のこと)が変数としてプログラム中で
使う汎用レジスタのラベルを定義します。
このラベルを定義することでプログラムを書き易くするのと、
読みやすくすることが出来ます。
(ラベルを定義しないとアドレスを直接指定しなければならず
 数値の羅列を相手にすることになってしまいます)

この定義方法は下記のようにします。この中のアドレスは
データメモリ中の汎用レジスタ領域の範囲とします。

  変数名ラベル  EQU <アドレス>

今回の例題プログラムで使う変数を考えると、取り敢えず下記
のような変数が必要と思われますが、プログラムを作成する中で、
変数は後から追加、変更が必要となります。
アドレスは16F84の時は0C番地からが汎用レジスタとなります。
表現は16進数ですので 0〜9 A〜F の数値となります。

  DATA  EQU H'0C  ;点灯するPORT Bへの出力データ
  BITC  EQU H'0D  ;ビットカウンタ
  CNT1  EQU H'0E  ;タイマー用カウンタ1
  CNT2  EQU H'0F  ;タイマー用カウンタ2
  CNT3  EQU H'10  ;タイマー用カウンタ3
  TEMP  EQU H'11  ;一時変数エリア

         (実はこれは一部間違っています)

【ORG擬似命令】

「ORG」はプログラムの開始番地を指定する擬似命令で
ORG以下の実際のプログラム命令が格納されるプログラム
メモリ内の位置(アドレス)を指定します。
今回はひとつのプログラムから構成されているので最初に
1回だけ指定すれば良いことになります。

   ORG  0  ;0番地から格納することを示します。

コンピュータは一般に電源投入時やリセットをすると必ず
0番地からスタートするようになっているので、0番地には
必ず命令があることが必要です。



【END擬似命令】

「END」はソースの終わりを示す擬似命令で、アセンブラに
対し、ここがソースの終わりであることを知らせる役割が
あります。必ず必要となります。
書き方は下記です。


   END


   次のページへ      目次ページへ