TOPMPLAB XC8編(PIC12F675)> (03)LEDを点滅させる(TMR0割込み,PIC12F675 XC8)> ソース

LEDを点滅させる(ソース)

− TMR0割込み −
(PIC12F675 XC8)

更新日2012.5.20
作成日2008.10.5


以下のソースを取り込んで、コンパイル→PIC書き込み→実行して下さい。

// ========================== ここから ==============================
//ファイル名	led_onoff.c
//作成日	2008.9.28
//更新日	2012.5.11
//作成者	mit.ueno
//バージョン	1.1
//コンパイラ	MPLAB XC8
//PIC	PIC12F675
//クロック	4MHz(INTIO)
//概要
//	GP4,5のLEDを0.5秒間隔で点滅させる
//	TMR0割り込み使用
//		clock	4MHz
//		命令	1μS
//		TMR0	256(フリーラン)
//		PRE_sc	32
//		割込み	1μS×256×32=8.192mS
//使用ポート
//	GP4:LED
//	GP5:LED

#include "pic.h"

static void pic_init();

static unsigned char Cnt500mS;	// 8.192mS*61=499.7mS
static			bit	 T500mS;


//XC8	__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS);
__CONFIG(FOSC_INTRCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF);


// =================== 割り込み処理 ====================
static void interrupt intr(void) {
	T0IF = 0;	// TMR0割り込みクリア

	Cnt500mS--;
	if	(Cnt500mS == 0) {
		Cnt500mS = 61;
		T500mS = 1;	// 500mSフラグセット
	}
}

// ==================== メイン処理 ===========================
main()	{
	pic_init();		// PICの初期化

	Cnt500mS = 61;
	T500mS = 0;

	while(1) {
		if	(T500mS) {
			T500mS = 0;
			if	(GPIO5) {
				GPIO5 = 0;
				GPIO4 = 1;
			} else {
				GPIO5 = 1;
				GPIO4 = 0;
			}
		}
	}
}

// ==================== PICの初期化 ===========================
static void pic_init() {
	GPIO = 0;
	CMCON = 0x07;		// コンパレータ未使用
	ANSEL = 0;		// AN未使用
	TRISIO = 0x0F;		// GP4,5:out
	GPIO = 0;

//XC8	OPTION = 0x84;		// プリスケーラ:32
	OPTION_REG = 0x84;		// プリスケーラ:32
	TMR0 = 0x00;
	T0IE = 1;		// TMR0割り込み許可
	GIE = 1;		// 全体割り込み許可
}
// ========================== ここまで ==============================