---
---
18F26J 50には、22のDigital I/Oが準備されています。これらに関連するレジスターを示します。Power On Reset後は、すべてのピンは入力(TRISx = 1)に設定されていますが、Analog入力と併用できるピンは、すべてアナログ入力(ANCONx = 0)に設定されます。 また、デジタル入力に設定したPortBは、RBPU (INTCON2<7>)を0にクリアすることで20KΩ程度の抵抗でVddにプルアップすることができます。
デジタル入力として使用する場合 | デジタル出力として使用する場合 |
---|---|
|
|
弱プルアップするには <PortBのデジタル入力のみ> |
---|
|
*注意*
汎用ピンをデジタル入力で使用する場合は、デジタルの入出力をTRISで設定するだけでなく、アナログ併用ピンかを調べ、併用ピンであれば、デジタルに設定にするためにANCONの該当ビットを「1」にセットする必要があります。
PORTA | RA7 | RA6 | RA5 | RA4 | RA3 | RA2 | RA1 | RA0 |
---|---|---|---|---|---|---|---|---|
Digital | I/O | I/O | I/O | I/O | I/O | I/O | I/O | |
PullUp | なし | なし | なし | なし | なし | なし | なし | |
Analog | - | - | AN4 | AN3 | AN2 | AN1 | AN0 | |
Remap | RP2 | RP1 | RP0 | |||||
Other | OSC1 | OSC2 |
PORTB | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
---|---|---|---|---|---|---|---|---|
Digital | I/O | I/O | I/O | I/O | I/O | I/O | I/O | I/O |
割込み | IOC | IOC | IOC | IOC | INT0 | |||
PullUp | あり | あり | あり | あり | あり | あり | あり | あり |
Analog | AN11 | AN10 | ||||||
Remap | RP10 | RP9 | RP8 | RP7 | RP6 | RP5 | RP4 | RP3 |
Other | PGD | PGC | SDA1 | SCL1 | RTCC |
PORTC | RC7 | RC6 | RC5 | RC4 | RC3 | RC2 | RC1 | RC0 |
---|---|---|---|---|---|---|---|---|
Digital | I/O | I/O | I | I | I/O | I/O | I/O | |
割込み | - | - | - | - | - | INT | INT | INT |
PullUp | なし | なし | なし | なし | なし | なし | なし | |
Analog | AN9 | AN8 | AN11 | |||||
Remap | RP18 | RP17 | RP13 | RP12 | RP11 | |||
Other | RX1 | TX1 | D+ | D- | T1OSI | T1OSO |
レジスタ | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
TRISA | TRISA7 | TRISA6 | TRISA5 | TRISA3 | TRISA2 | TRISA1 | TRISA0 | |
TRISB | TRISB7 | TRISB6 | TRISB5 | TRISB4 | TRISB3 | TRISB2 | TRISB1 | TRISB0 |
TRISC | TRISC7 | TRISC6 | TRISC2 | TRISC1 | TRISC0 | |||
LATA | LATA7 | LATA6 | LATA5 | LATA3 | LATA2 | LATA1 | LATA0 | |
LATB | LATB7 | LATB6 | LATB5 | LATB4 | LATB3 | LATB2 | LATB1 | LATB0 |
LATC | LATC7 | LATC6 | LATC2 | LATC1 | LATC0 | |||
PORTA | RA7 | RA6 | RA5 | RA3 | RA3 | RA1 | RA0 | |
PORTB | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
PORTC | RC7 | RC6 | RC5 | RC4 | RC2 | RC1 | RC0 | |
INTCON2 | RBPU | INTEDG0 | INTEDG1 | INTEDG2 | INTEDG3 | TMR0IP | INT3IP | RABIP |
ANCON0 | PCFG4 (RA5) |
PCFG3 (RA3) |
PCFG2 (RA2) |
PCFG1 (RA1) |
PCFG0 (RA0) |
|||
ANCON1 | VBGEN | PCFG12 (RB0) |
PCFG11 (RC2) |
PCFG10 (RB1) |
PCFG9 (RB3) |
PCFG8 (RB2) |
PPortB - RB0,RB1,RB2,RB3 に接続されたLEDが点灯するプログラムを作成しました。 PortB - RB5 に接続された SW を押すと点灯するLEDが替わります。
<プログラム>
// File name: LED // Description: DigitalIO example // PushSWの状態で点灯するLEDが異なる。 // Notes: 4MHz内部クロック // SW RA5 // LED RB0 // LED RB1 // LED RB2 // LED RB3 // Language: MPLAB xc8 // Target: PIC18F26J50 #include <xc.h> // #pragma config WDTEN = OFF #pragma config PLLDIV = 2 #pragma config STVREN = ON #pragma config XINST = OFF #pragma config CPUDIV = OSC1 #pragma config CP0 = OFF #pragma config OSC = INTOSC #pragma config T1DIG = OFF #pragma config LPT1OSC = OFF #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config WDTPS = 32768 #pragma config DSWDTOSC = INTOSCREF #pragma config RTCOSC = T1OSCREF #pragma config DSBOREN = OFF #pragma config DSWDTEN = OFF #pragma config DSWDTPS = 8192 #pragma config IOL1WAY = OFF #pragma config MSSP7B_EN = MSK7 #pragma config WPFP = PAGE_1 #pragma config WPEND = PAGE_0 #pragma config WPCFG = OFF #pragma config WPDIS = OFF void main(void){ OSCCON = 0b01100010; // 内部クロック4Mhz LATB = 0; // PortCのすべてのビットを「0」 TRISB = 0b11110000; // LEDの接続されているポートを出力に設定 ANCON0 = 0b11111111; // すべてのポートをデジタルに設定 ANCON1 = 0b00011111; // while(1){ // 繰り返しループ if(PORTAbits.RA5 == 1){ LATB = 0b00001100; // 左2ケのLEDを点灯 }else{ LATB = 0b00000011; // 右2ケのLEDを点灯 } } // ここまで繰り返し }