PIC(3)-LED点灯のソースコード

このエントリーをはてなブックマークに追加

前回、PICにプログラムを書き込んでLEDを点灯させました。

C言語のコンパイラはXCコンパイラを使用しています。


#include <xc.h> // インクルードファイルの読み込み

#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = ON
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config CP = OFF

// メイン関数
void main (void)
{
	CMCON = 0x07;   // 1,2,17,18端子を入出力端子に設定

	PORTA = 0xFF;   // 電圧レベルの初期設定
	PORTB = 0xFF;   // 電圧レベルの初期設定

	TRISA = 0x21;   // 入出力設定
	TRISB = 0x00;   // 入出力設定

	// 永久ループ
	while(1)
	{
		if (RA0 == 0)   // SW1がONの場合
		{
			RB0 = 0;    // LED1点灯
                        RB1 = 0;    // LED2点灯
		}
		else    // その他の場合(SW1がOFFの場合)
		{
			RB0 = 1;    // LED1消灯
                        RB1 = 1;    // LED2消灯
		}
	}
}

このプログラムのソースコードについて解説していきます。

#include <xc.h>

ヘッダファイルの宣言です。

xc.hを指定する事で、現在使用しているPICで宣言できるプログラムが設定されます。

#pragma config *** = ***

コンフィグレーションのコードになり、PICのモード設定をしています。

void main (void)

C言語でおなじみのメイン関数です。

それでは、メイン関数の中身を見ていきます。

CMCON = 0x07;

16F627AのPICは18端子ありますが、一つの端子に複数の役割を持っているので、設定しています。

PORTA = 0xFF;

ポートレジスタの電圧レベルを設定するコードです。

TRISA = 0x21;

ポートレジスタが入力か出力か設定しています。

0が出力、1が入力になります。

while(1)

ループ宣言で、これもC言語でお馴染みですね。

変数に「1」を指定しているので、無限ループになります。

if (RA0 == 0)

条件分岐宣言で、これもC言語でお馴染みですね。

スイッチがONの時に、RA0が「0」になります。

RB0 = 0;

ポートレジスタの各端子に電圧レベルを設定しています。

LEDは、アノード側が電圧レベル「1」、カソード側を電圧レベル「0」に設定する事で点灯します。

今回の回路はアノード側には電源あるので、カソード側の電圧レベルを「0」にします。

これらのコードを組み合わせる事で、LEDを点灯させています。