---
			---
		 
		16F145xのDigital I/Oに関連するレジスターを示します。Power On Reset後は、すべてのピンは入力(TRISx = 1)に設定されていますが、Analog入力と併用できるピンは、すべてアナログ入力(ANSx = 1)に設定されます。 また、デジタル入力に設定したPortAとPortBは、20KΩ程度の抵抗で、Vddにプルアップ(WPUx=1)することもできます。
| デジタル入力として使用する場合 | デジタル出力として使用する場合 | 
|---|---|
| 
 | 
 | 
| 弱プルアップするには | 
|---|
| 
 | 
*注意*
汎用ピンをデジタルで使用する場合は、デジタルの入出力をTRISで設定するだけでなく、アナログ併用ピンかを調べ、併用ピンであれば、ANSELAでデジタル設定にする必要があります。ANSELxは、デフォルトの設定が、アナログのため、デジタル入力で使用するには、必ず該当ピンをデジタルに設定(ANSAx = 0)する必要があります。
(*) は、APFCONで代替えPIN指定「1」したときに有効となる。
Other欄の出力指定は上段ほど優先度が高い。
| PORTA | RA5 | RA4 | RA3 | RA1 | RA0 | |||
|---|---|---|---|---|---|---|---|---|
| Digital | I/O | I/O | I | I | I | |||
| 割込み | IOC | IOC | IOC | IOC | IOC | |||
| PullUp | WPUA5 | WPUA4 | WPUA3 | - | - | |||
| Analog | - | AN3 | - | - | - | |||
| Other | PWM2(*) T1CKI CLKIN SOSCI OSC1 | CLKOUT SOSCO CLKR SDO(*) T1G OSC2 | T1G(*) SS(*) MCLR | D- | D+ | 
| PORTC | RC5 | RC4 | RC3 | RC2 | RC1 | RC0 | ||
|---|---|---|---|---|---|---|---|---|
| Digital | I/O | I/O | I/O | I/O | I/O | I/O | ||
| 割込み | - | - | - | - | - | INT | ||
| PullUp | なし | なし | なし | なし | なし | なし | ||
| Analog | - | - | AN7 | AN6 | AN5 | AN4 VREF+ | ||
| Other | PWM1 RX | C1OUT C2OUT TX | DACOUT2 CLKR(*) PWM2 CxIN | DACOUT1 SDO CxIN | SDA SDI CxIN | SCL SCK CxIN | 
| レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | 
|---|---|---|---|---|---|---|---|---|
| TRISA | TRISA5 | TRISA4 | ||||||
| TRISC | TRISC5 | TRISC4 | TRISC3 | TRISC2 | TRISC1 | TRISC | ||
| LATA | LATA5 | LATA4 | ||||||
| LATC | LATC5 | LATC4 | LATC3 | LATC2 | LATC1 | LATC0 | ||
| PORTA | RA5 | RA4 | RA3 | RA1 | RA0 | |||
| PORTC | RC5 | RC4 | RC3 | RC2 | RC1 | RC0 | ||
| APFCON | CLKRSEL | SDOSEL | SSSEL | T1GSEL | P2SEL | |||
| WPUA | WPUA5 | WPUA4 | WPUA3 | |||||
| OPTION_REG | WPUEN | INTEDG | TMR0CS | TMR0SE | PSA | PS<2-0> | ||
| ANSELA | ANSA4 | |||||||
| ANSELC | ANSC3 | ANSC2 | ANSC1 | ANSC0 | ||||
RA5に接続したPushSWを押すと500mS間隔で、離すと100mS間隔で、LEDが点滅する。RA5は、Week Pull Upされている。
 
			 
			プログラム
//  File name: Digital I/O
//  PushSWを離すと100mS間隔で、
//          押すと500mS間隔でLEDが点滅する。
//  PushSWの接続される RA5は、Week Pull Upされている。、
//
//  Notes: 4MHz内部クロック
//        PushSW RA5
//        LED    RC2
//    Language: MPLABX XC8
//    Target: PIC16F1455
#include <xc.h>
#define _XTAL_FREQ 4000000      // delay_ms(x) のための定義
#define LED    LATC2
#define PushSW RA5
#pragma config FOSC  = INTOSC, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP  = OFF
#pragma config BOREN = ON, CLKOUTEN = OFF, IESO  = OFF, FCMEN = OFF
#pragma config WRT = OFF, CPUDIV = NOCLKDIV, USBLSCLK = 48MHz, PLLMULT = 3x
#pragma config PLLEN = DISABLED, STVREN = ON, BORV = LO, LPBOR = OFF, LVP = OFF
void main(void){
    OSCCON = 0b00110110;               // 内部クロック4Mhz
    WPUA5  = 1;                        // RA5 弱プルアップ
    nWPUEN = 0;
    TRISC  = 0b11111011;               // 入出力設定
    while(1){                          // 繰り返しループ
         if(PushSW) __delay_ms(100);   // 100mS遅延
              else  __delay_ms(500);   // 500mS遅延
         LED = ! LED;                  // 点滅
    }
}