PIC (コントローラ)
Holtekは多種のPICライクなマイクロコントローラーを発表しており、HT37、HT4x、HT56、HT6x、HT82、HT95ファミリーなどである。 14ビットのミッドレンジのPICマイクロコントローラーに似ているが、正確なクローンではない。 ステータスレジスタは算術的なオーバーフローフラグを持ち、いくつかの追加命令を含み、2ポインタを使用する非直接的なレジスタを含む。
3種類の命令幅がある:
14ビット命令セット、11ビットROMアドレス(2Kx14ビット)および7ビットRAMアドレス
15ビット命令セット、12ビットROMアドレス(4Kx15ビット)および8ビットRAMアドレス
16ビット命令セット、13ビットROMアドレス(8Kx16ビット)および8ビットRAMアドレス。いくつかの拡張ROMおよびRAMをバンクとして利用できる
基本的な14-bit PIC命令セットにない命令は:
キャリーを足したり引いたりする命令
キャリーを無視して右や左にビットローテート
0かどうかテストしてスキップする(インクリメントやデクリメントを伴わない)
すべてのビットを1にする(CLR命令が全てを0にするように)
ROMからテーブル読み込み
CLRWDT1およびCLRWDT2命令はウォッチドッグタイマーをリセットするために使われる。
オリジナルのPICとの特筆すべき差異:
引き算はアキュムレータから引かれる
TRIS/OPTION命令がない。全てのレジスタはアドレスを持つ
ソフトウェアはすべてのサブルーチンスタックを利用できる。スタックがいっぱいのときに割り込みはマスクされ、その関数が抜けるときに初めて実行される
開発環境は、Microchipからは、古くはアセンブラのみが無償で提供されていたが、現在ではMPLAB Xという統合開発環境とCコンパイラ (XC) が無償で配布されている(無償版では最適化などに機能制限があるもののコードサイズ制限などはない)。MPLAB X は NetBeans IDEをベースにしている。 もちろん現在でもアセンブラも利用可能であり、サードパーティー製の開発環境も古くから何種類か発売されている。
PIC内蔵のプログラムメモリに書き込みを行うためのライタは、初期のものはDIPのゼロプレッシャソケットを備え、PICチップをライタに装着して書き込むものが一般的であったが、現在ではMicrochipから廉価な純正ライタのPICKitシリーズが発売されているのでこちらを用いるのが一般的となっている。PICKitを使用した書き込みは、回路上に用意した5ピンのICSP (In-Cirtuit-Serial-Programming) コネクタ経由で行うため、いちいち基板からPICを着脱する必要がない(ということはソケットを使わない表面実装タイプのPICの場合でも使用できる)。またPICKitは書き込みのみならずICD (In-Circuit-Debug) 対応の品種であればデバッガとしても使用できる(ただし小ピン品種でICDをサポートしているPICはあまり無い)。
日本では、電子工作雑誌で紹介されたり、秋葉原などにある電子パーツ店では独自に企画したライタなどのキットが販売され、PICチップやライタ、開発環境が入手しやすいため普及した。
命令語長を揃え命令数を抑えたRISCライクな構造になっているほか、コードエリアとデータエリアが分離されたハーバード・アーキテクチャをとり、コードエリアとデータエリアとでバス幅をそれぞれ最適化しているのが特徴である。「ビットコア」とはコードメモリの1命令のビット数を指す。たとえば命令長12ビットコアの場合はコードエリアのバス幅は12ビット・データエリアのバス幅は8ビットとなっている。またコード・データそれぞれのアドレス空間も必要十分なサイズに抑えられている。
大半の命令が1サイクルで実行されるが、シリーズにより1サイクルあたりのクロックは異なる。8ビット系PIC (PIC10/12/16/18系) は4クロックが1サイクル、PIC24/dsPIC系は2クロックが1サイクル、MIPSアーキテクチャコアのPIC32系は1クロックが1サイクルである。
大多数の品種で、動作用のクロック発振回路を内蔵しており単独で動作することが可能だが、高精度を要する場合のために外付けの水晶等を使用する発振回路も内蔵し、また外部オシレータからのクロック入力による動作も可能になっている。
プログラムコード用の内蔵メモリとしては、古くはワンタイムROM、EPROM(紫外線消去)品があったが、現在では大多数がフラッシュROM品となっている。 多くの品種で、不揮発性のデータ保存用としてEEPROMが内蔵されている。