FiFiWiki2

FiFiWikiの第2版

ユーザ用ツール

サイト用ツール


pic

TMR0

// ========================== ここから ==============================
// ファイル名 timer0.c
// 作成日   2009.8.22
// 更新日   2012.5.12
// 作成者   mit.ueno
// 機種    PIC16F84A
// CLOCK    20MHz
// コンパイラ MPLAB XC8
// 概要
//		TMR0のテスト
//		PORTBのLEDを500mS間隔で点滅させる
//TMR0割り込み
//		1/20MHz*4*64*256=3.2768mS
//		TMR0割込み内で500mSの時間を作る
//I/Oポート
//		RB3:LED
//

#include <stdlib.h>
#include <xc.h>
//XC8	__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT);
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & CP_OFF);

static	bit T500mS;	// 500mS経過フラグ
static	unsigned char cnt500mS;	// 500mSカウンタ


// =================== 割り込み処理 ====================
static void interrupt intr(void) {
	T0IF = 0;	// TMR0割り込みクリア
    RB1=!RB1;
	cnt500mS--;
	if	(cnt500mS == 0) {
		cnt500mS = 153;	// 3.2768mS*153=501mS
		T500mS = 1;		// 500mSフラグセット
	}
}

// ==================== メイン処理 =======================
main()	{
    // INIT
    PORTB = 0x00;
	TRISB = 0x00;	// RB3:output

//XC8	OPTION = 0x85;	// プリスケーラ:64
	OPTION_REG = 0b10000000; // プリスケーラ:2
//    OPTION_REG = 0b10000001; // プリスケーラ:4
//	OPTION_REG = 0b10000010; // プリスケーラ:8
//	OPTION_REG = 0b10000101; //0x85; 	// プリスケーラ:64

	TMR0 = 0x00;
	T0IE = 1;		// TMR0割り込み許可
	GIE = 1;		// 全体割り込み許可

	cnt500mS = 153;	// 3.2768mS*153=501mS
	T500mS = 0;

	while(1) {
		if  (T500mS) {
			T500mS = 0;
			PORTB ^= 0b0000000001;	// RB3のLEDを点滅
		}
	}
}
// ========================== ここまで ==============================
pic.txt · 最終更新: 2017/11/05 22:30 by fifi