MPLAB X IDE(Ver3.51) 起動  MPLABXIDE ユーザーズガイドも参照してください

(1)アッセンブラ(MPASM)用プロジェクトの作成  MPLABマニュアル P47 3-3以降参照
  「スタートマニュアル2」を参考にアッセンブラ用新規プロジェクトを作成します
  プロジェクト名は何でも良いのですが、説明の都合上「PIC_START_PRG01」とでもしておきます。
  すると、「MPLABXProjects」フォルダに「PIC_START_PRG01.X」が生成されます。
  当局の場合は、「MPLABXProjects」フォルダ内の「PIC_BASIC」フォルダ内の「PIC_START」フォルダ内に生成されています
  生成直後は「PIC_START_PRG01」プロジェクトをオープンしている状態です。

(2)アッセンブラ新規ソースファイルの作成
 0)「PICKIT_START_PRG01」プロジェクトをオープンします。(画像01)
   (1)からそのまま来た場合は、すでにプロジェクトオープンしています。
 1)左上コマンドバーの「File」の「New File」をクリック、すると「New Project」ウインドウが開く
  ①Step1 Choose File Type (画像02)
    Projectでは、「PIC_START_PRG01」を選択
    Categoriesでは、「Assembler」をクリック
    File Typeでは、「AssemblyFile.asm」をクリック
    「Next」をクリック
  ②Step2 Name and Location (画像03)
    File Nameでは、「PIC_START_PRG01」とでもします。(実際は好きなソースファイル名でOK)
    「Next」をクリック
    これで、「PIC_START_PRG01」フォルダに「PIC_START_PRG01.asm」が生成されました。
    何も書かれていないソースファイルもオープンされていると思います。

(画像01)

新規プロジェクトをオープンしている状態
ソースファイルは無い

(画像02)

新規ファイル作成ウィザード Step1

使用ツールとして、アッセンブラを選択
ソースファイルタイプは、xxxx.asmを選択

(画像03)

新規ファイル作成ウィザード Step2

ソースファイルネームを指定
デフォルトでは、ソースファイルの存在フォルダはプロジェクトフォルダ直下になっている
そこ以外にするなら、ここで変更

(画像04)

ウィザード終了直後

作成した新規ソースファイルがオープンされている状態
当然、何も書かれていない

これから基本的なコメントや設定疑似命令等を記載していきます
(3)アッセンブラ・ソースファイルの冒頭決まり文句を書く (画像05)
 1)タイトルの作成
    作成者が後で見た時に分かる様に、タイトル、機能、使用PIC、設定クロック等記載します
 2)インクルードファイルの記載
    使用PICと、その専用incファイルを記載

(4)コンフィギュレーション・レジスタを設定する (画像06、07、08、09)
   概ね決まり文句的な事項なのですが、その時の設計によって違ってくるビットがあります。
   ベースとなる設定に変更を加えるのが常套手段で、通常は「FOSC」の設定変更で済む事が殆どです
   今後主流になるかもしれない、同じ14ピンのPIC16F18326では、長年存在した「FOSC」が無くなっています・・・
   FOSC:システムクロックを内部発振とするか、外部発振とするか
    100=INTOSC:内部発振回路を使用する、RA4(OSC2)-RA5(OSC1)ピンはI/Oとして使用可
    010=HSオシレータ:OSC2-OSC1にX’TAL等を接続、PIC内部回路で水晶発振回路を形成し、システムクロックとする
         もちろん、RA4(OSC2/CLKOUT)-RA5(OSC1/CLKIN)はI/Oとして使用できない
         発振周波数は4MHZ以上となっています
    111=ECH:CLKINピンに外部発振器からのクロックを供給、それをシステムクロックとする。RA4はI/O可
             外部発振器には安価な物や高価でも精密な物で、安定した発振器がありますので、それらを使用します。
             入力周波数は4MHZ~20MHZとなっています。

