TOP > MPLAB XC8編(PIC16F84A) > LEDを点滅させる(TMR0割込み,PIC16F84A XC8)> ソース
− TMR0割込み −
(PIC16F84A XC8)
| 更新日2012.5.20 |
| 作成日2009.9.22 |
以下のソースを取り込んで、コンパイル→PIC書き込み→実行して下さい。
// ========================== ここから ==============================
// ファイル名 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 "pic.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割り込みクリア
cnt500mS--;
if (cnt500mS == 0) {
cnt500mS = 153; // 3.2768mS*153=501mS
T500mS = 1; // 500mSフラグセット
}
}
// ==================== メイン処理 =======================
main() {
TRISB = 0xF7; // RB3:output
//XC8 OPTION = 0x85; // プリスケーラ:64
OPTION_REG = 0x85; // プリスケーラ:64
TMR0 = 0x00;
T0IE = 1; // TMR0割り込み許可
GIE = 1; // 全体割り込み許可
PORTB = 0x00;
cnt500mS = 153; // 3.2768mS*153=501mS
T500mS = 0;
while(1) {
if (T500mS) {
T500mS = 0;
PORTB ^= 0x08; // RB3のLEDを点滅
}
}
}
// ========================== ここまで ==============================