;オートバイ ギヤポジション2進数変換	bitメカ工房		2013-02-08(金)
;
;[プログラム概要]
; ･オートバイ用のギアポジションを2進数に変換するプログラム｡
; ･ニュートラル…000
; ･1速…001
; ･2速…010
; ･3速…011
; ･4速…100
; ･5速…101
; ･6速…110
;
; ･オシレーターは基本的に内部 RC 31.25kHzを使用する｡(1命令処理時間 0.000128秒)
;	(1番遅い設定だが､これで十分である｡)
; ･ギアポジション入力はRBのプルアップ機能を使用する｡
;
;[PIC選定その他仕様]
; ･PIC16F88-I/P使用｡(秋月電子通商で230円/個)
; ･MCLRは外配線を簡略するため内部接続モードとする｡
;			     ┌─┰─┐
;	出力2		 RA2 ┥	     ┝ RA1	出力1
;	LED		 RA3 ┥	     ┝ RA0	出力0
;	(未使用)	 RA4 ┥	     ┝ RB7	(未使用)
;	(未使用)	 RA5 ┥PIC   ┝ RB6	(未使用)
;			 Vss ┥16F819┝ Vdd	5.0V
;	ﾆｭｰﾄﾗﾙ入力	 RB0 ┥	     ┝ RB7	(未使用)
;	1速入力		 RB1 ┥	     ┝ RB6	6速入力
;	2速入力		 RB2 ┥	     ┝ RB5	5速入力
;	3速入力		 RB3 ┥	     ┝ RB4	4速入力
;			     └───┘
;	※#04(RA5)は入力のみなので注意
;
;
;[凡例] (自分で分かりやすいように目印を付ける)
; mXXX:メモリー  rXXX:ラベル  sXXX:サブルーチン  vXXX:変数  ★:調整箇所など
;
; CVASM16アセンブラ用記述
;-------PICコンフィギュレーション設定---;

	include	'16f819.inc'

	fuses _intrc_io			;オシレーター設定→内蔵､ピンはra6設定
	fuses _wdt_off			;ウォッチドックタイマー→無効
	fuses _pwrte_on			;電源投入72ms間リセット→有効
	fuses _mclr_off			;MCLR端子(リセット)→設定しない
	fuses _boden_on			;低電圧リセット(約4V以下)→有効
	fuses _lvp_off			;低電圧プログミング(5V)→無効
	fuses _cpd_off			;eepromのコードプロテクト→無効
	fuses _wrt_enable_off		;eeconのFlashメモリ可能→しない
	fuses _debug_off		;インサーキットデバックモード→無効
	fuses _ccp1_rb2			;PWMピン選定(or_rb3)
	fuses _cp_off			;コードプロテクト→無効

	id	'0302'			;Ver3.00


;-------プログラムメモリー割当----------;

;	使用しない			;必要ない

;=======プログラム初期設定==============;

	clr	ra			;
	clr	rb			;

	setb	rp0			;ページ変更(Bank 1へ)
;Bank 1
	mov	option_reg,#01111111b	;RB入力プルアップ設定
	mov	trisa,#00000000b	;RAはすべて出力ピンに設定
;	mov	trisb,#11111111b	;RBはすべて入力ピンに設定
;	mov	osccon,#01010000b	;内蔵オシレーター周波数を2MHzに設定
	mov	adcon1,#00000110b	;すべてデジタルピンに設定

	clrb	rp0			;ページ変更(Bank 0へ戻す)
;Bank 0



;↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ;
;***[ メインループ ]********************;

;ギヤポジションチェックの繰り返し

rGEAR_0
	xor	ra,#00001000b		;LED点滅

	cjne	rb,#11111110b,rGEAR_1	;ﾆｭｰﾄﾗﾙか?
	mov	ra,#00000000b		;

rGEAR_1
	cjne	rb,#11111101b,rGEAR_2	;1速か?
	mov	ra,#00000001b		;

rGEAR_2
	cjne	rb,#11111011b,rGEAR_3	;2速か?
	mov	ra,#00000010b		;

rGEAR_3
	cjne	rb,#11110111b,rGEAR_4	;3速か?
	mov	ra,#00000011b		;

rGEAR_4
	cjne	rb,#11101111b,rGEAR_5	;4速か?
	mov	ra,#00000100b		;

rGEAR_5
	cjne	rb,#11011111b,rGEAR_6	;5速か?
	mov	ra,#00000101b		;

rGEAR_6
	cjne	rb,#10111111b,rGEAR_0	;6速か?
	mov	ra,#00000110b		;

	jmp	rGEAR_0			;


;***[ メインループここまで ]************;
;↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ;



;-------PIC初期状態確認-----------------;(▲:変更必要)
;Bank 0
;	tmr0		xxxxxxxx	;　タイマー0の状態
;	status		00011xxx	;　Bankセレクト設定､各旗の状態
;	porta		xxx00000	;▲RAピン出力状態(xは不定)
;	portb		xxxxxxxx	;▲RBピン出力状態(xは不定)
;	intcon		0000000x	;▲割り込み他､設定
;	pir1		-0--0000	;　旗状態(A/D､タイマー､
;	pir2		---0----	;　EEメモリー､他)
;	tmr1l		xxxxxxxx	;★タイマー1下位8bitの状態
;	tmr1h		xxxxxxxx	;★タイマー1上位8bitの状態
;	t1con		--000000	;▲タイマー1コントロール関係設定
;	tmr2		00000000	;★タイマー2の状態
;	t2con		-0000000	;▲タイマー2コントロール関係設定
;	sspbuf		xxxxxxxx	;　装置内通信SPI通信機能
;	sspcon		00000000	;　
;	ccpr1l		xxxxxxxx	;　
;	ccpr1h		xxxxxxxx	;　
;	ccp1con		--000000	;▲キャプチャ/コンペア/PWM
;	adresh		xxxxxxxx	;　A/D変換値9､10bit？
;	adcon0		000000-0	;　A/Dコントロール関係設定
;Bank 1
;	option_reg	11111111	;　プルアップ､プリスケーラー比率他､設定
;	trisa		11111111	;▲RAピンI/O制御設定(1は入力)
;	trisb		11111111	;▲RBピンI/O制御設定(1は入力)
;	pie1		-0--0000	;▲A/D､CCP､タイマー､EEメモリーの
;	pie2		---0----	;　割り込み使用するしない設定
;	pcon		------qq	;　パワーオン､低電圧リセットの？
;	osccon		-000-0--	;▲内部RCオシレーター周波数設定
;	osctune		--000000	;▲内蔵RCオシレーター微調整
;	pr2		11111111	;▲
;	sspadd		00000000	;　
;	sspstat		00000000	;　
;	adresl		xxxxxxxx	;　A/D変換値0～8bit
;	adcon1		00--0000	;▲A/Dピン設定
;Bank 2
;	eedata		xxxxxxxx	;　EEメモリーの状態 Lo？
;	eeadr		xxxxxxxx	;　EEメモリーのアドレス位置 Lo
;	eedath		--xxxxxx	;　EEメモリーの状態 Hi？
;	eeadrh		-----xxx	;　EEメモリーのアドレス位置 Hi
;Bank 3
;	eecon1		x--xx000	;　EEメモリー関係設定
;	eecon2		--------	;　EEメモリー関係設定？



