



PIC(通常は/ p ɪ k /と発音される)は、マイクロチップ・テクノロジー社が製造するマイクロコントローラのファミリーであり、元々はゼネラル・インスツルメンツ社のマイクロエレクトロニクス部門が開発したPIC1640 [ 1 ] [ 2 ]から派生したものです。PICという名称は当初、ペリフェラル・インターフェース・コントローラ[ 3 ]を指していましたが、その後短期間、プログラマブル・インテリジェント・コンピュータ[ 4 ]を含むように拡張されました。ただし、現在ではPICという名称はどの用語の頭字語としても使用されていません。このファミリーの最初の製品は1976年に発売され、2013年までに同社は120億個以上の部品を出荷し、さまざまな組み込みシステムで使用されています。[ 5 ]
PICは元々、市販された最初のシングルチップ16ビットマイクロプロセッサであるGeneral Instrument CP1600の周辺機器として設計されました。必要なピン数を制限するために、CP1600は複雑で高度に多重化されたバスを備えており、インターフェースが困難でした。そのため、General Instrumentはさまざまな特殊用途周辺機器に加えて、汎用周辺機器としてプログラマブルなPIC1640を製造しました。独自の小型RAM、ROM、および転送を制御するためのシンプルなCPUを備えたPIC1640は、CP1600バスを事実上あらゆる既存の8ビット周辺機器に接続することができました。これによりかなりのパワーが得られましたが、GIのマーケティングは限定的で、CP1600は成功しませんでした。しかし、GIはCP1600インターフェースの代わりに汎用I/Oを追加したスタンドアロンのPIC1640であるPIC1650も製造していました。 1985年に同社がチップ部門を分離してマイクロチップを設立したとき、CP1600の販売はほぼ終わっていたが、PIC1650とその後継機種は独自の大きな市場を形成しており、新会社の主要製品の一つとなった。[ 6 ]
初期モデルではコード格納にマスクROMしか使用されていませんでしたが、スピンオフによりすぐにEPROM 、そしてEEPROMを使用するようにアップグレードされ、エンドユーザーが自社の施設でデバイスをプログラムできるようになりました。現在のすべてのモデルはプログラム格納にフラッシュメモリを使用しており、新しいモデルではPICが自己再プログラムできます。それ以来、このラインは大きく変化しました。メモリは現在、8ビット、16ビット、そして最新モデルでは32ビット幅で利用可能です。プログラム命令のビット数はPICのファミリによって異なり、12、14、16、または24ビット長の場合があります。命令セットもモデルによって異なり、より強力なチップではデジタル信号処理機能の命令が追加されています。PICデバイスのハードウェア実装は、6ピンSMD、8ピンDIPチップから144ピンSMDチップまで、個別のI/Oピン、ADCおよびDACモジュール、 UART、I2C、CAN、さらにはUSBなどの通信ポートを備えています。多くの機種において、低消費電力型と高速型が存在する。
メーカーは、 MPLAB Xと呼ばれる開発用コンピュータソフトウェア、アセンブラ、C/C++コンパイラ、そしてMPLABおよびPICKitシリーズのプログラマ/デバッガハードウェアを提供しています。サードパーティ製ツールや一部のオープンソースツールも利用可能です。一部の部品はインサーキットプログラミング機能を備えており、低価格の開発用プログラマから大量生産用プログラマまで幅広く取り揃えています。
PICデバイスは、低コスト、入手しやすさ、ユーザー数の多さ、豊富なアプリケーションノート、低コストまたは無料の開発ツールの入手可能性、シリアルプログラミング、および再プログラム可能なフラッシュメモリ機能により、産業開発者とホビイストの両方に人気があります。
オリジナルのPICは、ゼネラル・インスツルメンツ社の新しいCP1600 16ビット中央処理装置(CPU)と組み合わせて使用することを想定していました。当時標準だった40ピンのデュアルインラインパッケージ(DIP)チップに16ビットのデータバスとアドレスバスを収めるため、2つのバスは同じ16本の接続ピンを共有していました。CPUと通信するために、デバイスはCPU上の他のピンを監視して、バス上の情報がアドレスかデータかを判断する必要がありました。一度に提示されるのはどちらか一方だけだったので、デバイスはバスを監視してアドレスモードに入り、そのアドレスがメモリマップド入出力範囲に含まれているかどうかを確認し、そのアドレスを「ラッチ」してから、データモードがオンになるのを待ってから値を読み取る必要がありました。さらに、CP1600は通信しようとしているデバイスを選択するために複数の外部ピンを使用していたため、インターフェースはさらに複雑になっていました。
CP1600 とデバイスをインターフェースするのは複雑になる可能性があるため、GI は必要な回路をすべて内蔵した 164x シリーズのサポート チップもリリースしました。これには、キーボード ドライバ、ストレージ用のカセット デッキインターフェース、および同様のシステムが含まれていました。より複雑なシステム向けに、GI は 1975 年に 1640「プログラマブル インターフェース コントローラ」を発表しました。このアイデアは、デバイスが PIC を使用してホスト コンピュータの CP1600 とのすべてのインターフェースを処理すると同時に、独自の内部プロセッサを使用して接続されている実際のデバイスを処理するというものでした。たとえば、フロッピー ディスク ドライブは、片側で CPU と通信し、もう片側でフロッピー ディスク コントローラと通信する PIC を使用して実装できます。このアイデアに沿って、今日ではマイクロコントローラとして知られるPIC には、ユーザーのデバイス コントローラ コードが書き込まれる少量の読み出し専用メモリ(ROM) と、データのバッファリングと処理のための別のランダム アクセス メモリ(RAM) が含まれていました。これらは別々に接続されており、PICはコードとデータが別々の内部経路で保存および管理されるハーバードアーキテクチャシステムとなっていた。
理論上、CP1600 CPUとPIC1640デバイスコントローラの組み合わせは、メインフレームコンピュータに見られるチャネルI/Oコントローラと同等の電力と性能を持つ、非常に高性能なデバイス制御システムを提供しました。例えば、フロッピーコントローラの例では、1つのPICでドライブを制御し、パフォーマンスを向上させるために適切な量のバッファリングを提供し、ダイレクトメモリアクセス(DMA)またはCPU内の比較的単純なコードを使用してホストコンピュータとの間でデータを転送することができました。このアプローチの欠点はコストでした。キーボードのような低速デバイスにはPICは不要でしたが、多くのタスクでは完全なシステムを構築するために1つ以上のPICが必要でした。
設計コンセプトには魅力的な特徴がいくつかあったものの、ゼネラル・インストゥルメントはCP1600を積極的に販売せず、大口顧客のみを対象とし、ローエンド市場を無視した。このため、システムの普及率は非常に低く、Intellivisionが約300万台で唯一広く普及した用途となった。しかし、GIは1976年にCP1600なしで使用できるスタンドアロンモデルPIC1650 [ 7 ]を発表した。同年発表されたIntel MCS-48ほど強力ではなかったが、価格が安く、市場を見つけた。 [ 6 ]後継機種にはPIC1670があり、命令が12ビットから13ビットに拡張され、アドレス空間が2倍になった(RAM 64バイト、ROM 1024ワード)。[ 8 ] 1985年にGIがチップ部門をスピンオフしてMicrochip Technologyを設立すると、CP1600の生産は終了した。しかしこの頃には、PIC1650はさまざまな用途で使用する顧客層を多数獲得しており、PICは新会社の主力製品の一つとなった。[ 6 ]

