;Aメーター(距離･ガソリン残量･スロットル開度)	bitメカ工房	2017-07-15(土)
;
;メーターVer2を流用使用する｡
;　LCD→VFDに少し変更程度で､あとはほとんど変更なし｡
;
;[試走行後修正]
;・トリップCが早く進む時がある｡メーターVer2と同じ症状だ｡
;　　100mチップ通信の待ち調整時間を少し増やしてみる｡
;・日光があたると表示が見え難いのでVFD明度を200%にしてみる｡
;
;[プログラム概要]
;・表示はLCDにて4ビットモード仕様とする｡
;・走行距離表示させる｡数値はEEPROMに記憶する｡
;※距離データーは1桁ごとに管理し､LCD表示用の｢48｣を加算した値で扱う｡
;△A/Dにより､ガソリン残量を表示する｡		【後日】
;・A/Dにより､スロットル開度を表示する｡
;・割込は使用しない｡(LCD誤表示防止)
;・TMR1を使用する｡( )
;---------------------------------------;
;	  1234567890123456
;　ｶﾞｿﾘﾝ残量[L] ｽﾛｯﾄﾙ開度[%] 総走行距離[km]
;	┌────────┐
;	│10.5 100 53608.0│
;	│999.1 111.1 00.0│
;	└────────┘
;　距離 A[km] 距離 B[km] 距離 C[km]
;---------------------------------------;
;
;(参考)
;・タイマー1のプリスケーラを最長【 8 】にした場合のオーバーフロータイム
;　4Hz動作として､1/4000000x4x256x256x8=0.524288秒 (8はプリスケーラ値)
;　それを利用してLCDの再表示タイミングを計る｡
;
;・100m専用PICからの100m信号間隔は､最短でも2秒以上ある｡(180km/hの速度として)
;
;・EEPROMへの書込は1桁10ms程度かかるので､たとえば29999.9kmから30000.0kmになる
;　場合､6桁を書き換えるので60msかかる｡最大17桁連続書込の場合､0.17秒かかると
;　考えておく｡
;
;[PIC選定仕様他]
; ･PIC16F690-I/F使用｡(秋月電子通商で210円/個)
; ･オシレーターは内蔵の4MHzを微調整使用する｡
;　(1命令は1/4194304*4=0.000000954秒)
; ･MCLRは外配線を簡略するため内部接続モードとする｡
;
;			     ┌─┰─┐
;	5.0V		 Vdd ┥      ┝ Vcc	GND
;	距離Aﾘｾｯﾄ	 RA5 ┥	     ┝*RA0	ｶﾞｿﾘﾝ残量
;	距離Bﾘｾｯﾄ	 RA4*┥	     ┝*RA1	基準電圧
;	距離Cﾘｾｯﾄ	 RA3 ┥	     ┝*RA2	ｽﾛｯﾄﾙ開度
;	LCD_DB5		 RC5 ┥PIC   ┝*RC0	ｶﾞｿﾘﾝ残量A/D用容量ｺﾝﾃﾞﾝｻｰSW
;	LCD_DB4		 RC4 ┥16F690┝*RC1	LCD_RS
;	LCD_E		 RC3*┥	     ┝*RC2	LCD_R/W
;	LCD_DB6		 RC6*┥	     ┝*RB4	100m通信 B
;	LCD_DB7		 RC7*┥	     ┝*RB5	100m通信 A
;	100m通信 C	 RB7 ┥	     ┝ RB6	100m通信 総
;			     └───┘
;			*…A/D設定可能ﾋﾟﾝ
;
;[プログラムの流れ概要]
;
;　電源ON
;	↓
;　EEPROMを読み出して通常メモリーへコピーする x4個
;	↓
;	↓←←←←←←←←←←←←←←←┬←←←┐
;	↓				↑	↑
;　総100mチップからの信号ONか？→YES	↑	↑
;	↓NO				↑	↑
;　A100mチップからの信号ONか？→YES	↑	↑
;	↓NO				↑	↑
;　B100mチップからの信号ONか？→YES	↑	↑
;	↓NO				↑	↑
;　C100mチップからの信号ONか？→YES	↑	↑
;	↓NO				↑	↑
;　リセット信号ONか？ x4個 →YES	↑	↑
;	↓NO				↑	↑
;　0.5秒間隔タイマーONか？→NO→→→→→┘	↑
;	↓YES					↑
;	↓					↑
;　A/D変換					↑
;	↓					│
;　LCD表示→→→→→→→→→→→→→→→→→→→┘
;
;・リセットボタンが押しっぱなし状態になるとEEPROM寿命が早まるかも?!
;　　→離す監視をする｡
;
;[凡例] (自分で分かりやすいように目印を付ける)
; m???:メモリー  r???:ラベル  s???:サブルーチン  v???:変数  ★:調整箇所など
;
;======= PICｺﾝﾌｨｷﾞｭﾚｰｼｮﾝ設定 ===========;(CVASM16アセンブラ用記述)

	include	'16f690.inc'

	fuses	_fcmen_off		;フェイルセーフモニター→無効
	fuses	_ieso_off		;内部/外部スイッチオーバーモード？
	fuses	_bor_on			;低電圧リセット→有効
	fuses	_cpd_off		;eepromのコードプロテクト→無効
	fuses	_cp_off			;コードプロテクト→無効
	fuses	_mclre_off		;MCLR端子(リセット)→設定しない
	fuses	_pwrte_on		;電源投入72ms間リセット→有効
	fuses	_wdt_off		;ウォッチドックタイマー→無効
	fuses	_intrc_osc_noclkout	;オシレーター設定→内蔵RC

	id	'0302'			;Ver3.02