(5)GPR等のラベル定義、リセットベクタ・割込みベクタの記述 (画像10)
 1)GPR(汎用データRAMレジスタ)のラベル定義
    この辺の領域ではGPRの定義はもちろんですが、その他に定数ラベルやマクロ定義等を行えます。
    しかし、ここではGPRの定義にとどめます。
    PIC16F1705では、存在するGPRアドレスは下記の通りです

     BANK00:20H~6FH(80バイト)
     BANK01:A0H~EFH(80バイト)
     BANK02:120H~16FH(80バイト)
     BANK03:1A0H~1EFH(80バイト)
     BANK04:220H~26FH(80バイト)
     BANK05:2A0H~2EFH(80バイト)
     BANK06:320H~32FH(16バイト)
     共通RAM:70H~7FH(16バイトで、どのBANKにいても、このアドレスでアクセス可能)

    当局はまず、ほぼ確実に使う、ウエイトルーチンの専用ワークをBANK0のGPRに定義します。(BANK0ならアドレスはどこでも良い)
    いつどこでも使えるローカル変数的なtmp0~tmp3、32bit分(そのサブルーチンを抜けると破壊されること前提)
    後は必要に応じて登録していく。それらは基本的にBANK0のGPR
    BANK1以降のGPRは基本的にある程度まとまったメモリブロックとして使うバッファエリア等として使用
    と住み分けすると良いかも、まあ各自の自由ですが。
    共通RAMはどうでしょうか、当局レベルでは今まで使用必須の事例はほとんど無かったですが・・・

 2)プログラムの先頭 (画像11)
    PICのリセットベクタは0000Hで、インタラプトベクタは0004Hです。
    電源投入時や、リセットが掛かった場合、PICは0000Hのアドレスから実行を開始し始めます。
    そこで、プログラムの先頭は、
     ORG     OH     ;リセットベクタ
    と記載します。
    「ORG」はプログラムの開始番地を指定するMPASMの疑似命令で、アッセンブラソース内に複数のORG命令があっても大丈夫です。
    このソースファイルのプログラムは、電源投入時にここから始まると言う事を明記します。
    すぐに割込みベクタが来ますので、ここでは「GOTO」命令で「INIT」と言うラベルにジャンプすると記載するのが常套手段です。
     ORG     0H     ;リセットベクタ アドレス
     GOTO    INIT    ;事実上のプログラム先頭へGO!
    以上の様に疑似命令とアッセンブラ・コードを記載します。
    次に割込みベクタの指定です。
     ORG     4H     ;割込みベクタ アドレス
     GOTO    INT     ;割込み処理ルーチンへGO!
    あるいは、
     ORG     4H     ;割込みベクタ
     INIT             ;割込み処理ルーチンラベル
     割込み処理コード

     RETFIE          ;割込み処理終了
    と、4番地から割込みルーチンを記載し始めてもOKです。
    そのあとは、プログラム本文を記載し始めます。
     INIT            ;本文ラベル
      本文コード
    と、ここまでは常套手段的先頭プログラム記載事項です。
     ORG   800H
    と記載すると、これ以降のソースコードはアドレス800Hから絶対アドレス配置されます。
    しかし、リセットベクタと割込みベクタは必ずORG疑似命令で指定し、対応するソースコードを記載しておきます。