1985年、ゼネラル・インストゥルメント社はマイクロエレクトロニクス部門を売却し、新オーナーは当時ほとんど時代遅れになっていたほぼすべての製品を廃止した。しかし、PICは内部EPROMを搭載してアップグレードされ、プログラマブルなチャネルI/Oコントローラとなった。同時期に、英国のプレッシー社は、GIの設計に基づき、同じ命令セットを使用するNMOSプロセッサPIC1650およびPIC1655をリリースした。これらのプロセッサは、ユーザーマスクプログラマブル版と、自動ダイヤラーやキーボードインターフェース用にプリプログラムされたバージョンがあった。[ 9 ]
1998年、マイクロチップ社は、成功を収めたシリアルプログラマブルPIC16C84のフラッシュプログラマブル消去可能バージョンであるPIC16F84を発表しました。2001年には、マイクロチップ社はさらに多くのフラッシュプログラマブルデバイスを発表し、2002年に本格的な生産を開始しました。[ 10 ]
現在では、様々なオンボード周辺機器(シリアル通信モジュール、UART、モータ制御カーネルなど)と、256ワードから64Kワード以上までのプログラムメモリを備えた、非常に多様なPICが販売されています。「ワード」とはアセンブリ言語の命令のことで、PICマイクロコントローラのシリーズによって長さは8ビットから16ビットまで異なります。
PIC および PICmicro は現在 Microchip Technology の登録商標ですが、接頭辞「PIC」はもはやどの用語の頭字語としても使用されていません。一般的に PIC は「 Programmable Intelligent Computer 」の略で、General Instruments が1977 年に PIC1640 および PIC1650 ファミリのマイクロコンピュータに付けた接頭辞であると考えられています[ 4 ]。これは、CP1600 マイクロコンピュータと組み合わせて動作するように特別に設計された PIC1640 の1976 年の元の意味である「Programmable Interface Controller 」に取って代わるものです[ 3 ] 。General Instrument の「PIC シリーズ マイクロコンピュータ」は、ROM、RAM、CPU、およびインターフェース用の 8 ビット入出力 (I/O) レジスタを含む一連の金属酸化膜半導体大規模集積回路 (MOS/LSI) 8 ビット マイクロコンピュータでした。当時、この技術は MOS 回路の利点と大規模集積回路を組み合わせたもので、トランジスタ密度の高い複雑な集積回路の作成を可能にしました。[ 4 ]
1993年に発表されたMicrochip 16C84(PIC16x84 )は、オンチップEEPROMメモリを搭載した最初のMicrochip CPUでした[ 11 ] 。
2013年までに、マイクロチップ社は毎年10億個以上のPICマイクロコントローラを出荷していた。[ 5 ]
PICマイクロチップはハーバードアーキテクチャに基づいて設計されており、さまざまなデバイスファミリで提供されています。ベースラインおよびミッドレンジファミリは8ビット幅のデータメモリを使用し、ハイエンドファミリは16ビットのデータメモリを使用します。最新シリーズのPIC32MZは、32ビットMIPSベースのマイクロコントローラです。命令ワードサイズは、 12ビット(PIC10およびPIC12)、14ビット(PIC16)、24ビット(PIC24およびdsPIC)です。マシン命令のバイナリ表現はファミリによって異なり、PIC命令リストに示されています。
これらのファミリ内では、デバイスはPICnnCxxx(CMOS)またはPICnnFxxx(フラッシュ)と表記される場合があります。「C」デバイスは一般的に「新規開発には不向き」(マイクロチップ社が積極的に販売促進していない)と分類されています。「C」デバイスのプログラムメモリは、OTP、ROM、またはEEPROMなどと様々に表現されます。2016年10月現在、「生産中」と分類されているOTP製品はpic16HV540のみです。クォーツウィンドウ(UV消去用)を備えた「C」デバイスは、一般的に入手できなくなっています。
これらのデバイスは、12ビット幅のコードメモリ、32バイトのレジスタファイル、およびわずか2階層のコールスタックを備えています。PIC10シリーズ、および一部のPIC12およびPIC16デバイスがこれに該当します。基本モデルは、6ピンから40ピンまでのパッケージで提供されています。
一般的に、レジスタファイルの最初の7~9バイトは特殊用途レジスタであり、残りのバイトは汎用RAMです。ポインタはレジスタペアを使用して実装されます。FSR(ファイル選択レジスタ)にアドレスを書き込んだ後、INDF(間接f)レジスタはアドレス指定されたレジスタのエイリアスになります。バンク付きRAMが実装されている場合、バンク番号はFSRの上位3ビットによって選択されます。これはレジスタ番号16~31に影響します。レジスタ0~15はグローバルレジスタであり、バンク選択ビットの影響を受けません。
レジスタスペースが非常に限られているため(5ビット)、めったに読み取られない4つのレジスタにはアドレスが割り当てられず、特別な命令(OPTIONおよびTRIS)によって書き込まれました。
ROMのアドレス空間は512であり、各512ワードページの前半部分のアドレスのみを指定できます。つまり、CALL命令はアドレスの下位9ビットを指定しますが、命令のパラメータとなるのは下位8ビットのみであり、9ビット目(ビット8)はCALL命令自体によって暗黙的に0として指定されます。
ルックアップテーブルは、計算結果GOTO(PCLレジスタへの代入)を命令テーブルに格納することで実装されますRETLW。RETLWはサブルーチンを戻り、同時に命令の一部である8ビット即値定数をWレジスタにロードします。
この「ベースラインコア」は割り込みをサポートしていません。すべてのI/Oはポーリングによって行われます。割り込みをサポートし、4段階のコールスタックを備えた「拡張ベースライン」バージョンもいくつか存在します。
PIC10F32xデバイスは、256ワードまたは512ワードの14ビット幅のミドルレンジコードメモリ、64バイトのSRAMレジスタファイル、および8レベルのハードウェアスタックを備えています。これらのデバイスは、6ピンSMDパッケージと8ピンDIPパッケージ(2ピンは未使用)で提供されます。入力専用ピンが1つとI/Oピンが3つ利用可能です。複雑な割り込みセットが利用できます。クロックは、 ソフトウェアで選択可能な速度を持つ16MHzの内部校正済み高周波発振器と、31kHzの 低消費電力電源です。


