PICマイコンを製造しているMicrochip社から、MPLAB Tools for VS Codeが公開されています。PICマイコンやAVRマイコンが、VSCode上で開発できるようになったようです!拡張機能の導入からLチカまでを試してみました。
レジスタなどの設定コードを生成するMCC (MPLAB Code Configurator)や、AIコーディングアシスタントも含まれているようです。
ただし、#pragma configの生成機能がないのが不便です。
MPLABの導入
拡張機能(左のバー内 四角形が4つのアイコン)で、「mplab」と検索すれば出てきます。

一番上の「MPLAB」は13個のツールがセットになっているので楽でしょう。今回はこれをインストールしてみます。

このようなダイアログが表示されたら、「Trust Publishers & Install」を選びます。これでインストールが始まります。

インストールが完了すると、左のバーにMicrochip社のロゴと、MPLABの盾の形のアイコンが追加されます。初めてクリックする際は各種ソフトウェアのインストールが行われるため、時間がかかります。デバイスドライバのインストールを確認するダイアログがいくつか出ますが、すべてインストールします。
プロジェクトの作成

盾のアイコンを押し、下の「PROJECTS」の右にある「New project…」をクリックします。

任意のプロジェクト名を入力します。

プロジェクトのディレクトリのパスを選択します。Default Locationを選択した場合、Cドライブのユーザー直下のMPLABProjectsフォルダ内に作られます。今回はこれを選択しました。

デバイス(使用するマイコンの型番)を入力・選択します。今回は入門に最適なPIC12F509を選択しました。

ダイアログが出たら、Yes を押します。

今回は初回なので、XC8コンパイラをインストールします。上のほうに出てきたら、Download and installをクリックします。コンパイラのセットアップ画面(インストーラー)が出るので、手順に従って進めます。時間がかかります。
プロジェクトの作成が完了すると、ワークスペースにmain.cなどが追加されますので、コードを書いていきましょう!

ビルド
ビルドは、画面の右上のほうか、左下のほうのプロジェクト名の右にある、虫とハンマーのアイコンをクリックして行います。

ビルドに成功すると、メモリ使用量が表示されます。

書き込み
PICKIT5などのデバッガ・書き込み装置をPCに接続し、左上のTOOLの右にある歯車マーク(Configure tool)をクリックします。Select toolに装置が選択されているのを確認します(今回はPICkit 5と表示されています)。

PICkitから回路に電源供給を行う場合、「Power target circuit from PICkit 5」にチェックを入れ、希望の電圧値を入力します。チェックを入れない場合、外部から回路に電源供給が必要です。なお、流せる電流は少ないのでご注意ください。
ただ、環境の問題なのか、1回目の書き込み時に電源供給での書き込みはできませんでした。外部から電源を供給したら書き込めました。その次からは

書き込むには、左のバー内虫と再生マークのアイコンをクリックし、DEBUGを開きます。Run and Debugを押して、「MPLAB Debugger」を選択、その後RUN AND DEBUGの右にプルダウンが出るので、Program (プロジェクト名) を選択し、その左の再生ボタンをクリック。

config_1というのは間違えて作成してしまったもので(削除ができない?)なくても問題ありません。
書き込み完了
なぜか初回は電源供給での書き込みができなかったので、外部から5Vを供給することで書き込みが行えました。書き込みが完了すると、問題なくLEDが点滅しました。
#pragmaの生成機能がないのがかなり不便ですが、VSCodeの慣れた画面で開発が行えるのは良いですね。MPLAB X IDEは個人的に見づらい、使いづらい、眩しい等の不満がありました。
MCCもあるようなので、今回使用した12F509はMCC非対応ですが、今後様々な機能を試してみます。
今回のプログラム
すべての出力ピンを0.5秒ごとにON/OFFするLチカのプログラムです。
/**
* @file main.c
* @author Nonotchi
* @date 2025-10-31
* @brief Main function
*/
#include <xc.h>
#define _XTAL_FREQ 4000000 // クロックは4MHz
#pragma config MCLRE = OFF // MCLRピンは入力ピンとして使用
#pragma config CP = OFF // プログラムメモリのコード保護を無効化
#pragma config WDT = OFF // ウォッチドッグタイマーを無効化
#pragma config OSC = IntRC // 内蔵クロックを使用
int main(){
OPTION = 0b10000000; // GP3ピンのWPU(内蔵プルアップ)有効
TRISGPIO = 0b00001000; // 入力専用ピンであるGP3以外は出力
// note: TRISは0が出力、1が入力です。OUTPUTの"O"、INPUTの"I"と似ていると覚えるとよいです🍀
GPIO = 0b00000000; // ポートの初期化
while (1) {
GPIO = 0b00110111; // 全出力ピンをHIGHに設定
__delay_ms(500); // 待ち500ミリ秒
GPIO = 0b00000000; // 全出力ピンをLOWに設定
__delay_ms(500); // 待ち500ミリ秒
}
return 0;
}