LCD_E		=	rc.3		;LCD表示信号用
LCD_RW		=	rc.2		;LCD表示信号用
LCD_RS		=	rc.1		;LCD表示信号用

;======= プログラムメモリー割当 ========;(メモリーは20hから)

mFREE_A		=	20h		;汎用カウンター(LCD初期)
mFREE_B		=	21h		;汎用カウンター(LCD初期)

mLCD_44		=	22h		;LCDデーター分割送信用

mTOTAL0		=	23h		;100m
mTOTAL1		=	24h		;1km
mTOTAL2		=	25h		;10km
mTOTAL3		=	26h		;100km
mTOTAL4		=	27h		;1,000km
mTOTAL5		=	28h		;10,000km

mTRIP_A0	=	29h		;100m
mTRIP_A1	=	2Ah		;1km
mTRIP_A2	=	2Bh		;10km
mTRIP_A3	=	2Ch		;100km

mTRIP_B0	=	2Dh		;100m
mTRIP_B1	=	2Eh		;1km
mTRIP_B2	=	2Fh		;10km
mTRIP_B3	=	30h		;100km

mTRIP_C0	=	31h		;100m
mTRIP_C1	=	32h		;1km
mTRIP_C2	=	33h		;10km

mAD_GAS1	=	34h		;ガソリン残量
mAD_GAS2	=	35h		;ガソリン残量

mGAS_1		=	36h		;ガソリン残量0.5L単位
mGAS_2		=	37h		;ガソリン残量1L単位
mGAS_3		=	38h		;ガソリン残量10L単位
mTHR_1		=	39h		;スロットル開度1の位
mTHR_2		=	3Ah		;スロットル開度10の位
mTHR_3		=	3Bh		;スロットル開度100の位

mRESET		=	3Ch		;リセットボタン押しっぱなし判定用

mAD_TEST	=	3Dh		;ガソリン無変換表示テスト用

mBINA08		=	3Eh		;BCD計算用
mBINAXX		=	3Fh		;　　〃
mSHOW08		=	40h		;　　〃
mBCD_1		=	41h		;B→Dの1桁目(一の位)
mBCD_2		=	42h		;B→Dの2桁目(十の位)
mBCD_3		=	43h		;B→Dの3桁目(百の位､表示せず)

mAD_THR		=	44h		;


;---EEPROM値強制設定--------------------;(PIC書込時のみ)

;加算無	 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
;+48	48,49,50,51,52,53,54,55,56,57

	eeorg	0			;
;	eedata	1,2,3,4,5,6		;65432.1km(+48無)
	eedata	48,56,48,54,51,53	;★53608.0km(+48 LCD)

	eeorg	10			;
	eedata	49,49,49,49		;★111.1km(+48 LCD)

	eeorg	20			;
	eedata	57,57,57,57		;★999.9km(+48 LCD)


;=======プログラム初期設定==============;
;Bank 0
	clr	ra			;
	clr	rb			;
	clr	rc			;

	mov	intcon,#00000000b	;割り込み設定
;	初期状態	0000 000x
	mov	t1con,#10110001b	;
;	初期状態	0000 0000
					;bit7…ゲート正論理
					;bit6…ゲートアクティブの？
					;bit5～4…プリスケールレート【8】
					;bit3…0 タイマー1専用オシレーター
					;bit2…0 外部クロック同期
					;bit1…0 タイマー1クロックソース選択
					;bit0…1 タイマー1オン

	mov	adcon0,#01001001b	;A/D設定
;	初期状態	0000 0000
					;bit7…0 左詰
					;bit6…1 基準電圧VREFﾋﾟﾝ使用
					;bit5～2… 0010 A/Dﾋﾟﾝ選択 AN2
					;bit1…0 変換開始(GO/DONE)
					;bit0…1 A/D使用

;Bank 1
	setb	rp0			;ページ変更(Bank 1へ)
	mov	option_reg,#10000111b	;※ﾌﾟﾙｱｯﾌﾟは100mﾁｯﾌﾟで設定
;	初期状態	1111 1111
					;bit7…1 RA及びRBプルアップ【無】
					;bit6…割り込みエッジ
					;bit5…0 タイマー0は内蔵クロック使用
					;bit4…タイマー0エッジ
					;bit3…プリスケーラはタイマー0へ割当
					;bit2～0…プリスケールレート【256】

;	mov	trisa,#00011111b	;RAの入出力ピン設定
;	初期状態	--11 1111
;	mov	trisb,#11110000b	;RBの入出力ピン設定
;	初期状態	1111 ----
	mov	trisc,#00000001b	;RCの入出力ピン設定
;	初期状態	1111 1111
	mov	osccon,#01100101b	;内蔵オシレーター周波数を4MHzに設定
;	初期状態	-110 q111
;	mov	adcon1,#00000000b	;A/D変換時間設定
;	初期状態	-000 ----
	clrb	rp0			;ページ変更(Bank 0へ戻す)
;Bank 2
	setb	rp1			;ページ変更(Bank 2へ)
	mov	ansel,#00000111b	;デシタルピン設定
;	初期状態	1111 1111
	mov	anselh,#00000000b	;
;	初期状態	---- 1111
;Bank 3
	setb	rp0			;ページ変更(Bank 3へ)
	mov	eecon1,#00000000b	;EEPROM設定
;	初期状態	x--- x000

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


;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL;
;VFD初期設定
	clr	mFREE_A			;
	djnz	mFREE_A,$		;☆VFDは 0.0001 秒待てばOK

	mov	rc,#00101000b		;★4ビットモード､E
	clrb	LCD_E			;これで4ビットモードになる
