PIC16F690 で LED を点滅
ここでは PIC16F690 の最初のプロジェクトとして、LED をひとつだけ取り付けて点滅させてみましょう。
早速コードは次のようになります。
#pragma config FOSC = INTRCIO
#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 IESO = OFF
#pragma config FCMEN = OFF
#include <xc.h>
#define _XTAL_FREQ (4000000)
void main(void) {
ANSEL = 0;
ANSELH = 0;
CM1CON0 = 0;
CM2CON0 = 0;
PORTC = 0x00;
TRISC = 0x00;
while(1){
PORTC = 0x01;
__delay_ms(1000);
PORTC = 0x00;
__delay_ms(1000);
}
return;
}
それでは、構成ビット (#pragma の部分) はここでは呪文としておき main 関数からみていきましょう。
ANSEL = 0;
ANSELH = 0;
ANSEL はアナログ選択レジスタ、 ANSELH はアナログ選択ハイレジスタです。ANSEL と ANSELH を 0 に初期化することでデジタル IO に設定されます。
CM1CON0 = 0;
CM2CON0 = 0;
CM1CON0 と CM2CON0 はコンパレータの設定に使いますが、今回は使わないので 0 にクリアしてコンパレータを無効にします。 消費電流が少なくなります。
PORTC = 0x00;
TRISC = 0x00;
今回は RC0 に LED (と電流制限抵抗) を接続します。
基本的にこういう構成にします。
そこで PORTC をまずは 0 クリアしています。PORTC は 8 ビットありますが全部まとめて 0 にしてます。次に TRISC を 0 にすることで、 対応するPORTC のピンを出力に設定します。
以上で初期化は終わりです。次の while を繰り返します。
...
#include <xc.h>
#define _XTAL_FREQ (4000000)
...
while(1){
PORTC = 0x01;
__delay_ms(1000);
PORTC = 0x00;
__delay_ms(1000);
}
...
PORTC を 0x01 に設定することで、PORTC の Bit 0 を 1 に設定しています。__delay_ms で 1,000 ミリ秒遅延し、 PORTC を 0x00 に設定して PORTC の Bit 0 を 0 に設定しています。(実際にはひとつのビットだけを操作しているのではなく、 他のビットも全て 0 にしてますが)
_XTAL_FREQ は PIC16F690 の内部クロックの既定値が 4 MHz なので 4000000 としています。これによって、__delay_ms 関数で正しい時間遅延されます。
以上で LED の点滅について説明しました。