/***********************
*
*    車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
    }
}
}