/***********************
*
* 車PIC
*
* 12F629 PIC C lite
*
************************/
//PICの接続
// GP1 <-- 出力
// GP4 --> 入力
#include "pic.h"
__CONFIG(UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);
#define PORT_OUT GPIO1
#define PORT_IN GPIO4
unsigned char sleep; // スリープモード用
// Timer0使用ディレイ
// ※プリスケーラは8、クロックは内部4MHz
void delay(char millisec)
{
do {
TMR0 = 0;
while (TMR0 < 125-1)
;
} while (-- millisec > 0);
}
//////////////////////////////////// メイン ////////////////////////////////////
void main()
{
OSCCAL=_READ_OSCCAL_DATA();
OPTION = 0b10000010; // TMR0プリスケーラ=8 プルアップ無効
TRISIO = 0b010000; // GP 4 ピンは入力ピン
GPIO = 0; // 出力ポートを0で初期化
CMCON = 0b00000111; // コンパレータ未使用
IOCB4 = 1; // GP4 入力データの変化を検出
GPIE = 1; // GPIO 4 の入力レベル変化でスリープから起こす
sleep = 0;
//////////////////////////////// メインループ ////////////////////////////////
while (1) {
delay(250);
PORT_OUT = 0;
PORT_LED = 0;
sleep = GPIO;
GPIF = 0;
SLEEP(); // スリープ突入
if (PORT_IN == 0){ // PORT_INがマイナスなら
delay(250);
delay(250);
delay(150); // 0.65秒間待って
PORT_OUT = 1; // PORT_OUTをON
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250);
delay(250); // 10秒待ったら
PORT_OUT = 0; // PORT_OUTをOFF
}
}
}