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