;↓4
	mov	mLCD_44,#00000000b	;★VFD明度調整
	call	sLCD_RE			;00…200% 01…150% 10…100% 11…50%

	mov	mLCD_44,#00001100b	;表示オン
;	mov	mLCD_44,#00001000b	;表示オフ
	call	sLCD_E_			;
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL;


;電源ON時のEEPROM読み出し距離表示
;EEPROMを読み出して通常メモリーへコピーする｡
;走行距離Cについてはゼロリセットする｡

;総走行距離
;--------------
;100m
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#0		;アドレスセット
	call	sEE_LOAD		;
;Bank 0
	mov	mTOTAL0,w		;
;--------------
;1km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#1		;アドレスセット
	call	sEE_LOAD		;
	mov	mTOTAL1,w		;
;--------------
;10km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#2		;アドレスセット
	call	sEE_LOAD		;
	mov	mTOTAL2,w		;
;--------------
;100km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#3		;アドレスセット
	call	sEE_LOAD		;
	mov	mTOTAL3,w		;
;--------------
;1,000km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#4		;アドレスセット
	call	sEE_LOAD		;
	mov	mTOTAL4,w		;
;--------------
;10,000km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#5		;アドレスセット
	call	sEE_LOAD		;
	mov	mTOTAL5,w		;
;---------------------------------------;

;走行距離A
;--------------
;100m
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#10		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_A0,w		;
;--------------
;1km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#11		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_A1,w		;
;--------------
;10km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#12		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_A2,w		;
;--------------
;100km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#13		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_A3,w		;

;---------------------------------------;

;走行距離B
;--------------
;100m
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#20		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_B0,w		;
;--------------
;1km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#21		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_B1,w		;
;--------------
;10km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#22		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_B2,w		;
;--------------
;100km
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#23		;アドレスセット
	call	sEE_LOAD		;
	mov	mTRIP_B3,w		;
;---------------------------------------;

;走行距離C
;--------------
;100m
	mov	mTRIP_C0,#48		;
;--------------
;1km
	mov	mTRIP_C1,#48		;
;--------------
;10km
	mov	mTRIP_C2,#48		;
;---------------------------------------;


	mov	mGAS_3,#'-'		;主電源ON直後の仮表示
	mov	mGAS_2,#'-'		;　〃
	mov	mGAS_1,#'-'		;　〃
	mov	mTHR_3,#'-'		;　〃
	mov	mTHR_2,#'-'		;　〃
	mov	mTHR_1,#'-'		;　〃

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
;電源ONで､出来るだけ早く表示する｡
	call	sLCD_GO			;
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;


	clr	mAD_GAS1		;
	clr	mAD_GAS2		;

	clr	mRESET			;

	clr	tmr1l			;タイマー1 下位8bit
	clr	tmr1h			;タイマー1 上位8bit
	clrb	tmr1if			;約0.5秒

	jnb	tmr1if,$		;100mPIC準備待ち
	clrb	tmr1if			;約0.5秒





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

;100mPIC信号チェック
rT_CHK
	jb	rb.6,rT_COUNT		;総距離100m信号チェック
rA_CHK
	jb	rb.5,rA_COUNT		;Aトリップ100m信号チェック
rB_CHK
	jb	rb.4,rB_COUNT		;Bトリップ100m信号チェック
rC_CHK
	jb	rb.7,rC_COUNT		;Cトリップ100m信号チェック

;リセット信号チェック
rAR_CHK
	jnb	ra.3,rA_RES		;Aリセットボタンチェック
	clrb	mRESET.0		;押しっぱなし監視用
rBR_CHK
	jnb	ra.4,rB_RES		;Bリセットボタンチェック
	clrb	mRESET.1		;押しっぱなし監視用
rCR_CHK
	jnb	ra.5,rC_RES		;Cリセットボタンチェック

;LCD表示更新
rTMR_CHK
	jnb	tmr1if,rREPEAT		;約0.5秒かチェック
	clrb	tmr1if			;タイマー1旗クリア

	call	sAD_S			;スロットル開度とガソリン残量チェック

rLCD_GO
	call	sLCD_GO			;LCD表示

	jmp	rREPEAT			;


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





;---------------------------------------
;*** 総距離カウントアップ ***
;---------------------------------------
rT_COUNT
	clrb	rb.6			;100mPIC通信切替
	setb	rp0			;ページ変更(Bank 1へ)
	clrb	trisb.6			;出力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

;100mの位
	cje	mTOTAL0,#57,rTO_Z	;現在｢9｣か？(9+48=57)
	inc	mTOTAL0			;+1
	jmp	rEE_00			;
rTO_Z
	mov	mTOTAL0,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_00
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#0		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTOTAL0		;
	call	mEE_SAVE		;

	cjne	mTOTAL0,#48,rT_END	;現在｢0｣か？(0+48=48)
;--------------
;1kmの位
	cje	mTOTAL1,#57,rT1_Z	;現在｢9｣か？(9+48=57)
	inc	mTOTAL1			;+1
	jmp	rEE_01			;
rT1_Z
	mov	mTOTAL1,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_01
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#1		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTOTAL1		;
	call	mEE_SAVE		;

	cjne	mTOTAL1,#48,rT_END	;現在｢0｣か？(0+48=48)
;--------------
;10kmの位
	cje	mTOTAL2,#57,rT2_Z	;現在｢9｣か？(9+48=57)
	inc	mTOTAL2			;+1
	jmp	rEE_02			;