これらのデバイスは、14ビット幅のコードメモリと、改良された8レベル(最近のバリアントでは16レベル)の深いコールスタックを備えています。命令セットはベースラインデバイスとほとんど変わりませんが、追加された2ビットのオペコードにより、128個のレジスタと2048ワードのコードを直接アドレス指定できます。その他、いくつかの雑多な命令と、加算と減算という2つの8ビットリテラル命令が追加されています。ミッドレンジコアは、PIC12およびPIC16とラベル付けされたほとんどのデバイスで利用可能です。
レジスタ空間の最初の32バイトは特殊用途レジスタに割り当てられ、残りの96バイトは汎用RAMに使用されます。バンク付きRAMを使用する場合、上位16個のレジスタ(0x70~0x7F)はグローバルレジスタとなり、RAMバンク選択ビットを保持するSTATUSレジスタなど、最も重要な特殊用途レジスタのいくつかもグローバルレジスタとなります。(その他のグローバルレジスタは、FSRとINDF、プログラムカウンタPCLの下位8ビット、PC上位プリロードレジスタPCLATH、およびマスター割り込み制御レジスタINTCONです。)
GOTOPCLATHレジスタは、PCLレジスタへの書き込みによって供給される8ビット、または命令によって供給される11ビットではCALL、使用可能なROM領域のアドレス指定に不十分な場合に、上位命令アドレスビットを供給します。
PIC17シリーズは普及せず、PIC18アーキテクチャに取って代わられました(ただし、下記の互換品を参照)。PIC17シリーズは新規設計には推奨されず、入手もユーザーによって制限される場合があります。
以前のコアからの改良点としては、16ビット幅のオペコード(多くの新しい命令を可能にする)と、16階層のコールスタックが挙げられます。PIC17デバイスは、40ピンから68ピンまでのパッケージで製造されました。
PIC17シリーズでは、いくつかの重要な新機能が導入されました。[ 12 ]
大きな制約の一つは、RAM容量が256バイト(特殊機能レジスタ26バイトと汎用RAM232バイト)に制限されていたことであり、それ以上の容量をサポートするモデルではバンク切り替えが煩雑だった。

