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を点滅
}
}
}
// ========================== ここまで ==============================