MPLABX XC8 PICKit3環境でPICのプログラミングの勉強をしています。
今回からPICの品種を8pin PICのPIC12F675にします。
Webで、「MPLABX PIC12F675」を検索すると、「MPLABX ではPIC12F675は使えない」という記事が目につきました。
これは、困ったと思い、記事を読むと、PIC12F675(629)を内蔵クロックで使った場合、0x3FF番地にメーカーが書き込んだクロック周波数の補正値(キャリブレーション値)がプログラムを書きこむときに消えてしまうことが原因のようです。
ただ、この記事読むと、MPLABXとPICkit2の組み合わせのようです。PICKit3ならどうなんだろうと思い、テストしました。
私は、PIC12F629と12F675を今2個ずつ持っています。このキャリブレーション値が消えた場合困るので、以前からこの値を調べて、PICの腹にテプラで張り付けています。
一応こんな準備をして、PIC12F675でLチカのテストをしました。
PMLABXはV5.05、XC8はV1.45、PICkit3(ANBE製)という環境です。
回路図です。GPIO2に接続したLEDを0.5秒ごとに点滅させます。電源は乾電池で3.0Vです。
プログラムです。
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
// CONFIG
#pragma config FOSC = INTRCIO //内蔵クロック4MHzを使う
#pragma config WDTE = OFF //
#pragma config PWRTE = ON //
#pragma config MCLRE = OFF //
#pragma config BOREN = OFF //
#pragma config CP = OFF //
#pragma config CPD = OFF //
#pragma config FOSC = INTRCIO //内蔵クロック4MHzを使う
#pragma config WDTE = OFF //
#pragma config PWRTE = ON //
#pragma config MCLRE = OFF //
#pragma config BOREN = OFF //
#pragma config CP = OFF //
#pragma config CPD = OFF //
#define _XTAL_FREQ 4000000
void main() {
CMCON = 0x07 ; // コンパレータは使わない
ANSEL = 0b00000000 ; // すべてデジタI/O
TRISIO = 0b00000000 ; // ピンは全て出力に割当てる(GP3は入力のみ)
GPIO = 0x00 ; // 出力ピンの初期化
CMCON = 0x07 ; // コンパレータは使わない
ANSEL = 0b00000000 ; // すべてデジタI/O
TRISIO = 0b00000000 ; // ピンは全て出力に割当てる(GP3は入力のみ)
GPIO = 0x00 ; // 出力ピンの初期化
while(1) {
GPIO2 = 1 ; // LED ON
__delay_ms(500) ;
GPIO2 = 0 ; // LED OFF
__delay_ms(500) ;
}
}
GPIO2 = 1 ; // LED ON
__delay_ms(500) ;
GPIO2 = 0 ; // LED OFF
__delay_ms(500) ;
}
}
このプログラムで問題なくLEDが点滅しました。
MPLABX XC8 PICkit3の組み合わせなら大丈夫なようです。