2000年、マイクロチップ社はPIC18アーキテクチャを発表しました。PIC17シリーズとは異なり、PIC18は非常に人気が高く、現在では多数のデバイスバリエーションが製造されています。以前のデバイスはアセンブリ言語でプログラミングされることが多かったのに対し、C言語が主流の開発言語となっています。[ 13 ]
PIC18シリーズは、PIC17シリーズのほとんどの機能と命令を継承しつつ、いくつかの重要な新機能を追加しています。
RAM領域は12 ビットで、各命令において4ビットのバンク選択レジスタ(BSR)と8ビットのオフセットを使用してアドレス指定されます。各命令には追加の「アクセス」ビットがあり、アクセスバンク(a =0)とBSRで選択されたバンク(a =1)のどちらかを選択します。
STATUS、WREG、およびBSRレジスタには、1レベルのスタックも使用できます。これらは割り込みが発生するたびに保存され、復帰時に復元できます。割り込みが無効になっている場合でも、sビットを設定することで(命令に「, FAST」を追加することで)、サブルーチン呼び出し/復帰時に使用できます。
自動インクリメント/デクリメント機能は、制御ビットを削除し、FSRごとに4つの新しい間接レジスタを追加することで改善されました。アクセスする間接ファイルレジスタに応じて、FSRを後置デクリメント、後置インクリメント、または前置インクリメントすることが可能です。また、FSRにWを加算することで実効アドレスを生成することもできます。
より高度なPIC18デバイスでは、「拡張モード」が利用可能で、コンパイル済みコードにとってさらに有利なアドレッシングが可能になります。
PIC18デバイスは現在も開発が続けられており(2021年時点)、CIP(コア独立周辺機器)が搭載されている。
2001年、マイクロチップ社はdsPICシリーズのチップを発表し[ 14 ] 、 2004年後半に量産を開始しました。これらはマイクロチップ社初の本質的に16ビットのマイクロコントローラです。PIC24デバイスは汎用マイクロコントローラとして設計されています。dsPICデバイスには、さらにデジタル信号処理機能が含まれています。
以前のPICアーキテクチャと似ているものの、重要な改良点があります。[ 15 ]
主な特徴は以下のとおりです。
dsPICは、 GCCの派生版であるMicrochipのXC16コンパイラ(以前はC30と呼ばれていた)を使用してC言語でプログラムできます。
命令ROMは24ビット幅です。ソフトウェアはROMに16ビットワード単位でアクセスでき、偶数ワードには各命令の最下位16ビット、奇数ワードには最上位8ビットが格納されます。奇数ワードの上位半分はゼロとして読み取られます。プログラムカウンタは23ビット幅ですが、最下位ビットは常に0なので、変更可能なビットは22ビットです。
命令には主に2種類あり、最も重要な演算(加算、排他的論理和、シフトなど)ではどちらの形式も使用できます。
マイクロチップ社のPIC32M製品はPICの商標を使用していますが、アーキテクチャは全く異なるため、ここでは簡単に説明するにとどめます。

