「PIC16F84Aのアセンブラ言語で赤色LEDを点灯・消灯させてみよう。」では、PIC16F84Aに接続したKEYESTUDIOの赤色LEDモジュールを、アセンブラ言語を使って、点灯・消灯させるプログラムを作成します。
はじめに
PIC16F84Aと「micro:bitとkeyestudioでマイコン制御」の実験で使った「KEYESTUDIO 37センサースターターキット micro:bit V2付」のモジュールや様々なセンサー等を利用して、PICマイコン制御の基本を実習します。
実験準備
実習に必要な機器とキットの部品を準備します。
機器
「PIC16F84Aで制御する環境を構築しよう。 」記事で書きましたPIC16F84Aの実験回路(以下 実験回路)とPICマイコンライタ(PIC K150)、「MPLAB X IDE 6.20」をインストールしたWindows11搭載のパソコンを準備します。
部品
「micro:bitとkeyestudioでマイコン制御:赤色LEDモジュールを蛍のように光らせてみよう。」で使った。赤色LEDモジュールを、実験回路 にワイヤーで接続して使います。
▶️赤色LEDモジュール
赤色LEDモジュールには3本のピンが用意されており、「Gまたは-」ピンはシールドのグランド(GND)に、「Vまたは+」ピンはシールドの電源(VCC 3.3-5V)に、Sピンにはシールドの信号を接続します。
SピンをHighレベルまたはLowレベルに設定することで、LEDの点灯、消灯を制御することができます。

▶️ジャンパーワイヤー(オスーメス) 20cm
実験回路と赤色LEDモジュールを接続します。

配線
赤色LEDモジュールと実験回路をジャンパーワイヤーで接続します。

配線リスト
赤色LEDモジュールと実験回路の電源及び、PIC16F84Aのピンと接続します。
赤色LEDモジュール | 実験回路 | 備 考 |
Gまたは-ピン | GND(ー) | |
Vまたは+ピン | +5V(+) | |
Sピン | PIC16F84A ピン17 |
MPLABでアセンブラ プログラミング
MPLAB X IDE v6.20 を使って、PIC16F84Aのアセンブラプログラムを作成します。
プロジェクトの新規作成
「MPLAB X IDE v6.20」を起動し、メニューの「File」をクリックし、リストボックスから、「New Project…」をクリックします。

New Project-Choose Projectダイアログが表示されますので、Categories:リストから「Microchip Embedded」を選択し、Projects:から「Application Ploject(S)」を選択後、「Next>」をっクリックします。

New Project-Select Deviceダイアログが表示されますので、次のように選択します。
項 目 | 設 定 内 容 |
Fmily: | Mid-Range 8-bit MCUs (PIC10/12/16/MCP) |
Device: | PIC16F84A |
Tool: | Simulator |
Tool:は Microchip社提供しているツール等をパソコンに接続されている場合、ドロップダウンリストに表示されます。(PIC K150が該当しません)
選択後、「Next>」をクリックします。

New Project-Select Compilerダイアログが表示されますので、「pic-as(3.0)[xxxx]」を選択後、「Next>」をクリックします。

New Project-Project Name and Folderダイアログが表示されますので、次のように設定、選択します。
項 目 | 設 定 内 容 |
Project Name: | 任意(ここでは、PIC16F84A_002) |
Project Location: | 任意(ここでは、初期値) |
Encoding: | Shift JIS |

選択後、「Finish」をクリックすると、「Projects」ウィンドウに作成したプロジェクトの内容が表示されます。

ソースファイルの作成
プログラムを記述するソースファイルを作成します。
Project(PIC 16F84A_002)内の「Source Files」を右クリックします。

表示されたリストボックスから、「New 」→「AssemblyFiles.asm…」と選択します。

New AssemblyLFile.asm-Nae and Locationダイアログが表示されますので、File nameに「任意の名前(16F84A_002_src)」を入力し、「Finish」をクリックします。

Source Files に作成した「ソースファイル(16F84A_002_src.asm)」が追加され、右側に空白の「エディタ」画面が表示されます。

メニューの「File」をクリックし、リストボックスから、「Exit」をクリックし、「MPLAB X IDE v6.20」を終了します。

コンフィグレーションビット
コンフィグレーションビットは、PIC16F84Aの基本的な動作設定を行い、プログラム時にのみ変更できる特殊なビットの集まりで、リセット時に読み出され、PIC16F84Aのハードウェア機能を有効または無効にします。
「MPLAB X IDE v6.20」を起動し、メニューの「Window」→「Target Memory Views」→「Configuration Bits」をクリックします。

