STEP18_CompareMode
(1)STEP18_CompareModeソースプログラム
STEP18_CompareModeソースプログラムを以下に示します。
/*****************************
STEP18_CompareMode.c
*****************************/
#define _LEGACY_HEADERS
// インクルードファイルの読み込み
#include <pic.h>
// コンフィギュレーションワードの設定
__CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );
// プロトタイプ宣言
void InitInterCCP (void);
void InitTimer1 (void);
void WaitTime (int cnt);
// メイン関数
void main (void)
{
// 1,2,17,18端子を入出力端子に設定
CMCON = 0x07;
// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;
// 入出力設定
TRISA = 0x20;
TRISB = 0x00;
// CCP割込み設定関数の呼び出し
InitInterCCP();
// タイマ1設定関数の呼び出し
InitTimer1();
// 周辺機能割込みの許可
PEIE = 1;
// 全体の割込み許可
GIE = 1;
// 永久ループ
while(1)
{
// LED1状態反転
RB1 = ~RB1;
// 待ち時間関数の呼び出し
WaitTime(30000);
}
}
// 割込みサービスルーチン
static void interrupt isr(void)
{
// スピーカに入力する電圧レベルを反転
RB0 = ~RB0;
// CCP割込みフラグをクリア
CCP1IF = 0;
}
// CCP割込み設定関数
void InitInterCCP (void)
{
// CCPのモードをコンペアモード(CCP割込み + TMR1クリア)に設定
CCP1CON = 0b00001011;
// CCPRレジスタの設定(周期1911μ秒)
CCPR1H = 0b00000111;
CCPR1L = 0b01110111;
// CCP割込みフラグをクリア
CCP1IF = 0;
// CCP割込みの許可
CCP1IE = 1;
}
// タイマ0設定関数
void InitTimer1 (void)
{
// クロック源を内部クロックに設定
TMR1CS = 0;
// プリスケーラ値を1に設定
T1CKPS1 = 0;
T1CKPS0 = 0;
// TMRレジスタをクリア
TMR1H = 0;
TMR1L = 0;
// タイマ1起動
TMR1ON = 1;
}
// 待ち時間関数の呼び出し
void WaitTime(int cnt)
{
while(cnt > 0)
cnt--;
}