;***************************************************************************
; 629test3.asm	GP0 0.5秒on、0.5秒offの繰り返しによる10MHz外部部発振の確認
; および10MHz発振が維持できる最低電源電圧の確認
;***************************************************************************
	list	P=PIC12F629
	include  "P12F629.INC"
; ----- コンフィギュレーションビットの設定 -----
	__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
count1	equ	20h		;12F629では20hから64バイトがユーザーエリア
count2	equ	21h
	org	0		;
				;割り込みを使わないので org 4 は記述せず
;----- 初期設定 -----
	bsf	STATUS, RP0	;bank1へ 12C509Aとは記述が異なる
;	call	3ffh		;内部発振周波数校正値の読み込み 外部発振では必要なし
;	movwf	OSCCAL		;OSCCALレジスタに校正値を保存  外部発振では必要なし
	movlw	b'00001000'	;GP3のみ入力でGP<5:4,2:0>は出力
	movwf	TRISIO		;12C509Aとは記述が異なる
	movlw	b'00000000'	;
	movwf	OPTION_REG	;12C509Aとは記述が異なる
	bcf	STATUS, RP0	;bank0へ
	clrf	GPIO
	movlw	b'00000111'	;SET GP<2:0> TO DIGITAL IO
	movwf	CMCON		;12C509Aにはなかった記述
; ----- メインループ -----
loop				;just 1sec loop
	bsf	GPIO, 0		;GP0 on
	call	wait500ms
	bcf	GPIO, 0		;GP0 off
	call	wait500ms
	goto	loop
; ----- ウェイトルーチン -----
wait
	movlw	d'248'
	movwf	count1
wlp	nop
	decfsz	count1, f
	goto	wlp
	goto	$+1
	return
wait500ms
	movlw	d'249'
	movwf	count2
wlp500
	call	wait
	call	rtrn
	call	wait
	call	rtrn
	call	wait
	call	rtrn
	call	wait
	call	rtrn
	call	wait
	call	rtrn
	goto	$+1
	decfsz	count2, f
	goto	wlp500
	call	rtrn
	call	rtrn
	call	rtrn
	nop
	return			;12F629ではreturnが使える
rtrn	return
; ----- 発振周波数校正値呼び出しルーチン -----
;	org	0x3ff		;外部発振では必要なし
;	retlw	0x9c		;外部発振では必要なし
	end