rT2_Z
	mov	mTOTAL2,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_02
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#2		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTOTAL2		;
	call	mEE_SAVE		;

	cjne	mTOTAL2,#48,rT_END	;現在｢0｣か？(0+48=48)
;--------------
;100kmの位
	cje	mTOTAL3,#57,rT3_Z	;現在｢9｣か？(9+48=57)
	inc	mTOTAL3			;+1
	jmp	rEE_03			;
rT3_Z
	mov	mTOTAL3,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_03
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#3		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTOTAL3		;
	call	mEE_SAVE		;

	cjne	mTOTAL3,#48,rT_END	;現在｢0｣か？(0+48=48)
;--------------
;1,000kmの位
	cje	mTOTAL4,#57,rT4_Z	;現在｢9｣か？(9+48=57)
	inc	mTOTAL4			;+1
	jmp	rEE_04			;
rT4_Z
	mov	mTOTAL4,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_04
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#4		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTOTAL4		;
	call	mEE_SAVE		;

	cjne	mTOTAL4,#48,rT_END	;現在｢0｣か？(0+48=48)
;--------------
;10,000kmの位
	cje	mTOTAL5,#57,rT5_Z	;現在｢9｣か？(9+48=57)
	inc	mTOTAL5			;+1
	jmp	rEE_05			;
rT5_Z
	mov	mTOTAL5,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_05
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#5		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTOTAL5		;
	call	mEE_SAVE		;

rT_END
	setb	rp0			;ページ変更(Bank 1へ)
	setb	trisb.6			;入力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	jmp	rA_CHK			;

;---------------------------------------
;*** A トリップカウントアップ ***
;---------------------------------------
rA_COUNT
	clrb	rb.5			;100mPIC通信切替
	setb	rp0			;ページ変更(Bank 1へ)
	clrb	trisb.5			;出力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

;100mの位
	cje	mTRIP_A0,#57,rTRA0_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_A0		;+1
	jmp	rEE_10			;
rTRA0_Z
	mov	mTRIP_A0,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_10
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#10		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A0		;
	call	mEE_SAVE		;

	cjne	mTRIP_A0,#48,rA_END	;現在｢0｣か？(0+48=48)
;--------------
;1kmの位
	cje	mTRIP_A1,#57,rTRA1_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_A1		;+1
	jmp	rEE_11			;
rTRA1_Z
	mov	mTRIP_A1,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_11
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#11		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A1		;
	call	mEE_SAVE		;

	cjne	mTRIP_A1,#48,rA_END	;現在｢0｣か？(0+48=48)
;--------------
;10kmの位
	cje	mTRIP_A2,#57,rTRA2_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_A2		;+1
	jmp	rEE_12			;
rTRA2_Z
	mov	mTRIP_A2,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_12
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#12		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A2		;
	call	mEE_SAVE		;

	cjne	mTRIP_A2,#48,rA_END	;現在｢0｣か？(0+48=48)
;--------------
;100kmの位
	cje	mTRIP_A3,#57,rTRA3_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_A3		;+1
	jmp	rEE_13			;
rTRA3_Z
	mov	mTRIP_A3,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_13
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#13		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A3		;
	call	mEE_SAVE		;

rA_END
	setb	rp0			;ページ変更(Bank 1へ)
	setb	trisb.5			;入力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	jmp	rB_CHK			;

;---------------------------------------
;*** B トリップカウントアップ ***
;---------------------------------------
rB_COUNT
	clrb	rb.4			;100mPIC通信切替
	setb	rp0			;ページ変更(Bank 1へ)
	clrb	trisb.4			;出力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)
;100mの位
	cje	mTRIP_B0,#57,rTRB0_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_B0		;+1
	jmp	rEE_20			;
rTRB0_Z
	mov	mTRIP_B0,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_20
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#20		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B0		;
	call	mEE_SAVE		;

	cjne	mTRIP_B0,#48,rB_END	;現在｢0｣か？(0+48=48)
;--------------
;1kmの位
	cje	mTRIP_B1,#57,rTRB1_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_B1		;+1
	jmp	rEE_21			;
rTRB1_Z
	mov	mTRIP_B1,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_21
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#21		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B1		;
	call	mEE_SAVE		;

	cjne	mTRIP_B1,#48,rB_END	;現在｢0｣か？(0+48=48)
;--------------
;10kmの位
	cje	mTRIP_B2,#57,rTRB2_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_B2		;+1
	jmp	rEE_22			;
rTRB2_Z
	mov	mTRIP_B2,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_22
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#22		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B2		;
	call	mEE_SAVE		;

	cjne	mTRIP_B2,#48,rB_END	;現在｢0｣か？(0+48=48)
;--------------
;100kmの位
	cje	mTRIP_B3,#57,rTRB3_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_B3		;+1
	jmp	rEE_23			;
rTRB3_Z
	mov	mTRIP_B3,#48		;｢0｣に戻す(0+48=48)

;　値をEEPROMに書き込む｡
rEE_23
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#23		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B3		;
	call	mEE_SAVE		;

rB_END
	setb	rp0			;ページ変更(Bank 1へ)
	setb	trisb.4			;入力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	jmp	rC_CHK			;

;---------------------------------------
;*** C トリップカウントアップ ***
;---------------------------------------
rC_COUNT
	clrb	rb.7			;100mPIC通信切替
	setb	rp0			;ページ変更(Bank 1へ)
	clrb	trisb.7			;出力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)
;100mの位
	cje	mTRIP_C0,#57,rTRC0_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_C0		;+1
	jmp	rC_END			;
