ムライボックス (18) --- ソフトウェア (10)

8 ピン・パッケージである PIC16F18313 には CLC (Configurable Logic Cell) が 2 個しか搭載されていないので、単体では 2 ポートしか実現できません。
外部に "OR" ゲートを設けることにより、8 ピンの制限内であと 2 ポート追加することが可能です。
つまり、基本的には、

  • 内蔵 32 MHz オシレータ使用、CLC のみ利用による 2 ポート出力
  • 内蔵 32 MHz オシレータ使用、外部の "OR" ゲート利用により、CLC と合わせて計 4 ポート出力
  • 外付け 8 MHz 水晶振動子/セラミック振動子使用 (×4 PLL により 32 MHz に逓倍)、CLC のみ利用による 2 ポート出力

の構成が可能です。 (ソフトウェアもそれに対応したコンフィギュレーションコンパイルします)
内蔵 32 MHz オシレータ、CLC による 2 ポート出力の場合の回路図を下に示します。

Pickit 3 との接続は配線を示すと図が見にくくなるので、接続先のピンの端子名だけを記しています。
ピン数の制限のため、4 番ピンの RA3/MCLR/Vpp のリセット機能を禁止して入力ピンとして使っています。
PIC の 4 番ピンにはプログラム書き込み開始時に 9 V 程度の高電圧がかかるので、その影響を避けるため、フォトカプラ出力の 4 番ピンとの間は「直結」ではなく、4.7 kΩ の抵抗を挟んで接続しています。
このアプリケーションの回路上でプログラム書き込みを行なわないのなら、4.7 kΩ の抵抗は必要なく、直結で構いません。
ただし、書き込み用のクロック信号とデータ信号が接続される RA0、RA1 は MIDI ポート出力としても使われているので、確実な書き込みのためには MIDI 出力ポート (と入力ポート) からケーブルを抜いておく必要があります。
すべての構成で 5 番ピンには EUSART TX 信号が (利用されていなくても) 出力されています。
外付け 8 MHz 水晶振動子/セラミック振動子、CLC による 2 ポート出力の場合の回路図を下に示します。

内蔵オシレータ版とは、2 番ピン、3 番ピンに水晶振動子/セラミック振動子とコンデンサを接続している所だけが違っています。
この構成用にコンパイルしたソフトウェアでは、当然、外付け水晶振動子/セラミック振動子なしでは正しく動作しません。
内蔵 32 MHz オシレータ、外部の "OR" ゲート利用により計 4 ポート出力の場合の回路図を下に示します。

2 番ピン、3 番ピンも出力に使うので、外付け水晶振動子/セラミック振動子を使う構成にはできません。
"OR" ゲートは 2 個使うので、4 個入りの 74HC32 を使うと 2 個余ることになります。
PIC16F18325 用のプログラムと比較した場合の違いは、ペリフェラルの設定部分を除き、メインの無限ループの中では "OR" ゲートへの出力部

      CM1CON0bits.C1POL    = (0x01u & bm); // port 1 mask
      bm >>= 1; // next bit
      PWM5CON0bits.PWM5POL = (0x01u & bm); // port 2 mask
#if (!defined(XTAL8MHz) & !defined(CLC_ONLY)) // 4-port conf.
      bm <<= (4-1); // next bit
      LATA = bm;    // port 3, port 4 mask
#endif      

だけです。
本来、CLC の入力として「PWM5OUT」と「PWM6OUT」が利用できるはずですが、MCC (MPLAB Code Configurator) の設定画面では、なぜか「PWM6OUT」が現れなかったので、「C1OUT」と「PWM5OUT」とを使っています。
4 ポート構成の場合のみ、PA4、PA5 へ "OR" ゲート信号を出力しています。