2007 年 11 月、マイクロチップ社はMIPS32 M4K コアをベースとした 32 ビット マイクロコントローラのPIC32MXファミリを発表しました。[ 16 ]このデバイスは、GCC コンパイラの派生版であるMicrochip MPLAB C Compiler for PIC32 MCUs [リンク削除]を使用してプログラムできます。現在生産されている最初の 18 モデル (PIC32MX3xx および PIC32MX4xx) は、ピン互換性があり、PIC24FxxGA0xx ファミリ (16 ビット) デバイスと同じ周辺機器セットを共有しているため、共通のライブラリ、ソフトウェア、およびハードウェア ツールを使用できます。現在では、小型 QFN パッケージの 28 ピンから、イーサネット、CAN、USB OTG を備えた高性能デバイスまで、ミッドレンジ 32 ビット マイクロコントローラのファミリ全体が利用可能です。
PIC32アーキテクチャは、マイクロチップ社の製品ポートフォリオに以下のような数々の新機能をもたらしました。
2013年11月、マイクロチップ社はMIPS M14KコアをベースとしたPIC32MZシリーズのマイクロコントローラを発表しました。PIC32MZシリーズには以下が含まれます。[ 18 ] [ 19 ]
2015年、マイクロチップは、更新されたMIPS M5150 Warrior Mクラスプロセッサを使用したPIC32MZ EFファミリーをリリースした。[ 20 ] [ 21 ]
2017年、マイクロチップ社は、統合グラフィックスコントローラ、グラフィックスプロセッサ、および32MBのDDR2 DRAMを搭載したPIC32MZ DAファミリーを発表しました。[ 22 ] [ 23 ]
2016年6月、マイクロチップ社は低消費電力・低コストアプリケーション向けに特化したPIC32MMファミリを発表しました。[ 24 ] PIC32MMは、コア非依存の周辺機器、500 nAまでのスリープモード、4 x 4 mmパッケージを特徴としています。[ 25 ] PIC32MMマイクロコントローラは、32ビットMIPS32プロセッサであるMIPS Technologies M4Kを使用しています。これらは非常に低い消費電力を想定しており、動作周波数は25 MHzに制限されています。主な利点は、MIPSの16ビット命令をサポートしているため、プログラムサイズが大幅にコンパクトになることです(約40%)。
Microchipは2017年にPIC32MKファミリーを発表し、モーター制御、産業制御、産業用IoT(IIoT)、マルチチャネルCANアプリケーションに特化しました。[ 26 ]
MicrochipのPIC32C製品もPIC商標を使用していますが、同様に全く異なるアーキテクチャを採用しています。PIC32C製品はArmプロセッサアーキテクチャを採用しており、Cortex-M0+、M4、M7、M23、M33コアを使用したさまざまなラインがあります。これらは、MicrochipがAtmelの買収によって引き継いだArmベースのSAMシリーズのMCUに加えて提供されています。[ 27 ]
マイクロチップ社のPIC64製品はPICの商標を使用していますが、アーキテクチャは全く異なるため、ここでは簡単に説明するにとどめます。
2024 年 7 月、マイクロチップは高性能マルチコアマイクロプロセッサの PIC64 シリーズを発表しました。このシリーズは当初RISC-V命令セットを使用しますが、マイクロチップはARM Cortex-Aコアを搭載したバージョンも計画しています。[ 28 ] PIC64 シリーズには、インテリジェントエッジアプリケーションに重点を置いた PIC64GX ラインと、耐放射線性を備え宇宙飛行アプリケーションに重点を置いた PIC64-HPSC ラインが含まれます。[ 29 ] [ 30 ]
PICアーキテクチャ(関連性のないPIC32とPIC64を除く)は、 PDP-8やアポロ誘導コンピュータのような1オペランドのアキュムレータマシンです。その特徴は以下のとおりです。
RAMはメモリとレジスタの両方の役割を果たすため、メモリ空間とレジスタ空間に区別はありません。RAMは通常、「レジスタファイル」または単に「レジスタ」と呼ばれます。
PICには、汎用RAMとして機能するレジスタ群があります。オンチップハードウェアリソース用の専用制御レジスタもデータ空間にマッピングされます。メモリのアドレス指定範囲はデバイスシリーズによって異なり、すべてのPICデバイスタイプには、アドレス指定範囲を拡張して追加メモリにアクセスするためのバンキング機構が備わっています(ただし、一部のデバイスモデルではバンクが1つしか実装されていません)。後期のシリーズでは、選択されたバンクに関係なく、アドレス指定可能な空間全体をカバーできる移動命令が採用されています。初期のデバイスでは、レジスタの移動はすべてアキュムレータを介して行う必要がありました。
間接アドレッシングを実装するために、「ファイル選択レジスタ」(FSR)と「間接レジスタ」(INDF)が使用されます。レジスタ番号がFSRに書き込まれると、その後INDFへの読み書きは、実際にはFSRが指すレジスタとの間で行われます。後のデバイスでは、この概念を拡張し、後置インクリメント/デクリメントと前置インクリメント/デクリメントによって、順次格納されたデータへのアクセス効率が向上しました。これにより、FSRをスタックポインタ(SP)とほぼ同様に扱うことも可能になりました。
外部データメモリは、ピン数の多い一部のPIC18デバイスを除き、直接アドレス指定することはできません。ただし、汎用I/Oポートを使用して、外部メモリやその他の周辺機器にアクセスするためのパラレルバスまたはシリアルインターフェースを実装することは可能です(サブルーチンを使用)。ただし、このようなプログラムによるメモリアクセスは、PICマイコンのネイティブメモリへのアクセスよりも(当然ながら)はるかに低速になります。
コード空間は一般的にオンチップROM、EPROM、またはフラッシュROMとして実装されます。一般的に、外部メモリインターフェースがないため、コードを外部メモリに格納する機能はありません。例外はPIC17と一部の高ピン数のPIC18デバイスです。[ 31 ]
すべてのPICは、データを8ビット単位で処理(およびアドレス指定)します。ただし、コード空間のアドレス指定単位は、一般的にデータ空間のアドレス指定単位とは異なります。たとえば、ベースライン(PIC12)ファミリとミッドレンジ(PIC16)ファミリのPICは、プログラムメモリのアドレス指定単位が命令幅と同じワードサイズ、つまりそれぞれ12ビットまたは14ビットです。これに対し、PIC18シリーズでは、プログラムメモリは8ビット単位(バイト)でアドレス指定され、これは16ビットの命令幅とは異なります。
明確にしておくと、プログラムのメモリ容量は通常、バイト単位ではなく、(1ワード単位の)命令数で表されます。
PICには、戻りアドレスを保存するために使用されるハードウェアコールスタックがあります。以前のデバイスではハードウェアスタックはソフトウェアからアクセスできませんでしたが、PIC18シリーズのデバイスでこの点が変更されました。
初期シリーズでは汎用パラメータスタックのハードウェアサポートが不足していたが、PIC18シリーズではこれが大幅に改善され、PIC18シリーズのアーキテクチャは高水準言語コンパイラにとってより使いやすいものとなった。
PICの命令セットは、低価格帯のPICでは約35命令、高価格帯のPICでは80命令以上と、機種によって大きく異なります。命令セットには、レジスタを直接操作する命令、アキュムレータと定数リテラルに対して操作する命令、アキュムレータとレジスタに対して操作する命令、条件付き実行やプログラム分岐を行う命令などが含まれています。
ビット設定やテストなどの一部の操作は、任意の番号付きレジスタで実行できますが、2入力算術演算では必ずW(アキュムレータ)が使用され、結果はWまたはもう一方のオペランドレジスタに書き戻されます。定数をロードするには、別のレジスタに移動する前にWにロードする必要があります。古いコアでは、すべてのレジスタ移動がWを経由する必要がありましたが、ハイエンドコアではこの点が変更されました。
PICコアには、条件付き実行と分岐に使用されるスキップ命令があります。スキップ命令は、「ビットがセットされている場合にスキップ」と「ビットがセットされていない場合にスキップ」です。PIC18より前のコアには無条件分岐命令しかなかったため、条件付きジャンプは、条件付きスキップ(反対の条件)の後に無条件分岐を実行することで実現されます。スキップは、直後に続く任意の単一命令の条件付き実行にも役立ちます。スキップ命令をスキップすることも可能です。たとえば、「Aの場合にスキップ; Bの場合にスキップ; C」という命令シーケンスは、Aが真の場合、またはBが偽の場合にCを実行します。
PIC18シリーズはシャドウレジスタを実装しています。これは、割り込み中にいくつかの重要なレジスタを保存するレジスタであり、割り込み処理時にプロセッサの状態を自動的に保存するためのハードウェアサポートを提供します。
一般的に、PIC命令は5つのクラスに分類されます。
movlw(リテラルを WREG に移動)、andlw(リテラルと WREG の AND 演算)。PIC に特有の命令の 1 つは、即値を WREG にロードして戻る命令でretlw、これは計算分岐とともにルックアップ テーブルを作成するために使用されます。addwf reg,waddwf reg,fgotoと の2 つしかありませんcall。sleepサブルーチンからの復帰や低電力モードへの移行など、オペランドがゼロの雑多な命令がいくつかある。アーキテクチャ上の決定は、速度対コスト比の最大化を目的としている。PICアーキテクチャは初期のスカラーCPU設計の一つであり、現在でも最もシンプルで安価なアーキテクチャの一つである。命令とデータが別々のソースから供給されるハーバードアーキテクチャは、タイミングとマイクロ回路設計を大幅に簡素化し、クロック速度、価格、消費電力の面でメリットをもたらす。
PIC命令セットは、プログラム空間における高速ルックアップテーブルの実装に適しています。このようなルックアップは、1命令と2命令サイクルで完了します。多くの関数をこのようにモデル化できます。PICの比較的大きなプログラム空間(例えば、16F690では4096×14ビットワード)と、定数を組み込むことができる命令セットの設計により、最適化が容易になります。例えば、分岐命令のターゲットはWでインデックス付けされ、「RETLW」が実行されます。これは、その名の通り、 Wに格納されたリテラルを返します。
割り込みレイテンシは3命令サイクルで一定です。外部割り込みは4クロックの命令サイクルと同期させる必要があり、そうでない場合は1命令サイクルのジッタが発生する可能性があります。内部割り込みは既に同期されています。一定の割り込みレイテンシにより、PICは割り込み駆動型の低ジッタタイミングシーケンスを実現できます。その例として、ビデオ同期パルスジェネレータが挙げられます。ただし、最新のPICモデルでは同期割り込みレイテンシが3サイクルまたは4サイクルであるため、この限りではありません。
以下のスタック制限はPIC18シリーズで解消されていますが、以前のコアでは依然として適用されます。
ページングされたプログラムメモリでは、考慮すべきページサイズが 2 つあります。1 つは CALL および GOTO 用、もう 1 つは計算 GOTO (通常はテーブル参照に使用) 用です。たとえば、PIC16 では、CALL および GOTO は 11 ビットのアドレス指定を使用するため、ページサイズは 2048 命令ワードになります。PCL に加算する計算 GOTO の場合、ページサイズは 256 命令ワードになります。どちらの場合も、上位アドレスビットは PCLATH レジスタによって提供されます。このレジスタは、ページ間で制御が転送されるたびに変更する必要があります。また、PCLATH は割り込みハンドラによって保持される必要があります。[ 33 ]
市販のコンパイラはいくつか存在するが、2008年にマイクロチップ社は18F、24F、30/33Fプロセッサ向けに独自のCコンパイラであるC18とC30をリリースした。
2013年現在、MicrochipはMPLAB Xで使用するためのXCシリーズコンパイラを提供しています。Microchipは最終的にC18などの古いコンパイラを段階的に廃止し、新しい設計にはXCシリーズコンパイラを使用することを推奨しています。[ 34 ]
PICアセンブリ言語コードのRISC命令セットは、全体の流れを理解するのを難しくする場合があります。単純なマクロを適切に使用することで、PICアセンブリ言語の可読性を向上させることができます。たとえば、オリジナルのParallax PICアセンブラ(「SPASM」)には、Wを隠蔽し、PICを2アドレスマシンのように見せるマクロがあります。これには、 (アドレスaからアドレスbにmov b, aデータを移動)や(アドレスaからアドレスbのデータにデータを加算)などのマクロ命令があります。また、( aとbを比較し、等しくない場合はdestにジャンプする)などの3オペランド分岐マクロ命令を提供することで、スキップ命令を隠蔽しています。add b, acjne a, b, dest
PICデバイスは一般的に以下の特徴を備えています。
同一シリーズ内でも、チップに搭載されているハードウェアリソースに応じて、多くのデバイスバリエーションが存在する。
EPROMストレージを搭載した第一世代のPICは、フラッシュメモリを搭載したチップにほぼ完全に置き換えられました。同様に、PIC1650とその直系の後継機種のオリジナルの12ビット命令セットは、14ビットおよび16ビット命令セットに置き換えられました。Microchipは、レガシーサポートや大量注文向けに、一部のEPROMベースのPICのOTP(ワンタイムプログラマブル)バージョンとウィンドウ付き(UV消去可能)バージョンを現在も販売しています。MicrochipのWebサイトでは、電気的に消去できないPICをOTPとしてリストしています。これらのチップのUV消去可能なウィンドウ付きバージョンを注文できます。
PICMicroの型番に「F」が付いている場合は、一般的にフラッシュメモリを使用しており、電子的に消去できることを示します。逆に、「C」が付いている場合は、紫外線照射によってのみ消去できることを意味します(これは、ウィンドウ付きパッケージの場合のみ可能です)。ただし、PIC16C84はこの規則の例外で、EEPROMを使用しているため、電気的に消去可能です。
名前にLが付いている部品は、低電圧で動作し、多くの場合、周波数制限が課されます。[ 35 ] 3~3.6ボルトの厳密な範囲内で低電圧動作専用に設計された部品には、部品番号にJが付いています。これらの部品は、最大5Vの入力を受け入れることができるため、I/O耐性も非常に優れています 。[ 35 ]
Microchip は、アセンブラ、リンカ、ソフトウェアシミュレータ、デバッガを含むMPLAB XというフリーウェアIDEパッケージを提供しています。また、PIC10、PIC12、PIC16、PIC18、PIC24、PIC32、dsPIC 用の C コンパイラも販売しており、これらは MPLAB X とシームレスに統合されます。C コンパイラの無料版もすべての機能で利用可能です。ただし、無料版では、60 日後に最適化が無効になります。[ 36 ]
複数のサードパーティがPIC向けC言語コンパイラを開発しており、その多くはMPLABと統合されているか、独自のIDEを備えている。meLabs社は、PICマイクロコントローラをプログラミングするためのPICBASIC言語のフル機能コンパイラを提供している。Mikroelektronika社は、C、BASIC、Pascalプログラミング言語に対応したPICコンパイラを提供している。
Flowcodeというグラフィカルプログラミング言語は、8ビットおよび16ビットのPICデバイスをプログラミングし、PIC互換のCコードを生成できる機能を備えています。無料のデモ版から、より高機能なプロフェッショナル版まで、様々なバージョンが存在します。
Proteus Design Suiteは、多くの一般的な8ビットおよび16ビットPICデバイスと、回路図上のPICに接続されているその他の回路をシミュレートできます。シミュレートするプログラムは、Proteus自体、MPLAB、またはその他の開発ツール内で開発できます。[ 37 ]
インタプリタ、コンパイラ、アセンブラ、マルチタスクを組み込んだスタンドアロンのFORTHシステムであるFlashForthは、複雑なリアルタイムアプリケーションの作成とデバッグのための包括的なソリューションを提供します。コンパイラを含むシステム全体がマイクロコントローラ上で実行されます。シリアルリンクまたはUSBリンクを介してFFと通信するために、ターミナルエミュレータを備えたコンピュータが使用されます。[ 38 ]

