2010年12月2日木曜日

TIMER0による割り込み-PIC18F2550


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 件のコメント:

コメントを投稿