PICとkeyestudioでマイコン制御:アセンブラ言語で赤色LEDモジュールを点灯・消灯させてみよう。

【 当サイトには広告リンクが含まれています。 】

「アセンブラ言語で赤色LEDモジュールを点灯・消灯させてみよう。」では、PIC16F84Aに接続した赤色LEDモジュールを、アセンブラ言語を使って、点灯・消灯させるプログラムを作成します。



はじめに

「PICとkeyestudioでマイコン制御」では、PIC16F84Aと「micro:bitとkeyestudioでマイコン制御」の実験で使った「KEYESTUDIO 37センサースターターキット micro:bit V2付」のモジュールを利用して、マイコン制御の基本を実習します。

実験準備

実習に必要な機器とキットの部品を準備します。

機器

「PICとkeyestudioでマイコン制御:PIC16F84Aで制御する環境を構築しよう。 」記事で書きましたPIC16F84Aの実験回路(以下 実験回路)とPICマイコンライタ(PIC K150)、「MPLAB X IDE 6.20」をインストールしたWindows11搭載のパソコンを準備します。


部品

赤色に発光する赤色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」をクリックします。

FieldOption説 明
FSOCXT10MHzのセラミックリゾネータを使用します
WDTEONウォッチドッグタイマを有効にします
PWRTEOFFパワーアップタイマを有効にします
CPOFFコードプロテクションを無効にします



「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			    //赤色モジュール点灯データ(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			    // 赤色モジュール点灯データをWレジスタに設定
	MOVWF	PORTA			    // 赤色モジュール点灯データをポート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に書込み、実際に動作することを確認しました。