従来、プログラムコードを対象のPICに書き込むには、 「プログラマ」と呼ばれる装置が使用されていました。マイクロチップ社が現在販売しているPICのほとんどは、 ICSP(インサーキットシリアルプログラミング)および/またはLVP(低電圧プログラミング)機能を備えており、PICを対象回路に組み込んだままプログラムすることができます。
Microchip社は、 MPLABシリーズとPICKitシリーズでプログラマー/デバッガーを提供しています。MPLAB ICD5とMPLAB REAL ICEは、現在プロのエンジニア向けのプログラマー/デバッガーとして販売されており、PICKit 5は趣味でプログラミングを行う人や学生向けの低価格プログラマー/デバッガーです。2026年現在、Microchip社はさらにコストを削減した、機能が限定されたシンプルなプログラマー/デバッガーであるPICKit BasicとMPLAB Snapも製造しています。
ハイエンドのフラッシュメモリ搭載PICの多くは、ブートローディングと呼ばれる自己プログラミング(自身のプログラムメモリへの書き込み)機能も備えています。デモボードには、RS-232やUSBなどのインターフェースを介してユーザープログラムをロードできる、工場出荷時にプログラム済みの小型ブートローダーが搭載されており、プログラマデバイスは不要です。
あるいは、ユーザーがICSPを使用してPICにロードできるブートローダーファームウェアも用意されています。ブートローダーをPICにプログラムした後、ユーザーは専用のコンピュータソフトウェアと連携して、RS232またはUSBを使用してデバイスを再プログラムできます。
ICSPと比較した場合のブートローダーの利点は、プログラミング速度が速いこと、プログラミング後すぐにプログラムが実行される、そして同じケーブルを使用してデバッグとプログラミングの両方を行えることである。
PICマイクロコントローラ用のプログラマは数多く存在し、ホストコンピュータからコードを直接ダウンロードするためにICSPを利用する極めてシンプルなものから、複数の電源電圧でデバイスの動作検証が可能な高度なものまで多岐にわたります。これらの複雑なプログラマの多くは、あらかじめプログラムされたPIC自体を使用して、プログラム対象のPICにプログラミングコマンドを送信します。高度なプログラマは、インサーキットプログラミングをサポートしていない初期のPICモデル(主にEPROMタイプ)をプログラムするために必要です。
サードパーティ製のプログラマーは、自作するための設計図から、組み立てキット、そして完全にテスト済みの完成品まで、幅広い種類があります。シンプルな設計で、低レベルのプログラミング信号処理にPCを必要とするもの(これらは通常、シリアルポートまたはパラレルポートに接続し、いくつかのシンプルな部品で構成されています)もあれば、プログラミングロジックが組み込まれているものもあります(これらは通常、シリアル接続またはUSB接続を使用し、一般的に高速で、多くの場合、制御にPICマイコン自体を使用しています)。
最新のPICデバイスはすべて、CPUコアに組み込まれたICD(インサーキットデバッグ)インターフェースを備えており、MPLAB IDEと連携してプログラムの対話型デバッグを行うことができます。MPLAB ICDおよびMPLAB REAL ICEデバッガは、 ICSPインターフェースを使用してこのインターフェースと通信できます。
ただし、このデバッグシステムには代償が伴います。具体的には、ブレークポイントの数が制限されること(旧型デバイスでは1つ、新型デバイスでは3つ)、一部のI/Oが失われること(デバッグ専用のラインを備えた一部の表面実装型44ピンPICを除く)、および一部のオンチップ機能が失われることです。
コストやピン数の不足により、オンチップデバッグをサポートしていないデバイスもあります。また、一部の大型チップにはデバッグモジュールがありません。これらのデバイスをデバッグするには、専用ポートを備えたドーターボードに搭載された特別な-ICDバージョンのチップが必要です。これらのデバッグチップの中には、ドーターボード上の選択可能なジャンパーを使用することで、複数のタイプのチップとして動作できるものもあります。これにより、オンチップ周辺機器をすべて備えていない、ほぼ同一のアーキテクチャを単一の-ICDチップに置き換えることができます。たとえば、16F690-ICDは、5つのオンチップ周辺機器をまったく備えていない、一部備えている、またはすべて備えていない6つの異なる部品のいずれかとして機能します。[ 39 ]
Microchip社は、3種類のフルインサーキットエミュレータを提供しています。MPLAB ICE2000(パラレルインターフェース、USBコンバータも利用可能)、より新しいMPLAB ICE4000(USB 2.0接続)、そして最新のREAL ICE (USB 2.0接続)です。これらのツールはすべて、通常、 MPLAB IDEと組み合わせて使用され、ターゲット上で実行されるコードのソースレベルでの対話型デバッグに用いられます。
PICプロジェクトでは、タスクのスケジューリングや優先順位付けのために、 FreeRTOS、AVIX RTOS、uRTOS、Salvo RTOSなどのリアルタイムオペレーティングシステム、または同様のライブラリを利用する場合があります。
Serge Vakulenko によるオープンソースプロジェクトは、RetroBSD という名前で2.11BSD をPIC32 アーキテクチャに適合させています。これにより、オンボードハードウェアの制約内で、オンボード開発環境を含む馴染みのある Unix ライクなオペレーティングシステムがマイクロコントローラにもたらされます。[ 40 ]
Parallax社は、PICmicroに似たマイクロコントローラシリーズであるParallax SXを製造していました。現在は製造中止となっています。BASIC Stampの初期バージョンで使用されていたPICマイクロコントローラとアーキテクチャ的に類似するように設計されたSXマイクロコントローラは、その後のいくつかのバージョンでPICに取って代わりました。
Parallax社のSXシリーズは、12ビット命令ワードを使用する8ビットRISCマイクロコントローラで、75MHz (75MIPS)の高速動作を実現しています。最大4096ワードの12ビットフラッシュメモリと最大262バイトのランダムアクセスメモリ、8ビットカウンタ、その他のサポートロジックを搭載しています。I²CおよびSPIインターフェース、UART、周波数発生器、計測カウンタ、PWMおよびシグマデルタA/Dコンバータをエミュレートするためのソフトウェアライブラリモジュールも用意されています。その他のインターフェースも比較的容易に実装でき、既存のモジュールを修正することで新機能を追加することも可能です。

