---
---
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 | T1CKI CLKIN SOSCI OSC1 |
CLKOUT SOSCO CLKR T1G OSC2 |
T1G(*) SS(*) MCLR |
D- | D+ |
PORTB | RB7 | RB6 | RB5 | RB4 | ||||
---|---|---|---|---|---|---|---|---|
Digital | I/O | I/O | I/O | I/O | ||||
割込み | IOC | IOC | IOC | IOC | ||||
PullUp | WPUB7 | WPUB6 | WPUB5 | WPUB4 | ||||
Analog | AN11 | AN10 | ||||||
Other | TX | SCL SCK |
RX | SDA SDI |
PORTC | RC7 | RC6 | RC5 | RC4 | RC3 | RC2 | RC1 | RC0 |
---|---|---|---|---|---|---|---|---|
Digital | I/O | I/O | I/O | I/O | I/O | I/O | I/O | I/O |
割込み | - | - | - | - | - | - | - | INT |
PullUp | なし | なし | なし | なし | なし | なし | なし | なし |
Analog | AN9 | AN8 | - | - | AN7 | AN6 | AN5 | AN4 VREF+ |
Other | SDO | PWM2 SS |
PWM1 T0CK1 |
C1OUT C2OUT TX |
DACOUT2 CLKR(*) PWM2 CxIN |
DACOUT1 CxIN |
CxIN | CxIN |
レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
TRISA | TRISA5 | TRISA4 | ||||||
TRISB | TRISB7 | TRISB6 | TRISB5 | TRISB4 | ||||
TRISC | TRISC7 | TRISC6 | TRISC5 | TRISC4 | TRISC3 | TRISC2 | TRISC1 | TRISC |
LATA | LATA5 | LATA4 | ||||||
LATB | LATB7 | LATB6 | LATB5 | LATB4 | ||||
LATC | LATC7 | LATC6 | LATC5 | LATC4 | LATC3 | LATC2 | LATC1 | LATC0 |
PORTA | RA5 | RA4 | RA3 | RA1 | RA0 | |||
PORTB | RB7 | RB6 | RB5 | RB4 | ||||
PORTC | RC7 | RC6 | RC5 | RC4 | RC3 | RC2 | RC1 | RC0 |
APFCON | CLKRSEL | SSSEL | T1GSEL | |||||
WPUA | WPUA5 | WPUA4 | WPUA3 | |||||
WPUB | WPUB7 | WPUB6 | WPUB5 | WPUB4 | ||||
OPTION_REG | WPUEN | INTEDG | TMR0CS | TMR0SE | PSA | PS<2-0> | ||
ANSELA | ANSA4 | |||||||
ANSELB | ANSB5 | ANSB4 | ||||||
ANSELC | ANSC7 | ANSC6 | ANSC3 | ANSC2 | ANSC1 | ANSC0 |
RA5に接続したPushSWを押すと500mS間隔で、離すと100mS間隔で、LEDが点滅する。RA5は、Week Pull Upされている。
プログラム
// File name: Digital I/O // PushSWを離すと100mS間隔で、 // 押すと500mS間隔でLEDが点滅する。 // PushSWの接続される RA3は、Week Pull Upされている。、 // // Notes: 4MHz内部クロック // PushSW RA3 // LED RC2 // Language: MPLABX XC8 // Target: PIC16F1459 #include <xc.h> #define _XTAL_FREQ 4000000 // delay_ms(x) のための定義 #define LED LATCbits.LATC2 #define PushSW PORTAbits.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 WPUAbits.WPUA5 = 1; // RA5 弱プルアップ OPTION_REGbits.nWPUEN = 0; TRISC = 0b11111011; // 入出力設定 while(1){ // 繰り返しループ if(PushSW) __delay_ms(100); // 100mS遅延 else __delay_ms(500); // 500mS遅延 LED = ! LED; // 点滅 } }