rTRC0_Z
	mov	mTRIP_C0,#48		;｢0｣に戻す(0+48=48)
;--------------
;1kmの位
	cje	mTRIP_C1,#57,rTRC1_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_C1		;+1
	jmp	rC_END			;
rTRC1_Z
	mov	mTRIP_C1,#48		;｢0｣に戻す(0+48=48)
;--------------
;10kmの位
	cje	mTRIP_C2,#57,rTRC2_Z	;現在｢9｣か？(9+48=57)
	inc	mTRIP_C2		;+1
	jmp	rC_END			;
rTRC2_Z
	mov	mTRIP_C2,#48		;｢0｣に戻す(0+48=48)
;--------------

rC_END

	clr	mFREE_A			;
	djnz	mFREE_A,$		;WEIT(100mPIC通信として少し待つ)
	djnz	mFREE_A,$		;1/4000000x4x3(ｻｲｸﾙ)x256=0.000768
	djnz	mFREE_A,$		;0.000768x10回=約0.00768秒
	djnz	mFREE_A,$		;
	djnz	mFREE_A,$		;
	djnz	mFREE_A,$		;
	djnz	mFREE_A,$		;
	djnz	mFREE_A,$		;
	djnz	mFREE_A,$		;
	djnz	mFREE_A,$		;

	setb	rp0			;ページ変更(Bank 1へ)
	setb	trisb.7			;入力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	jmp	rAR_CHK			;

;---------------------------------------
;*** A リセット ***
;---------------------------------------
rA_RES
;-------
	jb	mRESET.0,rBR_CHK	;押しっぱなし判定

	mov	mTRIP_A0,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#10		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A0		;
	call	mEE_SAVE		;
;-------
	mov	mTRIP_A1,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#11		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A1		;
	call	mEE_SAVE		;
;-------
	mov	mTRIP_A2,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#12		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A2		;
	call	mEE_SAVE		;
;-------
	mov	mTRIP_A3,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#13		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_A3		;
	call	mEE_SAVE		;

	setb	mRESET.0		;押しっぱなし判定

	setb	rp0			;ページ変更(Bank 1へ)
	setb	trisb.7			;入力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	jmp	rBR_CHK			;Bリセットチェックへ

;---------------------------------------
;*** B リセット ***
;---------------------------------------
rB_RES
;-------
	jb	mRESET.1,rCR_CHK	;押しっぱなし判定

	mov	mTRIP_B0,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#20		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B0		;
	call	mEE_SAVE		;
;-------
	mov	mTRIP_B1,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#21		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B1		;
	call	mEE_SAVE		;
;-------
	mov	mTRIP_B2,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#22		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B2		;
	call	mEE_SAVE		;
;-------
	mov	mTRIP_B3,#48		;｢0｣設定(0+48=48)
;　値をEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
	mov	eeadr,#23		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
	mov	w,mTRIP_B3		;
	call	mEE_SAVE		;

	setb	mRESET.1		;押しっぱなし判定

	setb	rp0			;ページ変更(Bank 1へ)
	setb	trisb.7			;入力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	jmp	rCR_CHK			;Cリセットチェックへ

;---------------------------------------
;*** C リセット ***
;---------------------------------------
rC_RES
	mov	mTRIP_C0,#48		;｢0｣設定(0+48=48)
	mov	mTRIP_C1,#48		;｢0｣設定(0+48=48)
	mov	mTRIP_C2,#48		;｢0｣設定(0+48=48)

	setb	rp0			;ページ変更(Bank 1へ)
	setb	trisb.7			;入力に切替
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	jmp	rTMR_CHK		;0.5秒間隔時間チェックへ戻る





;ADADADADADADADADADADADADADADADADADADADA;
;sss A/D サブルーチン sss
;ADADADADADADADADADADADADADADADADADADADA;
sAD_S
;【スロットル開度】チェック
	setb	go_done			;A/D変換開始
	jb	go_done,$		;A/D変換終了(bit0)まで待つ
	mov	mAD_THR,adresh		;

;切換えてからA/D充電に20μs必要なので､ここで切換えておく｡
	setb	adfm			;右詰
	clrb	chs1			;AN0に切換

	call	sTHROTTL		;変換テーブルへ


;【ガソリン容量】チェック
	setb	go_done			;A/D変換開始
	jb	go_done,$		;A/D変換終了(bit0)まで待つ

;Bank 1
	setb	rp0			;ページ変更(Bank 1へ)
	mov	w,adresl		;10bit分解能の下位8bit
	clrb	rp0			;ページ変更(Bank 0へ戻す)
;Bank 0


;★テストとしてA/D値をそのまま表示する｡
;	mov	mAD_GAS1,w		;
	mov	mBINA08,w		;

	call	sBCDCAL			;BCD計算へ

	mov	mGAS_3,mBCD_3		;
	mov	mGAS_2,mBCD_2		;
	mov	mGAS_1,mBCD_1		;

	add	mGAS_3,#48		;
	add	mGAS_2,#48		;
	add	mGAS_1,#48		;


;	cjne	mAD_GAS1,mAD_GAS2,rNO_AD	;安定表示用
;	call	sGAS_TAB		;ガソリン残量変換テーブルへ
;rNO_AD
;	mov	mAD_GAS2,mAD_GAS1	;1を2にコピー


	clrb	adfm			;左詰
	setb	chs1			;AN2に切換

	ret



;SSSSSS ｽﾛｯﾄﾙ開度変換ﾃｰﾌﾞﾙ SSSSSSSSSSSSS;
sTHROTTL
	cja	mAD_THR,#25,rTHR001	;A/D値が【25】未満だったら【0】%とする
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR001
	cja	mAD_THR,#27,rTHR002	;A/D値が【27】未満だったら【1】%とする
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'1'		;
	ret
