今回からPIC16F1827について勉強していきます。
PIC16F1827は、18ピンで、PIC12F1822/40のI/OポートやA/Dコンバータを増やしたようなアーキテクチャを持っています。
動作を確かめるために、まずはLチカ(LED点滅)をやってみます。
PIC16F1827は、PIC12F1822同様に最大32MHzで動作させることができます。
方法は、内部クロックを8MHzとし、PLL=ONとすると8×4=32MHzで動作します。
LEDは、RB4に接続します。
回路図です。
ブレッドボードです。Vccは、乾電池2本で3Vです。
プログラムです。
0.5秒(500ms)ごとにLEDを点灯、消灯します。
---------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <xc.h>
/* LEDはRB4に接続 */
// CONFIG1
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = OFF
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
// CONFIG2
#pragma config WRT = OFF
#pragma config PLLEN = ON
#pragma config STVREN = ON
#pragma config BORV = HI
#pragma config LVP = OFF
#pragma config WRT = OFF
#pragma config PLLEN = ON
#pragma config STVREN = ON
#pragma config BORV = HI
#pragma config LVP = OFF
#define _XTAL_FREQ 32000000 //クロック32MHz
void main() {
OSCCON = 0b01110000 ; // 内部クロック8MHz PLL ONで8×4=32MHz
ANSELA = 0b00000000 ; // AN0-AN4は使用しない
ANSELB = 0b00000000 ; // AN5-AN11は使用しない
TRISA = 0b00000000 ; // PORTAは全て出力(RA5は入力)
TRISB = 0b00000000 ; // PORTBは全て出力
PORTA = 0b00000000 ; // PORTA初期化
PORTB = 0b00000000 ; // PORTB初期化
OSCCON = 0b01110000 ; // 内部クロック8MHz PLL ONで8×4=32MHz
ANSELA = 0b00000000 ; // AN0-AN4は使用しない
ANSELB = 0b00000000 ; // AN5-AN11は使用しない
TRISA = 0b00000000 ; // PORTAは全て出力(RA5は入力)
TRISB = 0b00000000 ; // PORTBは全て出力
PORTA = 0b00000000 ; // PORTA初期化
PORTB = 0b00000000 ; // PORTB初期化
// 0.5毎にLEDの点滅を繰り返す
while(1) {
RB4 = 1 ; // LED点灯
__delay_ms(500) ; // 0.5sec待つ
RB4 = 0 ; // LED消灯
__delay_ms(500) ; // 0.5sec待つ
}
while(1) {
RB4 = 1 ; // LED点灯
__delay_ms(500) ; // 0.5sec待つ
RB4 = 0 ; // LED消灯
__delay_ms(500) ; // 0.5sec待つ
}
}