TOP>MPLAB C18編(PIC18F1320)> LEDを点滅させる(TMR0割り込み)> ソース
LEDを点滅させる(ソース)
−TMR0割り込み−(C18)
(PIC18F1320)
更新日2009.3.28
以下のソースを取り込んで、コンパイル→PIC書き込み→実行して下さい。
// ========================== ここから ==============================
//ファイル名 led_onoff_T0.c
//作成日 2009.3.1
//作成者 mit.ueno
//バージョン 1.0
//コンパイラ MPLAB C18
//PIC PIC18F1320
//クロック INTIO2(8MHz)
//概要
// RB0,1のLEDを0.5秒間隔で点滅させる
//使用ポート
// RB0:LED
// RB1:LED
//TMR0
// IPEN = 0 (priority disabled)
// T08BIT = 1 (8bit mode)
// presc = 64
// TMR0L = 256
// 割込み : (1/8MHz)*4*256*64 = 8.192mS
//
#include <p18f1320.h>
#pragma config OSC = INTIO2
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config MCLRE = OFF
void timer_isr (void);
static unsigned char Cnt500mS;
static struct {
unsigned flag500mS:1;
unsigned :7;
} flag;
#pragma code low_vector=0x8
void low_interrupt (void) {
_asm
GOTO timer_isr
_endasm
}
#pragma code
#pragma interruptlow timer_isr
void timer_isr (void) {
INTCONbits.TMR0IF = 0;
if (!(Cnt500mS--)) {
Cnt500mS = 61; // 8.192mS * 61 = 499.7mS
flag.flag500mS = 1;
}
}
void main (void) {
OSCCON = 0x72; // INTOSC,8MHz
TRISB = 0xFC; // RB0,1 output
ADCON1 = 0x7F; // AD未使用
PORTB = 0;
T0CON = 0xC5; // TMR0有効,8ビット内部クロック,プリスケーラ64
TMR0L = 0;
Cnt500mS = 61; // 8.192mS * 61 = 499.7mS
flag.flag500mS = 0;
INTCONbits.TMR0IE = 1; // TMR0割込み許可
INTCONbits.GIE = 1; // 全割込み許可
PORTBbits.RB1 = 1;
while (1) {
if (flag.flag500mS) {
flag.flag500mS = 0;
if (PORTBbits.RB0) {
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 1;
} else {
LATBbits.LATB0 = 1;
LATBbits.LATB1 = 0;
}
}
}
}
// ========================== ここまで ==============================