;===============================================================
;	PIC12F675　テストプログラム　TEST1.ASM
;	Corylight 2007-2009, NES Corp./S.Endo
;	Target=PIC12F675, 内部Clock 4MHz(固定), Machine Cycle=1uS
;===============================================================	
; PIC12F675のピン配置情報(8Pin)
;*********************************************************
;	Pin1   Vdd(+ 電源)
;  	   2   GP5/T1CKI/OSC1/CLKIN
;  	   3   GP4/AN3/T1G/OSC2/CLKOUT
;  	   4   GP3/MCLR/Vpp
;  	   5   GP2/AN2/T0CKI/INT/COUT
;  	   6   GP1/AN1/CIN-/Vref/ICSPCLK
;   	   7   GP0/AN0/CIN+/ICSPDAT
;  	   8   Vss(- 電源)
;*注意!　１つのピンが幾つかの機能を兼用している。従って何に使用するか指定が必要です。
;****************************************************************************************************
;	以下はお決まりの記述です。
	LIST      P=12F675		; アッセンブル時にリストファイルを作ります
	#INCLUDE <P12F675.INC>	; 12F675用定義ファイルを読み込みます
;	以下のCONFIGで動作の為の基本設定を指定する	
	__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_CLKOUT
;****************************************************************************************************	
;	CONFIGの前には、必ずアンダーバーを2つつける。その後は＆で続ける。各文の意味は以下の通り。
;	_CP_OFF=コードプロテクトを行わない。コードプロテクトすると、プログラムの再書込みができなくなってしまう。
;	_CPD_OFF=内部EEPROMデータプロテクトを行わない。
;	_BORDEN_OFF=ブラウンアウトリセットを行わない。電源電圧4Vでリセットを発生する機能をOFFにした。
;	_MCLRE_OFF=MCLR機能(外部リセット)をオフにする。従って4番ピン=GP3(汎用ポート)として使用する。
;	WDT_OFF=ウォッチドックタイマーをオフにする。
;	PWRTE_ON=パワーアップタイマーをオンにする。
;	INTRC_OSC_CLKOUT=内部クロックを使用し、外部クロック出力する。従って3番ピン=CLKOUT(Fosc/4)
;****************************************************************************************************	
;=================================================
;	変数定義(今回は、未定義)
;=================================================
;
;=================================================
;	今回のポート定義
;=================================================
;	ポート名	I/O	FUNCTION
;	GP0		I	入力，　ACT=L　とする(NORMAL=H)
;	GP1		O	予備出力
;	GP2		O	予備出力
;	GP3		O	予備出力
;	GP4		O	クロック出力
;	GP5		O	LED1出力,　ACT=H　とする(NORMAL=L)
;================================================
;	以下　プログラム　
;================================================
		ORG	0			;最初は"0"番地から始まります。
		GOTO	INIT			;"INIT"へ行く
;
INIT	;ポートほか設定	----------------------------------------------
		BCF	STATUS,RP0		;ここと次の行で合せて
		BCF	STATUS,RP1		;BANK0に設定する	
		CLRF	GPIO			;先ずポートを全てクリアーしておく
		MOVLW	B'00000111'		;2ビット表記にした。以下同様
		MOVWF	CMCON			;コンパレーターは使用せず、全てDIGITAL端子設定にする
;---------------------------------------------------------------------
		BSF	STATUS,RP0		;BANK 1 を設定	
		MOVLW	B'00000001'		;ポートのI/O設定,出力=0，入力=1
		MOVWF	TRISIO			;従ってGP0=INPUT, 他=OUTPUT設定にする
		CLRF	ANSEL			;ADコンバーターは使用せず、全てDIGITAL　I/Oに設定する
		CLRF	OPTION_REG		;プルアップ設定を有効にする
		MOVLW	B'00000001'		;"0ﾋﾞｯﾄ"だけ"１"にして
		MOVWF	WPU			;GP0をプルアップする
		MOVLW	B'10000000'		;	
		MOVWF	OSCCAL			;OSCのキャリブレーション　Center CAL
;---------------------------------------------------------------------
		BCF	STATUS,RP0		;BANK 0　に戻す
		CLRF	INTCON			;全ての割込み禁止
;
;================================================
;	        メイン　プログラム　　　　　    
;================================================
MAIN		BTFSS	GPIO,0			;GP0が"L"だったら
		BSF	GPIO,5			;GP5を"H"にする(LEDが点灯)
;------------------------------------------------
		BTFSC	GPIO,0			;GP0が"H"だったら
		BCF	GPIO,5			;GP5を"L"にする(LEDは消灯)
		GOTO	MAIN			;MAINに行く
;------------------------------------------------
		END				;最後は必ず"END"で終わる