今回からPICの品種をPIC16F88に変更して、MPLABX XC8の勉強をしていきます。
PIC16F88は、発売されてからずいぶん経ちますが、DAコンバータ以外の機能をほとんど持っていて、今でも十分通用する強力なPICです。
まずは、Lチカをやってみます。
回路図です。
内部クロックを使うことにします。この設定は、まずCONFIGで FOSC = INTOSCIO とします。
PIC16F88は、内部クロックの周波数を31.25KHz~8MHzの間で設定することができます。
これを設定するのは、OSCCONレジスタで、bit6-bit4で、111にすると内部クロック8MHzになります。
それから、PIC16F88は、ディフォルトでRA0~RA4,RB6,RB7はアナログポートに設定されています。
今回、すべてデジタルポートとしますので、ANSEL = 0x00とします。
ブレッドボードは、簡単なので省略します。
プログラムです。CONFIGの項目が多くなります。PWRTE = ONにして他はOFFにしました。
0.5sec(500ms)ごとにLEDが点滅します。
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
// CONFIG1
#pragma config FOSC = INTOSCIO //内部クロック
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CCPMX = RB0
#pragma config CP = OFF
#pragma config FOSC = INTOSCIO //内部クロック
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CCPMX = RB0
#pragma config CP = OFF
// CONFIG2
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#define _XTAL_FREQ 8000000
void main() {
ANSEL = 0x00; //アナログポートを利用しない
OSCCON = 0b01110000; // 内部クロック8MHz
TRISA = 0b01000000; // RA5 input 他はoutput
TRISB = 0b00000000; // RB0-RB7 output
PORTA = 0x00; // PORTA初期化
PORTB = 0x00; // PORTB初期化
ANSEL = 0x00; //アナログポートを利用しない
OSCCON = 0b01110000; // 内部クロック8MHz
TRISA = 0b01000000; // RA5 input 他はoutput
TRISB = 0b00000000; // RB0-RB7 output
PORTA = 0x00; // PORTA初期化
PORTB = 0x00; // PORTB初期化
while(1){ // 無限ループ
PORTB = 1; // LED点灯
__delay_ms(500); // 500ms wait
PORTB = 0; //LED消灯
__delay_ms(500); // 500ms wait
}
PORTB = 1; // LED点灯
__delay_ms(500); // 500ms wait
PORTB = 0; //LED消灯
__delay_ms(500); // 500ms wait
}
}