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; } } } } // ========================== ここまで ==============================