// // PICによるリレー制御 // // ver 1.0 2012/02/18 // // (c) kiry // // 使用PIC 12F1822 // #include #include // 動作クロック4MHzを宣言 #define _XTAL_FREQ 4000000 // PhotoMOSリレー駆動をRA5、リレー動作時LEDをRA0、リレー待機時LEDをRA1に設定する // アナログ入力をAN3(RA4)に設定する #define OUT_PC RA5 #define OUT_LED1 RA0 #define OUT_LED2 RA1 // コンフィギュレーション1の設定 // CLKOUTピンをRA4ピンで使用する(CLKOUTEN_OFF):内部クロック使用する(INTIO) // 外部クロック監視しない(FCMEN_OFF):外部・内部クロックの切替えでの起動はなし(IESO_OFF) // 電源電圧降下常時監視機能ON(BOREN_ON):電源ONから64ms後にプログラムを開始する(PWRTEN_ON) // ウオッチドッグタイマー無し(WDTE_OFF): // 外部リセット信号は使用せずにデジタル入力(RA3)ピンとする(MCLRE_OFF) // プログラムメモリーを保護しない(CP_OFF):データメモリーを保護しない(CPD_OFF) __CONFIG(CLKOUTEN_OFF & FOSC_INTOSC & FCMEN_OFF & IESO_OFF & BOREN_ON & PWRTE_ON & WDTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF) ; // コンフィギュレーション2の設定 // 動作クロックを32MHzでは動作させない(PLLEN_OFF) // スタックがオーバフローやアンダーフローしたらリセットする(STVREN_ON) // 低電圧プログラミング機能使用しない(LVP_OFF) // Flashメモリーを保護しない(WRT_OFF) __CONFIG(PLLEN_OFF & STVREN_ON & WRT_OFF & LVP_OFF); // アナログ値の入力処理 unsigned int adconv() { unsigned int temp; GO_nDONE = 1 ; // PICにアナログ値読取り開始を指示 while(GO_nDONE) ; // PICが読取り完了するまで待つ temp = ADRESH ; // PICは読取った値をADRESHとADRESLのレジスターにセットする temp = ( temp << 8 ) | ADRESL ; // 10ビットの分解能力です return temp ; } // 指定した時間(numx10ms)だけウエイトを行う処理関数 void Wait(unsigned int num) { int i ; // numで指定した回数だけ繰り返す for (i=0 ; i