rTHR002
	cja	mAD_THR,#29,rTHR003	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'2'		;
	ret
rTHR003
	cja	mAD_THR,#32,rTHR004	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'3'		;
	ret
rTHR004
	cja	mAD_THR,#34,rTHR005	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'4'		;
	ret
rTHR005
	cja	mAD_THR,#36,rTHR006	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'5'		;
	ret
rTHR006
	cja	mAD_THR,#38,rTHR007	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'6'		;
	ret
rTHR007
	cja	mAD_THR,#41,rTHR008	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'7'		;
	ret
rTHR008
	cja	mAD_THR,#43,rTHR009	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'8'		;
	ret
rTHR009
	cja	mAD_THR,#45,rTHR010	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'9'		;
	ret
rTHR010
	cja	mAD_THR,#47,rTHR011	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR011
	cja	mAD_THR,#50,rTHR012	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'1'		;
	ret
rTHR012
	cja	mAD_THR,#52,rTHR013	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'2'		;
	ret
rTHR013
	cja	mAD_THR,#54,rTHR014	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'3'		;
	ret
rTHR014
	cja	mAD_THR,#56,rTHR015	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'4'		;
	ret
rTHR015
	cja	mAD_THR,#59,rTHR016	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'5'		;
	ret
rTHR016
	cja	mAD_THR,#61,rTHR017	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'6'		;
	ret
rTHR017
	cja	mAD_THR,#63,rTHR018	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'7'		;
	ret
rTHR018
	cja	mAD_THR,#65,rTHR019	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'8'		;
	ret
rTHR019
	cja	mAD_THR,#67,rTHR020	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'1'		;
	mov	mTHR_1,#'9'		;
	ret
rTHR020
	cja	mAD_THR,#70,rTHR021	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR021
	cja	mAD_THR,#72,rTHR022	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'1'		;
	ret
rTHR022
	cja	mAD_THR,#74,rTHR023	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'2'		;
	ret
rTHR023
	cja	mAD_THR,#76,rTHR024	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'3'		;
	ret
rTHR024
	cja	mAD_THR,#79,rTHR025	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'4'		;
	ret
rTHR025
	cja	mAD_THR,#81,rTHR026	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'5'		;
	ret
rTHR026
	cja	mAD_THR,#83,rTHR027	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'6'		;
	ret
rTHR027
	cja	mAD_THR,#85,rTHR028	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'7'		;
	ret
rTHR028
	cja	mAD_THR,#88,rTHR029	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'8'		;
	ret
rTHR029
	cja	mAD_THR,#90,rTHR030	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'2'		;
	mov	mTHR_1,#'9'		;
	ret
rTHR030
	cja	mAD_THR,#92,rTHR031	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR031
	cja	mAD_THR,#94,rTHR032	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'1'		;
	ret
rTHR032
	cja	mAD_THR,#97,rTHR033	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'2'		;
	ret
rTHR033
	cja	mAD_THR,#99,rTHR034	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'3'		;
	ret
rTHR034
	cja	mAD_THR,#101,rTHR035	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'4'		;
	ret
rTHR035
	cja	mAD_THR,#103,rTHR036	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'5'		;
	ret
rTHR036
	cja	mAD_THR,#106,rTHR037	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'6'		;
	ret
rTHR037
	cja	mAD_THR,#108,rTHR038	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'7'		;
	ret
rTHR038
	cja	mAD_THR,#110,rTHR039	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'8'		;
	ret
rTHR039
	cja	mAD_THR,#112,rTHR040	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'3'		;
	mov	mTHR_1,#'9'		;
	ret
rTHR040
	cja	mAD_THR,#115,rTHR041	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR041
	cja	mAD_THR,#117,rTHR042	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'1'		;
	ret
rTHR042
	cja	mAD_THR,#119,rTHR043	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'2'		;
	ret
rTHR043
	cja	mAD_THR,#121,rTHR044	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'3'		;
	ret
rTHR044
	cja	mAD_THR,#124,rTHR045	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'4'		;
	ret
rTHR045
	cja	mAD_THR,#126,rTHR046	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'5'		;
	ret
rTHR046
	cja	mAD_THR,#128,rTHR047	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'6'		;
	ret
rTHR047
	cja	mAD_THR,#130,rTHR048	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'7'		;
	ret
rTHR048
	cja	mAD_THR,#132,rTHR049	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'8'		;
	ret
rTHR049
	cja	mAD_THR,#135,rTHR050	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'4'		;
	mov	mTHR_1,#'9'		;
	ret
rTHR050
	cja	mAD_THR,#137,rTHR060	;50%
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'5'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR060
	cja	mAD_THR,#159,rTHR070	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'6'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR070
	cja	mAD_THR,#182,rTHR080	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'7'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR080
	cja	mAD_THR,#204,rTHR090	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'8'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR090
	cjae	mAD_THR,#227,rTHR100	;
	mov	mTHR_3,#'0'		;
	mov	mTHR_2,#'9'		;
	mov	mTHR_1,#'0'		;
	ret
rTHR100
	mov	mTHR_3,#'1'		;100%
	mov	mTHR_2,#'0'		;
	mov	mTHR_1,#'0'		;
	ret