「Configuration Bits」ウィンドウが、Outputエリア内に表示されます。

▶️コンフィグレーションビットの設定
コンフィグレーションビットを「Option」を次のように設定し、「Generare Source Code to Outoput」をクリックします。
Field | Option | 説 明 |
FSOC | XT | 10MHzのセラミックリゾネータを使用します |
WDTE | ON | ウォッチドッグタイマを有効にします |
PWRTE | OFF | パワーアップタイマを有効にします |
CP | OFF | コードプロテクションを無効にします |

「Output – Config Bits Source」ウィンドウに設定したフィギュレーション・ビットのコードが、自動的に生成されますので、このコードをコピーしてソース・ファイルに貼り付けます。

または、「Output – Config Bits Source」ウィンドウ上で、「Ctrl」+「s」キーを押すと、「Save Output As」ダイアログが表示されますので、任意のフォルダとファイル名を設定して保存し、プロジェクトに追加します。

「MPLAB X IDE v6.20」を終了します。
プログラムセクションの利用
ソースファイルにプログラムの格納情報を指定するため、プログラムセクションを設定します。
「MPLAB X IDE v6.20」を起動し、「Projects」ウィンドウのプロジェクト名(PIC16F84A_002)を右クリックし、表示されたリストボックスから「Properties」を選択します。

Project Properties – PIC16F84A_002ダイアログが表示されますので、「pic-as Linker」を選択し、「Custom linker options」の右のボタンをクリックします。

「Custom linker options」ダイアログが表示されますので、テキストボックスに「-pMyPrj=0h 」を入力し、「OK」をクリックします。
MyPrjの部分は任意の英文字とアンダーバーで指定し、0hはプログラムの開始番地(0番地)を指定します。
※テキストボックスをダブルクリックすると入力状態になります。

「Custom linker options」に入力した、「-pMyPrj=0h 」が表示されますので、「OK」をクリックしてダイアログを終了します。

プログラムの作成とビルド
Source Files に作成した「ソースファイル(16F84A_002_src.asm)」のエディタに、赤色LEDモジュールを500ms間隔で点灯・消灯させるアセンブラプログラムを作成します。
プログラムの入力
「Projects」ウィンドウのソースファイル(16F84A_002_src.asm)のエディタを表示ます。(表示されていない場合は、ソースファイルをダブルクリックします)

次のプログラムをエディタに入力するか、コピー、貼り付けします。
/*****************************************************************************
赤色LEDモジュールを点灯・消灯プログラム
******************************************************************************
ライセンス:SPDX-License-Identifier: MIT
******************************************************************************/
//PICタイプ
PROCESSOR 16F84A
//設定ファイルの読み込み
#include <xc.inc>
// PIC16F84A コンフィグレーションビットの設定
CONFIG FOSC = XT // オシレータは水晶/セラミックリゾネータを使用
CONFIG WDTE = ON // ウォッチドッグタイマ enable
CONFIG PWRTE = OFF // パワーアップタイマ enable
CONFIG CP = OFF // コードプロテクション disable
//*****************************************************************************
//汎用レジスタのエリア
TMCNT1 EQU 0Ch //タイマカウント用レジスタ1
TMCNT2 EQU 0Dh //タイマカウント用レジスタ2
TMCNT3 EQU 0Eh //タイマカウント用レジスタ3
//定数設定
LEDDT EQU 01h //赤色LEDモジュール点灯データ(RA0をHigh)
//*****【メイン】*****************************************************************
PSECT MyPrj,class=CODE,delta=2 // プログラムの開始アドレス(MyPrjはプログラムセクションの設定値)
BSF STATUS ,STATUS_RP0_POSITION // バンク1を選択
CLRF TRISA // ポートAをすべて出力モードに設定
BCF STATUS ,STATUS_RP0_POSITION // バンク0を選択
LOOP1:
CLRF PORTA // ポートAをすべて0に設定(赤色モジュール消灯)
CALL DELAY500M //500ms遅延サブルーチン
MOVLW LEDDT // 赤色LEDモジュール点灯データをWレジスタに設定
MOVWF PORTA // 赤色LEDモジュール点灯データをポートAに出力
CALL DELAY500M //500ms遅延サブルーチン
GOTO LOOP1 //点灯・消灯を繰り返し
/*****【500ms遅延サブルーチン】****************************************************
1サイクル = 4クロック
1クロック = 1/10MHz = 0.4μs
*******************************************************************************/
//500ms 遅延(1250095サイクル) 1250095 * 0.4μs/1000=500.038ms
DELAY500M:
MOVLW 50
MOVWF TMCNT3
NOP
//------------------------------------------------計3サイクル
SUBLOOP3:
CALL DELAY10M //25507*49+2*49=1249941
DECFSZ TMCNT3, F //1*49+2=51
GOTO SUBLOOP3 //2*49=98
RETURN //2
//------------------------------------------------計1250092サイクル
//10ms 遅延(25507サイクル)
DELAY10M:
MOVLW 101
MOVWF TMCNT2
NOP
//------------------------------------------------計3サイクル
SUBLOOP2:
CALL DELAY100U //250*100+2*100=25200
DECFSZ TMCNT2, F //1*100+2=102
GOTO SUBLOOP2 //2*100=200
RETURN //2
//------------------------------------------------計25504サイクル
//100μs 遅延(250サイクル)
DELAY100U:
MOVLW 82
MOVWF TMCNT1
NOP
//------------------------------------------------計3サイクル
SUBLOOP1:
DECFSZ TMCNT1, F //1*81+2=83
GOTO SUBLOOP1 //2*81=162
RETURN //2
//------------------------------------------------計247サイクル//
END
ビルド
ビルドは、ソースファイルから、PICに書込むための実行ファイルを生成しますが、プログラムに文法上のエラー等がある場合は、実行ファイルが生成されません。
ツールバーのビルドアイコンをクリックし「Build for Debugging (xxxxxxx)」を選択すると、ビルドが開始しデバッグ用のファイル(xxxxxx.elf)が作成されます。

