;オートバイ時計他表示 Ver 1.0	bitメカ工房		2009-05-12(火)
;
;[プログラム概要]
;
;・LCDを4ビットモードで表示させる｡
;・走行距離表示させる｡数値はEEPROMに記憶する｡
;・A/Dにより､バッテリー電圧を表示する｡
;・A/Dにより､ガソリン残量を表示する｡
;・油温[℃]表示…後日とする｡
;
;
;　電圧[V]　油温[℃]　総走行距離[km]
;
;	  1234567890123456
;	┌────────┐
;	│12.3 000 19999.9│
;	│12.5 111.1 222.2│
;	└────────┘
;
;　ガソリン[L]　距離 A[km]　距離 B[km]
;
;
;
;
; ･オシレーターは1.308MHzの水晶発信器を使用する｡(スピードメーターと共用)
;   (1命令≒0.000003秒(1/1308000*4))
;
;
;(参考)
; ･タイマー0のプリスケーラを【 256 】にした場合のオーバーフロータイム
;　　1/1308000x4x256x256=約0.2秒
;
; ･タイマー1のプリスケーラを最長【 8 】にした場合のオーバーフロータイム
;　　1/1308000x4x256x256x8=約1.6秒 (8はプリスケーラ値)
;
;
;[PIC選定仕様他]
; ･PIC16F88-I/P使用｡(秋月電子通商で230円/個)
; ･オシレーターは1.308MHzの水晶発信器を使用する｡
;   (1命令≒0.000003秒(1/1308000*4))
; ･MCLRは外配線を簡略するため内部接続モードとする｡
;
;			     ┌─┰─┐
;	電圧		 RA2 ┥	     ┝ RA1	ガソリン
;	(未使用)	 RA3 ┥	     ┝ RA0	油温
;	押しボタンB	 RA4 ┥	     ┝(#16)	水晶
;	押しボタンA	 RA5 ┥PIC   ┝(#15)	(未使用)
;			 Vss ┥ 16F88┝ Vdd	5.0V
;	センサー	 RB0 ┥	     ┝ RB7	LCD_DB7
;	LCD_E		 RB1 ┥	     ┝ RB6	LCD_DB6
;	LCD_R/W		 RB2 ┥	     ┝ RB5	LCD_DB5
;	LCD_RS		 RB3 ┥	     ┝ RB4	LCD_DB4
;			     └───┘
;
;[プログラムの流れ概要]
;
;・タイマー0(約0.2秒)x5回で約1秒間隔でLCDを再表示する｡
;
;
;
;
;-------PIC初期状態確認-----------------;(△:変更必要)
;Bank 0
;	tmr0		xxxxxxxx	;　タイマー0の状態
;	status		00011xxx	;　Bankセレクト設定､各旗の状態
;	porta		xxx00000	;△RAピン出力状態(xは不定)
;	portb		00xxxxxx	;△RBピン出力状態(xは不定)
;	intcon		0000000x	;　割り込み他､設定
;	pir1		-0000000	;　旗状態(A/D､タイマー､
;	pir2		00-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	;　
;	txsta		0000-010	;　
;	spbrg		00000000	;　
;	ansel		-1111111	;△アナログorデジタルI/O設定
;	cmcon		00000111	;　
;	cvrcon		000-0000	;　
;	adresl		xxxxxxxx	;　A/D変換値0～8bit
;	adcon1		00--0000	;　A/Dピン設定
;Bank 2
;	wdtcon		---01000	;　ウォッチドックタイマー分周
;	eedata		xxxxxxxx	;　EEメモリーの状態 Lo？
;	eeadr		xxxxxxxx	;　EEメモリーのアドレス位置 Lo
;	eedath		--xxxxxx	;　EEメモリーの状態 Hi？
;	eeadrh		-----xxx	;　EEメモリーのアドレス位置 Hi
;Bank 3
;	eecon1		x--xx000	;　EEメモリー関係設定
;	eecon2		--------	;　EEメモリー関係設定？
;
;[凡例] (自分で分かりやすいように目印を付ける)
; m???:メモリー  r???:ラベル  s???:サブルーチン  v???:変数  ★:調整箇所など
;
;-------PIC基本設定---------------------;
; CVASM16アセンブラ用記述

	include	'16f88.inc'

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

;	fuses	_ieso_off		;内部/外部スイッチオーバーモード？
;	fuses	_fcmen_off		;フェイルセーフクロックモニター？

	id	'0010'			;Ver1.0



LCD_E		=	rb.1		;LCD用
LCD_RW		=	rb.2		;LCD用
LCD_RS		=	rb.3		;LCD用


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

mFREE_A		=	20h		;汎用カウンター(LCD初期と割り算)
mFREE_B		=	21h		;汎用カウンター(LCD初期と割り算)
mLCD_44		=	22h		;LCDデーター分割送信用

mLCD_T01	=	23h		;電圧
mLCD_T02	=	24h		;
mLCD_T04	=	25h		;
mOIL_1		=	26h		;油温
mOIL_2		=	27h		;
mOIL_3		=	28h		;
mLCD_B01	=	29h		;ガソリン
mLCD_B02	=	2Ah		;
mLCD_B04	=	2Bh		;

mAD_GAS		=	2Ch		;10bit A/D変換ガソリン用

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

m100m		=	33h		;距離100m単位チェックbit用

mCOUNT_L	=	34h		;距離センサーカウント
m100C		=	35h		;

mTOTAL0		=	36h		;
mTOTAL1		=	37h		;
mTOTAL2		=	38h		;
mTOTAL3		=	39h		;
mTOTAL4		=	3Ah		;
mTOTAL5		=	3Bh		;
mTOTAL6		=	3Ch		;

mC_A_L		=	3Dh		;距離トリップA下位8bit
mC_A_H		=	3Eh		;距離トリップA上位8bit

mTRIP_A0	=	3Fh		;
mTRIP_A1	=	40h		;
mTRIP_A2	=	41h		;
mTRIP_A3	=	42h		;

mC_B_L		=	43h		;距離トリップA下位8bit
mC_B_H		=	44h		;距離トリップA上位8bit

mTRIP_B0	=	45h		;
mTRIP_B1	=	46h		;
mTRIP_B2	=	47h		;
mTRIP_B3	=	48h		;



;EEPROM値強制設定-----------------------;

	eeorg	0			;
	eedata	2,0,3,6,9,1		;★19630.2km★


	eeorg	10			;◆テスト
	eedata	0,0,0,0			;★000.0km★

	eeorg	20			;◆テスト
	eedata	9,9,9,9			;★999.9km★



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

	org	0			;
	jmp	rSTART			;


;★タイヤ半径【348】mm
;　100m÷(348x2xπ/1000x9)=411.6→412カウントで100m
;　412-256=【156】→実測補正して416カウントの【160】とする

vTIRE		=	160		;★


;iiiiiii割り込み時プログラムiiiiiiiiiiii;
	org	4			;

	clrb	intf			;RB/INT割込旗解除

	add	mCOUNT_L,#1		;+1(incはキャリー付かないのでダメ)
	jnb	m100C.0,rCHECK_1	;256超え中か？
	cjb	mCOUNT_L,#vTIRE,rINT_A	;設定値か？
	clr	mCOUNT_L		;
	clrb	m100C.0			;
	setb	m100m.0			;
	jmp	rINT_A			;
rCHECK_1
	jnc	rINT_A			;
	setb	m100C.0			;256超え判定



rINT_A
	add	mC_A_L,#1		;+1(incはキャリー付かないのでダメ)
	jnb	m100C.1,rCHECK_2	;256超え中か？
	cjb	mC_A_L,#vTIRE,rINT_B	;設定値か？
	clr	mC_A_L			;
	clrb	m100C.1			;
	setb	m100m.1			;
	jmp	rINT_B			;
rCHECK_2
	jnc	rINT_B			;
	setb	m100C.1			;256超え判定



rINT_B
	add	mC_B_L,#1		;+1(incはキャリー付かないのでダメ)
	jnb	m100C.2,rCHECK_3	;256超え中か？
	cjb	mC_B_L,#vTIRE,rINT_END	;設定値か？
	clr	mC_B_L			;
	clrb	m100C.2			;
	setb	m100m.2			;
	jmp	rINT_END		;
rCHECK_3
	jnc	rINT_END			;
	setb	m100C.2			;256超え判定



rINT_END
	reti				;

;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii;



;---------------------------------------;
rSTART
;Bank 0
	clr	ra			;
	clr	rb			;
	mov	intcon,#00010000b	;RB0/INT割り込み設定

	setb	rp0			;ページ変更(Bank 1へ)
;Bank 1
	mov	option_reg,#00000111b	;
					;bit7…0 RBプルアップ【有】
					;bit6…割り込みエッジ
					;bit5…0 タイマー0は内蔵クロック使用
					;bit4…タイマー0エッジ
					;bit3…プリスケーラはタイマー0へ割当
					;bit2～0…プリスケールレート【256】

;	mov	trisa,#11111111b	;RAの入出力ピン設定
	mov	trisb,#00000001b	;RBの入出力ピン設定
	mov	ansel,#00000111b	;◆RA0,RA1,RA2をアナログピンに設定

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

;---------------------------------------;
;LCD初期設定
	clr	mFREE_A			;

;	mov	mFREE_B,#31		;M1632-0Aでダメだった
;	mov	mFREE_B,#32		;M1632-0Aで不安定だった
;	mov	mFREE_B,#33		;M1632-0AでOKだがSC2004Cではダメだった
;	mov	mFREE_B,#75		;これでもSC2004Cではダメ
;	mov	mFREE_B,#76		;これでやっとSC2004CでOK!

	mov	mFREE_B,#21		;8MHz#128から算出(128/8x1.308)

rWAIT00	djnz	mFREE_A,rWAIT00		;LCD受付OKになる頃まで待つ
	djnz	mFREE_B,rWAIT00		;(8MHzの場合で計算すると0.05秒くらい)

	mov	rb,#00100010b		;4ビットモード､+E+PW
	clrb	LCD_E			;これで4ビットモードになる
;↓4

	mov	mLCD_44,#00101000b	;(6)ファンクションセット設定
	call	sLCD_E_			;N=1(1/16)にすること

	mov	mLCD_44,#00001100b	;(4)表示オン/オフコントロール
	call	sLCD_E_			;


;---------------
;LCD自作キャラクター登録
	mov	mLCD_44,#01000000b	;アドレスセット №0-0
	call	sLCD_E_			;
;【L】
	mov	mLCD_44,#00000000b	;0-0ドットデーター
	call	sLCD_RE			;
	mov	mLCD_44,#00000000b	;0-1ドットデーター
	call	sLCD_RE			;
	mov	mLCD_44,#00000000b	;0-2ドットデーター
	call	sLCD_RE			;
	mov	mLCD_44,#00010000b	;0-3ドットデーター
	call	sLCD_RE			;
	mov	mLCD_44,#00010000b	;0-4ドットデーター
	call	sLCD_RE			;
	mov	mLCD_44,#00010000b	;0-5ドットデーター
	call	sLCD_RE			;
	mov	mLCD_44,#00011110b	;0-6ドットデーター
	call	sLCD_RE			;
	mov	mLCD_44,#00000000b	;0-7ドットデーター
	call	sLCD_RE			;


;[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|
;	---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+



;---------------------------------------;
;電源ON時のEEPROM読み出し距離表示
;EEPROMを読み出して通常メモリーへコピーする｡

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

;---------------------------------------;
;走行距離A

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

;---------------------------------------;
;走行距離B

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


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

	clr	mCOUNT_L		;
	clr	m100C			;

	clr	mC_A_L			;
	clr	mC_A_H			;

	clr	mC_B_L			;
	clr	mC_B_H			;

	clr	m100m			;

	setb	gie			;割込有効

	clr	tmr0			;


;↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ;
;***[ メインループ ]********************;
;繰り返し
rREPEAT


;---------------------------------------;
;A/D【ガソリン容量】チェック
	setb	rp0			;ページ変更(Bank 1へ)
;Bank 1
	mov	adcon1,#10000000b	;
	clrb	rp0			;ページ変更(Bank 0へ戻す)
;Bank 0
;	mov	adcon0,#11001001b	;A/D設定(Channel 1 (RA1/AN1))
	mov	adcon0,#11000001b	;◆A/D設定(Channel 0 (RA0/AN0))
	nop				;20μs必要
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;


;◆↓テスト延長
	nop				;20μs必要
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;20μs必要
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;20μs必要
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
;◆↑テスト延長


	setb	go_done			;A/D変換開始
	jb	go_done,$		;A/D変換終了(bit0)まで待つ

	setb	rp0			;ページ変更(Bank 1へ)
;Bank 1
	mov	w,adresl		;10bit分解能の下位8bit
	clrb	rp0			;ページ変更(Bank 0へ戻す)
;Bank 0
	mov	mAD_GAS,w		;
	call	sG_CAPA			;ガソリン容量変換テーブルへ


	call	sBCDCAL			;BCD計算へ

	mov	mLCD_B01,mBCD_3		;容量
	mov	mLCD_B02,mBCD_2		;
	mov	mLCD_B04,mBCD_1		;

	add	mLCD_B01,#48		;
	add	mLCD_B02,#48		;
	add	mLCD_B04,#48		;

;---------------
;◆【ガソリン容量】A/D値をそのまま表示

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

	call	sBCDCAL			;BCD計算へ

	mov	mOIL_3,mBCD_3		;
	mov	mOIL_2,mBCD_2		;
	mov	mOIL_1,mBCD_1		;

	add	mOIL_3,#48		;
	add	mOIL_2,#48		;
	add	mOIL_1,#48		;



;A/D【バッテリー電圧】チェック
	setb	rp0			;ページ変更(Bank 1へ)
;Bank 1
	mov	adcon1,#00000000b	;
	clrb	rp0			;ページ変更(Bank 0へ戻す)
;Bank 0
	mov	adcon0,#11010001b	;A/D設定(Channel 2 (RA2/AN2))
	nop				;20μs必要
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	nop				;
	setb	go_done			;A/D変換開始
	jb	go_done,$		;A/D変換終了(bit0)まで待つ
	mov	mBINA08,adresh		;

	call	sBCDCAL			;BCD計算へ

	mov	mLCD_T01,mBCD_3		;電圧
	mov	mLCD_T02,mBCD_2		;
	mov	mLCD_T04,mBCD_1		;

	add	mLCD_T01,#48		;
	add	mLCD_T02,#48		;
	add	mLCD_T04,#48		;



;---------------------------------------;
;A/D【油温】チェック






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

	jnb	m100m.0,rTRIP_A		;100mカウントアップ
	clrb	m100m.0			;

;---------------------------------------;
;総距離カウンター

;--------------
;①100mの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#0		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTOTAL0,w		;
	csb	mTOTAL0,#10		;10未満はスキップ
	clr	mTOTAL0			;10になった場合はゼロにする｡


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

	call	sEE_INC2		;

	add	mTOTAL0,#48		;LCD表示用
	cjne	mTOTAL0,#48,rTRIP_A

;--------------
;1桁目+1
;①1kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#1		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTOTAL1,w		;
	csb	mTOTAL1,#10		;10未満はスキップ
	clr	mTOTAL1			;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTOTAL1,#48		;LCD表示用
	cjne	mTOTAL1,#48,rTRIP_A

;--------------
;2桁目+1
;①10kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#2		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTOTAL2,w		;
	csb	mTOTAL2,#10		;10未満はスキップ
	clr	mTOTAL2			;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTOTAL2,#48		;LCD表示用
	cjne	mTOTAL2,#48,rTRIP_A

;--------------
;3桁目+1
;①100kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#3		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTOTAL3,w		;
	csb	mTOTAL3,#10		;10未満はスキップ
	clr	mTOTAL3			;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTOTAL3,#48		;LCD表示用
	cjne	mTOTAL3,#48,rTRIP_A

;--------------
;4桁目+1
;①1,000kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#4		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTOTAL4,w		;
	csb	mTOTAL4,#10		;10未満はスキップ
	clr	mTOTAL4			;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTOTAL4,#48		;LCD表示用
	cjne	mTOTAL4,#48,rTRIP_A

;--------------
;5桁目+1
;①10,000kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#5		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTOTAL5,w		;
	csb	mTOTAL5,#10		;10未満はスキップ
	clr	mTOTAL5			;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTOTAL5,#48		;LCD表示用
	cjne	mTOTAL5,#48,rTRIP_A

;--------------
;6桁目+1
;①100,000kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#6		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTOTAL6,w		;
	csb	mTOTAL6,#10		;10未満はスキップ
	clr	mTOTAL6			;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTOTAL6,#48		;LCD表示用




rTRIP_A
;---------------------------------------;
;距離Aゼロリセット
	jb	ra.5,rTRIP_AX		;

;--------------
;100mの単位
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#10		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_A0,#48		;LCD表示用

;--------------
;1桁目
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#11		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_A1,#48		;LCD表示用

;--------------
;2桁目
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#12		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_A2,#48		;LCD表示用

;--------------
;3桁目+1
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#13		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_A3,#48		;LCD表示用

;--------------
	clrb	m100m.1			;
	clr	mC_A_H			;
	clr	mC_A_L			;

	jmp	rTRIP_B


;---------------------------------------;
rTRIP_AX
	jnb	m100m.1,rTRIP_B		;距離A 100mカウントアップ
	clrb	m100m.1			;

;--------------
;①100mの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#10		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_A0,w		;
	csb	mTRIP_A0,#10		;10未満はスキップ
	clr	mTRIP_A0		;10になった場合はゼロにする｡


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

	call	sEE_INC2		;

	add	mTRIP_A0,#48		;LCD表示用
	cjne	mTRIP_A0,#48,rTRIP_B

;--------------
;1桁目+1
;①1kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#11		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_A1,w		;
	csb	mTRIP_A1,#10		;10未満はスキップ
	clr	mTRIP_A1		;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTRIP_A1,#48		;LCD表示用
	cjne	mTRIP_A1,#48,rTRIP_B

;--------------
;2桁目+1
;①10kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#12		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_A2,w		;
	csb	mTRIP_A2,#10		;10未満はスキップ
	clr	mTRIP_A2		;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTRIP_A2,#48		;LCD表示用
	cjne	mTRIP_A2,#48,rTRIP_B

;--------------
;3桁目+1
;①100kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#13		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_A3,w		;
	csb	mTRIP_A3,#10		;10未満はスキップ
	clr	mTRIP_A3		;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTRIP_A3,#48		;LCD表示用



;---------------------------------------;
;距離Bゼロリセット
rTRIP_B
	jb	ra.4,rTRIP_BX		;

;--------------
;100mの単位
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#20		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_B0,#48		;LCD表示用

;--------------
;1桁目
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#21		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_B1,#48		;LCD表示用

;--------------
;2桁目
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#22		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_B2,#48		;LCD表示用

;--------------
;3桁目+1
;ゼロをEEPROMに書き込む｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#23		;アドレスセット
	clrb	rp1			;ページ変更(Bank 0へ)
;Bank 0
	clr	w			;

	call	sEE_INC2		;

	mov	mTRIP_B3,#48		;LCD表示用

;--------------
	clrb	m100m.2			;
	clr	mC_B_H			;
	clr	mC_B_L			;

	jmp	rLCD			;


;---------------------------------------;
rTRIP_BX
	jnb	m100m.2,rLCD		;距離B 100mカウントアップ
	clrb	m100m.2			;

;--------------
;①100mの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#20		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_B0,w		;
	csb	mTRIP_B0,#10		;10未満はスキップ
	clr	mTRIP_B0		;10になった場合はゼロにする｡


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

	call	sEE_INC2		;

	add	mTRIP_B0,#48		;LCD表示用
	cjne	mTRIP_B0,#48,rLCD

;--------------
;1桁目+1
;①1kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#21		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_B1,w		;
	csb	mTRIP_B1,#10		;10未満はスキップ
	clr	mTRIP_B1		;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTRIP_B1,#48		;LCD表示用
	cjne	mTRIP_B1,#48,rLCD

;--------------
;2桁目+1
;①10kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#22		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_B2,w		;
	csb	mTRIP_B2,#10		;10未満はスキップ
	clr	mTRIP_B2		;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTRIP_B2,#48		;LCD表示用
	cjne	mTRIP_B2,#48,rLCD

;--------------
;3桁目+1
;①100kmの単位を読み出して通常メモリーへコピーする｡
	setb	rp1			;ページ変更(Bank 2へ)
;Bank 2
	mov	eeadr,#23		;アドレスセット

	call	sEE_INC1		;
;Bank 0
	mov	mTRIP_B3,w		;
	csb	mTRIP_B3,#10		;10未満はスキップ
	clr	mTRIP_B3		;10になった場合はゼロにする｡

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

	call	sEE_INC2		;

	add	mTRIP_B3,#48		;LCD表示用


;---------------------------------------;
rLCD
;LCD表示タイミングを計る

	jb	tmr0if,rLCD_GO		;時間経過(停車状態判定)
	jnb	rb.0,rLCD		;
rLCD_T1

	jb	tmr0if,rLCD_GO		;
	jb	rb.0,rLCD_T1		;


;---------------------------------------;
;LCDキャラクターコード送信(表示)
rLCD_GO
	mov	mLCD_44,#80h		;1行目1桁目
	call	sLCD_E_			;

	mov	mLCD_44,mLCD_T01	;1
	call	sLCD_RE			;
	mov	mLCD_44,mLCD_T02	;2
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;3
	call	sLCD_RE			;
	mov	mLCD_44,mLCD_T04	;4
	call	sLCD_RE			;
	mov	mLCD_44,#'v'		;5
	call	sLCD_RE			;
	mov	mLCD_44,mOIL_3		;6
	call	sLCD_RE			;
	mov	mLCD_44,mOIL_2		;7
	call	sLCD_RE			;
	mov	mLCD_44,mOIL_1		;8
	call	sLCD_RE			;
	mov	mLCD_44,#' '		;9
	call	sLCD_RE			;

;	mov	mLCD_44,mTOTAL6		;
;	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		;14
	call	sLCD_RE			;

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

	mov	mLCD_44,mLCD_B01	;1
	call	sLCD_RE			;
	mov	mLCD_44,mLCD_B02	;2
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;3
	call	sLCD_RE			;
	mov	mLCD_44,mLCD_B04	;4
	call	sLCD_RE			;
	mov	mLCD_44,#0		;5 キャラクター登録№0【L】
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_A3	;6
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_A2	;7
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_A1	;8
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;9
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_A0	;10
	call	sLCD_RE			;
	mov	mLCD_44,#' '		;11
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B3	;12
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B2	;13
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B1	;14
	call	sLCD_RE			;
	mov	mLCD_44,#'.'		;15
	call	sLCD_RE			;
	mov	mLCD_44,mTRIP_B0	;16
	call	sLCD_RE			;

rWAIT_1

	jnb	tmr0if,$		;約0.2秒ここで待つ
	clrb	tmr0if			;
	jnb	tmr0if,$		;約0.2秒ここで待つ
	clrb	tmr0if			;
	jnb	tmr0if,$		;約0.2秒ここで待つ
	clrb	tmr0if			;
	jnb	tmr0if,$		;約0.2秒ここで待つ
	clrb	tmr0if			;
	jnb	tmr0if,$		;約0.2秒ここで待つ
	clrb	tmr0if			;

	jmp	rREPEAT			;

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





;sssssss LCD E 送信関係 ssssssssssssssss;

sLCD_E_
	call	sBUSY7			;LCD受付OKになるまで待つ

	setb	LCD_E			;

	and	rb,#00001111b		;RB4～7クリア

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

	clrb	LCD_E			;


	setb	LCD_E			;

	and	rb,#00001111b		;RB4～7クリア

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

	clrb	LCD_E			;

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

;sssssss LCDキャラクター表示 sssssssssss;

sLCD_RE
	call	sBUSY7			;LCD受付OKになるまで待つ

	setb	LCD_RS			;
	setb	LCD_E			;

	and	rb,#00001111b		;RB4～7クリア

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

	clrb	LCD_E			;
	clrb	LCD_RS			;


	setb	LCD_RS			;
	setb	LCD_E			;

	and	rb,#00001111b		;RB4～7クリア

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

	clrb	LCD_E			;
	clrb	LCD_RS			;

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

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

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

	setb	LCD_RW			;
	setb	LCD_E			;
	jb	rb.7,$			;ビジー信号が消えるまでここで待つ
	clrb	LCD_E			;
	clrb	LCD_RW			;

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

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


;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


;sssssss A/D電圧→ガソリン容量変換 sssss;
sG_CAPA
	cjb	mAD_GAS,#141,$+7	;15.5L
	mov	mBINA08,#155		;
	ret				;

	cjb	mAD_GAS,#137,$+7	;15.0L
	mov	mBINA08,#150		;
	ret				;

	cjb	mAD_GAS,#132,$+7	;14.5L
	mov	mBINA08,#145		;
	ret				;

	cjb	mAD_GAS,#128,$+7	;14.0L
	mov	mBINA08,#140		;
	ret				;

	cjb	mAD_GAS,#124,$+7	;13.5L
	mov	mBINA08,#135		;
	ret				;

	cjb	mAD_GAS,#120,$+7	;13.0L
	mov	mBINA08,#130		;
	ret				;

	cjb	mAD_GAS,#117,$+7	;12.5L
	mov	mBINA08,#125		;
	ret				;

	cjb	mAD_GAS,#113,$+7	;12.0L
	mov	mBINA08,#120		;
	ret				;

	cjb	mAD_GAS,#110,$+7	;11.5L
	mov	mBINA08,#115		;
	ret				;

	cjb	mAD_GAS,#107,$+7	;11.0L
	mov	mBINA08,#110		;
	ret				;

	cjb	mAD_GAS,#103,$+7	;10.5L
	mov	mBINA08,#105		;
	ret				;

	cjb	mAD_GAS,#100,$+7	;10.0L
	mov	mBINA08,#100		;
	ret				;

	cjb	mAD_GAS,#97,$+7		;9.5L
	mov	mBINA08,#95		;
	ret				;

	cjb	mAD_GAS,#94,$+7		;9.0L
	mov	mBINA08,#90		;
	ret				;

	cjb	mAD_GAS,#91,$+7		;8.5L
	mov	mBINA08,#85		;
	ret				;

	cjb	mAD_GAS,#88,$+7		;8.0L
	mov	mBINA08,#80		;
	ret				;

	cjb	mAD_GAS,#85,$+7		;7.5L
	mov	mBINA08,#75		;
	ret				;

	cjb	mAD_GAS,#82,$+7		;7.0L
	mov	mBINA08,#70		;
	ret				;

	cjb	mAD_GAS,#79,$+7		;6.5L
	mov	mBINA08,#65		;
	ret				;

	cjb	mAD_GAS,#77,$+7		;6.0L
	mov	mBINA08,#60		;
	ret				;

	cjb	mAD_GAS,#75,$+7		;5.5L
	mov	mBINA08,#55		;
	ret				;

	cjb	mAD_GAS,#71,$+7		;5.0L
	mov	mBINA08,#50		;
	ret				;

	cjb	mAD_GAS,#68,$+7		;4.5L
	mov	mBINA08,#45		;
	ret				;

	cjb	mAD_GAS,#66,$+7		;4.0L
	mov	mBINA08,#40		;
	ret				;

	cjb	mAD_GAS,#63,$+7		;3.5L
	mov	mBINA08,#35		;
	ret				;

	cjb	mAD_GAS,#60,$+7		;3.0L
	mov	mBINA08,#30		;
	ret				;

	cjb	mAD_GAS,#58,$+7		;2.5L
	mov	mBINA08,#25		;
	ret				;

	cjb	mAD_GAS,#54,$+7		;2.0L
	mov	mBINA08,#20		;
	ret				;

	cjb	mAD_GAS,#50,$+7		;1.5L
	mov	mBINA08,#15		;
	ret				;

	cjb	mAD_GAS,#49,$+7		;1.0L
	mov	mBINA08,#10		;
	ret				;

	cjb	mAD_GAS,#21,$+7		;0.5L
	mov	mBINA08,#5		;
	ret				;

	mov	mBINA08,#0		;0.0L
	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
	add	w,#48			;

	ret				;


;sssssss EEPROM読み出し(書き込み準備) ss;
sEE_INC1
	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
	add	w,#1			;+1
	ret				;


;sssssss EEPROM書き込み ssssssssssssssss;
sEE_INC2
	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				;