;SSSSSS ｶﾞｿﾘﾝ容量変換ﾃｰﾌﾞﾙ SSSSSSSSSSSSS;
sGAS_TAB
	cjb	mAD_GAS1,#141,rNEXT150	;15.5L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'5'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT150
	cjb	mAD_GAS1,#137,rNEXT145	;15.0L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'5'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT145
	cjb	mAD_GAS1,#132,rNEXT140	;14.5L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'4'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT140
	cjb	mAD_GAS1,#128,rNEXT135	;14.0L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'4'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT135
	cjb	mAD_GAS1,#124,rNEXT130	;13.5L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'3'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT130
	cjb	mAD_GAS1,#120,rNEXT125	;13.0L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'3'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT125
	cjb	mAD_GAS1,#117,rNEXT120	;12.5L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'2'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT120
	cjb	mAD_GAS1,#113,rNEXT115	;12.0L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'2'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT115
	cjb	mAD_GAS1,#110,rNEXT110	;11.5L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'1'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT110
	cjb	mAD_GAS1,#107,rNEXT105	;11.0L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'1'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT105
	cjb	mAD_GAS1,#103,rNEXT100	;10.5L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'0'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT100
	cjb	mAD_GAS1,#100,rNEXT095	;10.0L
	mov	mGAS_3,#'1'		;
	mov	mGAS_2,#'0'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT095
	cjb	mAD_GAS1,#97,rNEXT090	;9.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'9'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT090
	cjb	mAD_GAS1,#94,rNEXT085	;9.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'9'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT085
	cjb	mAD_GAS1,#91,rNEXT080	;8.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'8'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT080
	cjb	mAD_GAS1,#88,rNEXT075	;8.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'8'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT075
	cjb	mAD_GAS1,#85,rNEXT070	;7.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'7'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT070
	cjb	mAD_GAS1,#82,rNEXT065	;7.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'7'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT065
	cjb	mAD_GAS1,#79,rNEXT060	;6.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'6'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT060
	cjb	mAD_GAS1,#77,rNEXT055	;6.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'6'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT055
	cjb	mAD_GAS1,#75,rNEXT050	;5.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'5'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT050
	cjb	mAD_GAS1,#71,rNEXT045	;5.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'5'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT045
	cjb	mAD_GAS1,#68,rNEXT040	;4.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'4'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT040
	cjb	mAD_GAS1,#66,rNEXT035	;4.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'4'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT035
	cjb	mAD_GAS1,#63,rNEXT030	;3.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'3'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT030
	cjb	mAD_GAS1,#60,rNEXT025	;3.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'3'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT025
	cjb	mAD_GAS1,#58,rNEXT020	;2.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'2'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT020
	cjb	mAD_GAS1,#54,rNEXT015	;2.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'2'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT015
	cjb	mAD_GAS1,#50,rNEXT010	;1.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'1'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT010
	cjb	mAD_GAS1,#49,rNEXT005	;1.0L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'1'		;
	mov	mGAS_1,#'0'		;
	ret
rNEXT005
	cjb	mAD_GAS1,#21,rNEXT000	;0.5L
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'0'		;
	mov	mGAS_1,#'5'		;
	ret
rNEXT000
	mov	mGAS_3,#'0'		;
	mov	mGAS_2,#'0'		;
	mov	mGAS_1,#'0'		;
	ret



;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL;
;sss LCDサブルーチン sss
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL;
sLCD_GO

;(LCD自作キャラクター登録…無し)
;[LCD文字位置] (16進)
;　   |01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|
;　---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
;　01 |80|81|82|83|84|85|86|87|88|89|8A|8B|8C|8D|8E|8F|
;　---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
;　02 |C0|C1|C2|C3|C4|C5|C6|C7|C8|C9|CA|CB|CC|CD|CE|CF|
;　---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
;LCDキャラクターコード送信(表示)
	mov	mLCD_44,#80h		;1行目1桁目
	call	sLCD_E_			;

	mov	mLCD_44,mGAS_3		;1
	call	sLCD_RE			;
	mov	mLCD_44,mGAS_2		;2
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;3
	call	sLCD_RE			;
	mov	mLCD_44,mGAS_1		;4
	call	sLCD_RE			;
	mov	mLCD_44,#' '		;5
	call	sLCD_RE			;
	mov	mLCD_44,mTHR_3		;6
	call	sLCD_RE			;
	mov	mLCD_44,mTHR_2		;7
	call	sLCD_RE			;
	mov	mLCD_44,mTHR_1		;8
	call	sLCD_RE			;
	mov	mLCD_44,#' '		;9
	call	sLCD_RE			;
	mov	mLCD_44,mTOTAL5		;10
	call	sLCD_RE			;
	mov	mLCD_44,mTOTAL4		;11
	call	sLCD_RE			;
	mov	mLCD_44,mTOTAL3		;12
	call	sLCD_RE			;
	mov	mLCD_44,mTOTAL2		;13
	call	sLCD_RE			;
	mov	mLCD_44,mTOTAL1		;14
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;15
	call	sLCD_RE			;
	mov	mLCD_44,mTOTAL0		;16
	call	sLCD_RE			;

	mov	mLCD_44,#0C0h		;2行目1桁目
	call	sLCD_E_			;

	mov	mLCD_44,mTRIP_A3	;1
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_A2	;2
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_A1	;3
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;4
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_A0	;5
	call	sLCD_RE			;
	mov	mLCD_44,#' '		;6
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B3	;7
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B2	;8
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B1	;9
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;10
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B0	;11
	call	sLCD_RE			;
	mov	mLCD_44,#' '		;12
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_C2	;13
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_C1	;14
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;15
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_C0	;16
	call	sLCD_RE			;

	ret				;