▶️正常にビルドが完了
正常にビルドが完了すると「Output – xxxx (Buil. Load)」ウィンドウに「BUILD SUCCESSFUL (total time: xxxms)」が表示されます。

エラーがないことを確認した後、実際にPIC16F84Aに書込む実行ファイル(xxxxxx.hex)を生成するため、ツールバーのビルドアイコンをクリックし「Build Project (xxxxxxx)」を選択します。

正常にビルドが完了すると「Output – xxxx (Buil. Load)」ウィンドウに「BUILD SUCCESSFUL (total time: xxxms)」が表示され、実行ファイルの保存先とファイル名が表示されます。

保存先及びファイル名は、PIC16F84Fに書込む時に必要となりますので、記録しておきます。
▶️エラーでビルドが完了
エラーがあり、ビルドが失敗した場合は、ツールバーのデバッグアイコンをクリックし、デバッグモードを開始します。

デバッグ用ツールバーに変更されますので、ブレークポイント機能等を利用し、エラーが無くなるまでデバッグを行います。

デバッグ法方については、マイクロチップ社のマニュアル(英語)を参照してください。
実行ファイルをPICに書込む
MPLAB X IDE v6.20 を使って作成、ビルドした、アセンブラプログラムをPICマイコンライタ(PIC K150)を使ってPIC16F84Aに書込みます。
書込み準備
PIC K150をWindows11パソコンに接続し、microbrn.exeを起動すると「DIY K150 v 150807」ウィンドウが開きます。

Chip Selectorを「16F84A」を選択し、実際のPIC16F84AをPIC K150のゼロプレッシャーICソケットに、レバーを開閉して図のように取り付けます。
PIC16F84Aのピン1をICソケットのピン2に合わせます。


書込み
正常にビルドされたhexファイルをPIC16F84Aに書込むため、「Load」ボタンをクリックします。

「Open HEX File」ダイアログが表示されますので、ビルドした時に記録した保存先及びファイル名を指定し、「開く」をクリックします。

「DIY K150 v 150807」ウィンドウに戻りますので、「Program」ボタンをクリックして書込みます。

消去情報が表示されますので、「Yes」をクリックします。

正常に書き込まれると、「Program complete.」ダイアログが表示されますので、「OK」をクリックします。

書込みが完了しましたので、microbrn.exeを終了し、PIC16F84AをICマイコンライタ(PIC K150)から取りはずします。
実機で性能確認
アセンブラプログラムが書き込まれたPIC16F84Aを、赤色LEDモジュールを接続した実験回路 に実装します。
電源スイッチをONにすると、赤色LEDモジュールが500ms間隔で点灯、消灯します。
まとめ
MPLAB X IDE v6.20を使ってアセンブラ言語でプログラミングを行い、ビルドした実行ファイルをPIC16F84Aに書込み、赤色LEDモジュールを接続した実験回路 に実装して、点灯・消灯させることができました。
ビルドしたHEXファイルを、PIC K150を使ってPIC16F84Aに書込み、実際に動作することを確認しました。