Timer0Interruptソースプログラム
(1)Timer0Interruptソースプログラム
Timer0Interruptソースプログラムを以下に示します。
//Timer0Interrupt
#include <xc.h>
#include <p18f4553.h>
#pragma config PLLDIV = 5 // (20MHz crystal)
#pragma config CPUDIV = OSC1_PLL2 //「 主 発振 器 そのまま」「システム96MHzPLLソースを2 分 の 一 」
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS //外付け振動子利用の高速クロック発振で、PLLを 使 う
#pragma config FCMEN = OFF //フェイルセーフクロックモニターを 無効
#pragma config IESO = OFF //発振 器 の 内部 外部 切 り 替 えを 無効
#pragma config PWRT = OFF //電源オン時タイマーを使わない
#pragma config BOR = ON //ハードだけでブラウンアウトリセット 機能 を使う
#pragma config BORV = 3 //最小電圧設定
#pragma config VREGEN = ON //USB Voltage Regulator = ON
#pragma config WDT = OFF //ウオッチドッグタイマを 無効
#pragma config WDTPS = 32768 //ウォッチドッグタイマーのプリスケーラが1:32,768
#pragma config MCLRE = ON //MCLRを 有効 にしてRE3入力端子は 無効
#pragma config LPT1OSC = OFF //タイマー1 発振 器 を 高電力 モードにする
#pragma config PBADEN = OFF //リセット 時 にPORTB0〜4をデジタル 入出力 に 選択 する
#pragma config CCP2MX = OFF //CCP2の入出力をRB3にマルチプレックスしない
#pragma config STVREN = ON //スタック満杯あるいはアンダーフロー時にリセットする
#pragma config LVP = OFF //ICSPモードでの単一書き込み電源は 使 わない
#pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming = OFF
#pragma config XINST = OFF // Extended Instruction Set = OFF
#pragma config CP0 = OFF //ブロック0(000800−001FFFh)のコードを保護しない
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF //ブロック0 (000800-001FFFh) の書込み保護しない
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot block (000000-0007FFh)の書込み保護しない
#pragma config WRTC = OFF //Configuration registers (300000-3000FFh) の書込み保護しない
#pragma config WRTD = OFF //Data EEPROM の書込み保護しない
#pragma config EBTR0 = OFF //Block 0 (000800-001FFFh) を他のブロック実行時のテーブル読み取りから保護しない
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF //Boot block (000000-0007FFh)を他のブロック実行時のテーブル読み取りから保護しない
// プロトタイプ宣言
void InitInterTimer0 (void);
void WaitTime (long cnt);
// メイン関数
void main (void)
{
// 入出力設定
ADCON1 = 0b00001111; //全チャンネルがデジタルに設定され、VDDとVSSが選択
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00110000; //D-,D+(USB用)RC4とRC5を入力に設定
TRISD = 0b00000000;
TRISE = 0b00000011; //SW1,2=INPUT LED=OUTPUT
LATA = 0b00000000;
LATB = 0b00000000;
LATC = 0b00000000;
LATD = 0b00000000;
LATE = 0b00000000;
// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
// 永久ループ
while(1)
{
// LED1状態反転
//RB1 = ~RB1;//PIC16F627A
PORTBbits.RB1 = ~PORTBbits.RB1;//PIC18F4553
// 待ち時間関数の呼び出し
WaitTime(300000);
}
}
// 割込みサービスルーチン
static void interrupt isr()
{
// スピーカに入力する電圧レベルを反転
//RB0 = ~RB0;//PIC16F627A
PORTBbits.RB0 = ~PORTBbits.RB0;//PIC18F4553
// タイマ0割込みフラグをクリア
T0IF = 0;
}
// タイマ0割込み設定関数
void InitInterTimer0 (void)
{
// クロック源を内部クロックに設定
T0CS = 0;
// プリスケーラをタイマ0に割り当て
PSA = 0;
// プリスケーラ値を128に設定
//PS2 = 0;//PIC16F627A
//PS1 = 0;//PIC16F627A
//PS0 = 0;//PIC16F627A
T0CONbits.T0PS0 = 1;//PIC18F4553
T0CONbits.T0PS1 = 1;//PIC18F4553
T0CONbits.T0PS2 = 0;//PIC18F4553
// TMR0レジスタをクリア
TMR0 = 0x0000;
// タイマ0割込みフラグをクリア
T0IF = 0;
// タイマ0割込みの許可
T0IE = 1;
}
// 待ち時間関数の呼び出し
void WaitTime (long cnt)
{
while(cnt > 0)
cnt--;
}
Timer0Interrupt.cの内容は以下を開いてコピーします。
「Timer0Interrupt.cの内容」にいく。