;sssssss LCD E 送信関係 ssssssssssssssss;
sLCD_E_
	call	sBUSY7			;LCD受付OKになるまで待つ

	setb	LCD_E			;

	and	rc,#00001111b		;RC4～7クリア

	snb	mLCD_44.7		;
	setb	rc.7			;
	snb	mLCD_44.6		;
	setb	rc.6			;
	snb	mLCD_44.5		;
	setb	rc.5			;
	snb	mLCD_44.4		;
	setb	rc.4			;

	clrb	LCD_E			;


	setb	LCD_E			;

	and	rc,#00001111b		;RC4～7クリア

	snb	mLCD_44.3		;
	setb	rc.7			;
	snb	mLCD_44.2		;
	setb	rc.6			;
	snb	mLCD_44.1		;
	setb	rc.5			;
	snb	mLCD_44.0		;
	setb	rc.4			;

	clrb	LCD_E			;

	ret				;リターン(サブルーチン終わり)

;sssssss LCDキャラクター表示 sssssssssss;
sLCD_RE
	call	sBUSY7			;LCD受付OKになるまで待つ

	setb	LCD_RS			;
	setb	LCD_E			;

	and	rc,#00001111b		;RC4～7クリア

	snb	mLCD_44.7		;
	setb	rc.7			;
	snb	mLCD_44.6		;
	setb	rc.6			;
	snb	mLCD_44.5		;
	setb	rc.5			;
	snb	mLCD_44.4		;
	setb	rc.4			;

	clrb	LCD_E			;
	clrb	LCD_RS			;


	setb	LCD_RS			;
	setb	LCD_E			;

	and	rc,#00001111b		;RC4～7クリア

	snb	mLCD_44.3		;
	setb	rc.7			;
	snb	mLCD_44.2		;
	setb	rc.6			;
	snb	mLCD_44.1		;
	setb	rc.5			;
	snb	mLCD_44.0		;
	setb	rc.4			;

	clrb	LCD_E			;
	clrb	LCD_RS			;

	ret				;リターン(サブルーチン終わり)

;sssssss LCDビジーチェック sssssssssssss;

sBUSY7
	setb	rp0			;ページ変更(Bank 1へ)
;Bank 1
	setb	trisc.7			;RC7を入力に変更
	clrb	rp0			;ページ変更(Bank 0へ戻す)

rL_BUSY
;	clrb	mFREE_C.7		;

	setb	LCD_RW			;
	setb	LCD_E			;

;	snb	rc.7			;
;	setb	mFREE_C.7		;

	jb	rc.7,$			;ビジー信号が消えるまでここで待つ

	clrb	LCD_E			;4bitの下位半分を受信したことにする
	setb	LCD_E			;

	clrb	LCD_E			;
	clrb	LCD_RW			;

;	jb	mFREE_C.7,rL_BUSY	;ビジー信号があれば繰り返す

	setb	rp0			;ページ変更(Bank 1へ)
;Bank 1
	clrb	trisc.7			;RC7を出力に変更
	clrb	rp0			;ページ変更(Bank 0へ戻す)

	ret				;リターン(サブルーチン終わり)


;sssssss EEPROM読み出し ssssssssssssssss;
sEE_LOAD
	setb	rp0			;ページ変更(Bank 3へ)
;Bank 3
	setb	rd			;Read Control bit
	clrb	rp0			;ページ変更(Bank 2へ)
;Bank 2
	mov	w,eedata		;
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	ret				;


;sssssss EEPROM書き込み ssssssssssssssss;
mEE_SAVE
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eedata,w		;
	setb	rp0			;ページ変更(Bank 3へ)
;Bank 3
	clrb	eepgd			;★Program/Data EEPROM Select bit
	setb	wren			;EEPROM Write Enable bit
	mov	eecon2,#55h		;
	mov	eecon2,#0AAh		;
	setb	wr			;Write Control bit
	jb	wr,$			;書き込み終了をここで待つ
	clrb	wren			;EEPROM Write Enable bit
	clrb	rp0			;ページ変更(Bank 2へ)
;Bank 2
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	ret				;


;---------------------------------------;
;sss その他サブルーチン sss
;---------------------------------------;

;sssssss BCD割り算(8bit÷10) ssssssssss;
sBCDCAL
	call	sBCDZAN			;1桁目
	mov	mBCD_1,mBINAXX		;余りを入れる

	mov	mBINA08,mSHOW08		;商を入れる
	call	sBCDZAN			;2桁目
	mov	mBCD_2,mBINAXX		;余りを入れる
	mov	mBCD_3,mSHOW08		;商を入れる

;結果は1桁目→mBCD_1､2桁目→mBCD_2､3桁目→mBCD_3

	ret				;リターン(サブルーチン終わり)


;サブルーチンのサブルーチン
;---桁移動比較---
sBCDZAN
	mov	mFREE_A,#8		;ループ数設定
	clr	mBINAXX			;
rBCD_0	rl	mBINA08			;
	rl	mBINAXX			;

	jc	rBCD_2			;比較8ビット超判定
	cjae	mBINAXX,#10,rBCD_1	;勝ち負け判定
	clrb	c			;キャリー0
	jmp	rWARI_4			;
rBCD_1	sub	mBINAXX,#10		;引き算(余りはここに残る)
	jmp	rBCD_3			;
rBCD_2	clr	mFREE_B			;0にする
	sub	mFREE_B,#10		;
	add	mBINAXX,mFREE_B		;
rBCD_3	setb	c			;キャリー1

;---計算結果入れ---
rWARI_4	rl	mSHOW08			;計算結果を入れる
	djnz	mFREE_A,rBCD_0		;ループ継続判定
	ret