(6)機能レジスタ初期設定 (画像12,13)
   すべての機能レジスタをイニシャライズする必要はありません。
   基本的にはパワーオン・リセット時の初期値で放置して問題無い場合が殆どですが、そうで無いのも少しあります。
 1)INTCONレジスタ BANK0
    基本的にリセット時はGIE=OFFとなっているので、わざわざ設定しなくとも大丈夫なのですが、念のため。
     CLRF   INTCON
    で、すべてのbitに0を書き込んでおきます。
 2)PORTA、PORTC BANK0
    すべてクリアしておきます
 3)LATA、LATC BANK2
    ②の操作でクリアされていると思いますが、念のためクリア
 4)OSCCON BANK1
    必ず設定します。

 OSCCONレジスタ
  bit7    SPLLEN:ソフトウエアPLL設定ビット
         1=4xPLL有効
         0=4xPLL無効
         ※コンフィギュレーションワード:PLLEN=1の時、この設定は無視される
  bit6-3  IRCF:内部発振器クロック選択ビット
         1111=16MHZ HF
         1110=8MHZ or 32MHZ HF
         1101=4MHZ HF
         1100=2MHZ HF
         1011=1MHZ HF
         1010=500KHZ HF
         1001=250KHZ HF
         1000=125KHZ HF
         0111=500KHZ MF(リセット時のデフォルト値)
         0110=250KHZ MF
         0101=125KHZ MF
         0100=62.5KHZ MF
         0011=31.25KHZ HF
         0010=31.25KHZ MF
         000x=31KHZ LF
  bit2    Unimplemented(Read = 0)
  bit1-0  SCS:システムクロック選択ビット
         1x=内部オシレータ ブロック
         01=セカンダリオシレータ(タイマ1発振器)
         00=コンフィギュレーションワード:FOSCビットによって決まるクロック

    例1) 内部発振 32MHZ
        コンフィギュレーションワード:FOSC=100、PLLEN=0
        SPLLEN=1、IRCF=1110、SCS=00、OSCCON=F0H
    例2) 水晶発振 8MHZ → 32MHZ
        コンフィギュレーションワード:FOSC=010、PLLEN=0
        SPLLEN=1、IRCF=1110(使用しない)、SCS=00、OSCCON=F0H

 5)TRISAレジスタ(BANK1)、TRISC(BANK1)レジスタ
    TRISAはRA0-5の入力か出力かの設定(RA3は入力のみ)
    TRISCはRC0-5の入力か出力かの設定
    リセット時は不定ですので、必ず設定します。

    例1)TRISA=0FH:RA0-RA3まで入力、RA4-RA5は出力設定

 6)ANSELAレジスタ(BANK3)、ANSELCレジスタ(BANK3)
    ANSELレジスタはI/Oピンをデジタルかアナログかを設定します。
    リセット時はすべてアナログになっているので注意が必要です。

    例1)RA0をアナログ(ADC)入力、RA1、RA2をデジタル入力、RA4-RA5をデジタル出力
        TRISA=07H
        ANSELA=01H

 7)設定終了時
    BANK=0に戻しておく事を推奨します。

(7)ウエイトサブルーチン (画像14,15)
   これはその、システムクロック周波数に合わせたルーチンを用意し、コピペして使います。
   ほぼ必ず使うので、ソースの最後にでも「END」疑似命令と共に置いておくと便利。


(画像05)

プログラムタイトルを記載、行に「;」(セミコロン)があるとそれより右側はコメント

タイトル直下に「LIST」および「INCLUDE」疑似命令を記述します。

対応文字色は変更できるみたいですが、当局はデフォルトのままで使用しています。

(画像06)

コンフィギュレーションワード1に設定するデータを「__CONFIG」疑似命令で指定
2進16bitで記述しているが、上位2bitは無視される


(画像07)

コンフィギュレーションワード2に設定するデータを「__CONFIG」疑似命令で指定
2進16bitで記述しているが、上位2bitは無視される


(画像08)

コンフィギュレーションワード1に設定するデータを「__CONFIG」疑似命令で指定
疑似命令で記述しているが、1行が長くなった

(画像09)

コンフィギュレーションワード2に設定するデータを「__CONFIG」疑似命令で指定
疑似命令で記述しているが、1行が長くなった

(画像10)

「EQU」疑似命令でラベルにデータRAMアドレスを割り当てている


(画像11)

「ORG」疑似命令でリセットベクタの開始番地を指定
指定直後に、「GOTO」命令でイニシャライズを行うアドレスにジャンプする

続いで、割込みベクタの開始番地を指定している
指定直後に割込みルーチンを配置している。
「GOTO」命令で別のアドレスに配置された割込みルーチンにジャンプでも良い


(画像12)

リセットベクタからジャンプしてきた、イニシャライズを行うプログラム部分
ここで、OSCCONレジスタやTRISレジスタ、ANSELレジスタ等を設定する。

(画像13)

イニシャライズを行うプログラム部分の続き
最後はBSRレジスタをクリアして終了だ

この後はメインプログラムに行く

(画像14)

ウエイトルーチン(32MHZ用)の例
必ず必要になるので、コピペしておく

(画像15)

ウエイトルーチンの最後部分の例
ついでに、「END」疑似命令も含めてコピペ

ウエイトルーチンは各種周波数用を用意すると良い
ちなみに、「END」疑似命令以降は無視される
戻る  実験・製作の記録TOPへ戻る