RC0ポートに繋がっているLEDは通常の処理で点滅、
RC1ポートに繋がっているLEDは割り込みが発生する度に点滅
/*
概要:タイマ0を使った割り込みを使ってみる
HID - Bootloaderを使った書き込み
マイコン:PIC18F2550
ファイル名:nain.c
開発環境:MPLAB C18
*/
#include <p18f2550.h>
#include <delays.h>
#include <timers.h>
void high_isr (void);
void low_isr (void);
// リセットベクタ
#pragma code reset_vector=0x1000
extern void _startup(void);
void remapped_reset(void) {
_asm goto
_startup
_endasm
}
#pragma code
// 高優先割込み関連の記述 ====
#pragma code high_vector=0x1008
void high_interrupt (void) {
_asm
GOTO high_isr
_endasm
}
#pragma code
#pragma interrupt high_isr
void high_isr (void) {
/* ここに高優先割込み処理を記述する */
INTCONbits.TMR0IF = 0; // タイマ0割り込みフラグを0にする
WriteTimer0(18660);
LATCbits.LATC1 = !LATCbits.LATC1;//RC1のLED点滅点<->灯点滅
}
// 低優先割込み関連の記述 ====
#pragma code low_vector=0x1018
void low_interrupt (void) {
_asm
GOTO low_isr
_endasm
}
#pragma code
#pragma interruptlow low_isr
void low_isr (void) {
/* ここに低優先割込み処理を記述する */
}
void main(void) {
TRISC=0; // ポートCをすべて出力ピンにする
OpenTimer0(
TIMER_INT_ON & //割込み:ON
T0_16BIT & //16 bit モードに設定 vs 8bit モード( T0_8BIT )
T0_SOURCE_INT & //内部クロック使用
T0_PS_1_128 //128ビットプリスケーラ 1/8 vs 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256
);
WriteTimer0(18660);//48MHzで0.5s
RCONbits.IPEN = 0; //割込み優先順位制御:OFF (RCON レジスタのIPENビット = 0)
INTCONbits.TMR0IE = 1; //タイマ0割込み許可
INTCONbits.PEIE = 1; //周辺割込み許可
//INTCONレジスタの b6ビット : 低位割込み許可/禁止(割り込み優先順位制御 有りの場合)
INTCONbits.GIE = 1; //全割込み許可
//INTCONレジスタの b7ビット : 高位割込み許可/禁止(割り込み優先順位制御 有りの場合)
while(1)
{ //通常の処理
PORTCbits.RC0=1; //RC0ポートのLED点滅
Delay10KTCYx(0); //0=>256 48MHzで213.3 ms
PORTCbits.RC0=0;
Delay10KTCYx(0);
}
}

0 件のコメント:
コメントを投稿