/*
 * 629test.c for PIC12F629
 * CC5X FREE 4MH内部発振によるLED点滅テスト(0.5秒点灯0.5秒消灯の繰り返し)
 */

//#include ../"12f629.h"		// MPLAB 統合環境でコンパイルする場合はあらかじめターゲット
				// デバイスを選択するので左記の記述は不要
#define CP_off |= 0x2180		// Bandgap value + CPD(disable) + CP(disable)
				// Bandbap value にはとりあえず手持ち個体の '10'
				// この値は今回のプログラムでは使わないがとりあえずセット
#define MCLR_off &= ~0x80
#pragma config BODEN = off, MCLR_off, PWRTE = on, WDTE = off, FOSC = 4, CP_off
#pragma cdata[0x3ff] = 0x349c	// とりあえず手持ち個体の周波数校正値 '9c' をセット
				// 実際の書き込み時は個々の値にあわせてライター上で変更

void delay(char time)
{				// delay time の調整は MPLAB SIM で行うと楽にできる
    uns8    i;			// 8 bit unsigned (MIN 0, MAX 255)
    do {
        TMR0 = 0;
        while (TMR0 < 127)
            ;
    } while (-- time > 0);
    for (i = 0; i < 178; i++) 
        ;
}

void main(void)
{
    // 初期設定
    #pragma update_RP 1		// Bank1
    #asm
        DW /*CALL*/ 0x2000 + 0x3ff
    #endasm
    OSCCAL = W;			// OSCCAL レジスタに読み出した校正値をセット
    TRISIO = 0b.0000.0000;		// すべてのポートを出力に設定
    OPTION_REG = 0b.0000.0011;		// TMR0 1:16 prescaler divide by 16
    CMCON = 0b.0000.0111;		// コンパレータ未使用
    #pragma update_RP 0		// Bank0
    GPIO = 0b.0000.0000;		// ゼロで初期化

    // メインルーチン
    for(;;) {
        GPIO0 = 1;			// GP0 ON
        delay(244);		// 499.992 msec
        nop();
        nop();
        nop();
        nop();
        nop();
        nop();
        GPIO0 = 0;			// GP0 OFF
        delay(244);
        nop();
        nop();
        nop();
        nop();
    }
}