ロシアのPKK Milandr 社は、1886 シリーズとしてPIC17アーキテクチャを使用したマイクロコントローラを製造しています。 [ 41 ] [ 42 ] [ 43 ] [ 44 ]プログラム メモリは、1886VE2U (ロシア語: 1886ВЕ2У ) では最大 64kB のフラッシュ メモリ、1886VE5U ( 1886ВЕ5У )では 8kB の EEPROMで構成されています。1886VE5U ( 1886ВЕ5У ) から 1886VE7U ( 1886ВЕ7У ) は、-60 °C ~ +125 °Cの軍用温度範囲に対応しています。各種部品のハードウェア インターフェイスには、USB、CAN、I2C、SPI、A/D および D/A コンバータが含まれます。 1886VE3U ( 1886ВЕ3У ) には、GOST 28147-89に準拠した暗号化機能用のハードウェアアクセラレータが搭載されています。1886VE8U ( 1886ВЕ8У ) および 1886VE10U ( 1886ВЕ10У )という名称の耐放射線チップも存在します。 [ 45 ]
台湾のELAN Microelectronics Corp.は、PIC16アーキテクチャに基づいたマイクロコントローラのシリーズを製造しており、13ビット命令とより小さな(6ビット)RAMアドレス空間を備えています。[ 46 ]
Holtek Semiconductorは、PIC16と驚くほどよく似た14ビット命令セットを持つ非常に安価なマイクロコントローラを多数製造している[ 47 ] (大量購入の場合は8.5セントまで安くなる[ 48 ] )。
携帯電子機器(マルチメーター、キッチンスケールなど)向けのミックスドシグナルチップを製造する台湾のメーカーであるHycon Technologyは、PIC18ファミリーと非常によく似た16ビット命令ワードを持つ独自のH08マイクロコントローラシリーズを持っています。(日立/ルネサスのH8マイクロコントローラとは関係ありません。)H08A [ 49 ]はPIC18に最も似ており、H08B [ 50 ]はそのサブセットです。[ 51 ]
使用可能な命令はほぼ同じですが、エンコーディング、メモリマップ、周辺機器が異なります。例えば、PIC18では、8ビットアドレスを符号拡張することで、0x000~0x07FのRAMや0xF80~0xFFFの特殊機能レジスタに直接アクセスできます。一方、H08では、アドレスをゼロ拡張することで、特殊機能レジスタを0x000~0x07Fに、グローバルRAMを0x080~0x0FFに配置します。
低価格の民生用電子機器に見られるアジアのメーカー製の超低価格OTPマイクロコントローラの多くは、PICアーキテクチャまたはその改良版に基づいています。ほとんどのクローンは、ベースライン部品(PIC16C5x/PIC12C50x)のみを対象としています。基本アーキテクチャに関する特許はとうに期限切れになっているため、マイクロチップは著作権を理由に一部のメーカーを訴えようとしましたが、[ 52 ] [ 53 ] 成功しませんでした。[ 54 ] [ 55 ]
マイクロチップは、110 億個目の MCU を納入してから約 10 か月後に、この 120 億個目の MCU を納入しました。
。