---
---
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; // 点滅 } }