---
---
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を点灯
}
} // ここまで繰り返し
}