; ------------------------------------------------------------------- ; 表示 ; ------------------------------------------------------------------- ; 瞬間系 信号間 起動から ; ---------------------------- ; 説明 燃費 燃費 燃費 ; 速度 平均速度 平均速度 ; 燃料 距離 距離 ; 時間 時間 ; ---------------------------- ; 実際の 000 00.0 00.0 ; サンプル 000 000.0 000.0 ; 000.00 000.00 ; 000 000:00 000:00 ; -------------------- ; 桁 01234567890123456789 print ; カーソルを1行目に移動 bcf RS ; RS='L' movlw B'10000000' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 btfsc flag,2 ; 前回値表示中フラグON? goto print_1 ; ON なら prev表示 ; OFF なら 通常表示 call fu_print ; 瞬間燃費表示 movlw ' ' call write_lcd_data call write_lcd_data goto print_2 print_1 ; ON なら prev 表示 movlw 'p' call write_lcd_data movlw 'r' call write_lcd_data movlw 'e' call write_lcd_data movlw 'v' call write_lcd_data movlw ' ' call write_lcd_data print_2 call futs_print ; 区間燃費表示(信号間) movlw ' ' call write_lcd_data call write_lcd_data call write_lcd_data call fut_print ; 区間燃費表示 ; カーソルを2行目に移動 bcf RS ; RS='L' movlw B'11000000' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call speed_print ; 速度表示 movlw ' ' call write_lcd_data call avgsps_print ; 平均速度表示(信号間) movlw ' ' call write_lcd_data call write_lcd_data call avgsp_print ; 平均速度表示 ; カーソルを3行目に移動 bcf RS ; RS='L' movlw B'10010100' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 movlw ' ' call write_lcd_data call write_lcd_data call write_lcd_data call write_lcd_data call odds_print ; 走行距離表示(信号間) movlw ' ' call write_lcd_data call odd_print ; 走行距離表示 ; カーソルを4行目に移動 bcf RS ; RS='L' movlw B'11010100' call write_lcd_data bsf RS ; RS=1 : 以後のコマンドは文字表示 call fu_print_time ; 燃費cc/min表示 movlw ' ' call write_lcd_data call times_print ; 時間表示(信号間) movlw ' ' call write_lcd_data call time_print ; 時間表示 ;call spcout_print ; 車速パルスカウント表示 ;call fuelcout_print ; 燃料パルスカウント表示 return ;■瞬間系 --> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 速度表示 speed_print movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto sp_print_0 ; 0km/h と判断されたら、計算しない ; 速度計算(通常走行時) movf speed_tm+1,W movwf src2+1 movf speed_tm+0,W movwf src2+0 movlw SPEEDFACT_H ;係数 movwf src1+1 movlw SPEEDFACT_L ;係数 movwf src1+0 call div16 call bin16tobcd bcf flag,0 call print_dec3 goto sp_print_e sp_print_0 ; idle movlw ' ' call write_lcd_data movlw ' ' call write_lcd_data movlw '0' call write_lcd_data sp_print_e return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 瞬間燃費表示 (000cc/m or f-c) fu_print_time movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto fu_print_ccpmin ; 停止中は必ず cc/min 表示 movlw FUEL_FC_FLOW_MAX ^ 0ffh addwf fuel_flow,0 btfsc STATUS,C goto fu_print_fc ; 走行中で fuel cut と判断されたら f-c goto fu_print_ccpmin ; 通常時? は cc/min 表示 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 瞬間燃費表示 (000km/l or stp or f-c) fu_print movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto fu_print_stop ; 0km/h と判断されたら movlw FUEL_FC_FLOW_MAX ^ 0ffh addwf fuel_flow,0 btfsc STATUS,C goto fu_print_fc ; fuel cut と判断されたら ; 瞬間燃費計算 movf fuel_tm+1,W movwf src1+1 movf fuel_tm+0,W movwf src1+0 movf speed_tm+1,W movwf src2+1 movf speed_tm+0,W movwf src2+0 call div16 call bin16tobcd bcf flag,0 call print_dec3 goto fu_print_e fu_print_ccpmin ; cc/min 表示 movlw FUELFACT_H ;係数 movwf src1+2 movlw FUELFACT_M ;係数 movwf src1+1 movlw FUELFACT_L ;係数 movwf src1+0 ;movlw 0 clrf src2+2 movf fuel_tm+1,W movwf src2+1 movf fuel_tm+0,W movwf src2+0 call div24 call bin16tobcd bcf flag,0 call print_dec3 goto fu_print_e fu_print_fc movlw SPEED_FLOW_MAX ^ 0ffh addwf speed_flow,0 btfsc STATUS,C goto fu_print_stop ; 0km/h と判断されたら ; f-c 表示 movlw 'f' call write_lcd_data movlw '-' call write_lcd_data movlw 'c' call write_lcd_data goto fu_print_e fu_print_stop ; stop 表示 movlw '-' call write_lcd_data movlw '-' call write_lcd_data movlw '-' call write_lcd_data ;goto fu_print_e fu_print_e return ;■瞬間系 <-- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 区間燃費表示 fut_print ; 区間燃費計算 call odotosrc1 call mul10_24 bcf INTCON,RBIE ; rb割込禁止 movf fuel_cn+2,W movwf src2+2 movf fuel_cn+1,W movwf src2+1 movf fuel_cn+0,W movwf src2+0 bsf INTCON,RBIE ; rb割込許可 call div24 ; 区間燃費表示 call bin16tobcd bsf flag,0 call print_dec3 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 区間燃費(信号間)表示 futs_print ; 区間燃費計算 call odo2tosrc1 call mul10_24 bcf INTCON,RBIE ; rb割込禁止 movf fuel_cn2+2,W movwf src2+2 movf fuel_cn2+1,W movwf src2+1 movf fuel_cn2+0,W movwf src2+0 bsf INTCON,RBIE ; rb割込許可 call div24 ; 区間燃費表示 call bin16tobcd bsf flag,0 call print_dec3 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 時間表示 time_print call timtosrc1 goto time_print_1 ;;;;;;;;;;;;;;;;;;;;;; ; 時間(信号間)表示 times_print call tim2tosrc1 ;goto time_print_1 time_print_1 ;movlw 0 clrf src2+2 movlw TIMMINFACT_H ; 係数 movwf src2+1 movlw TIMMINFACT_L ; 係数 movwf src2+0 call div24 call bin16tobcd bcf flag,0 call print_dec3 movlw ':' call write_lcd_data ; 余りから秒を計算! movf mod+1,W movwf src1+2 movf mod+0,W movwf src1+1 ;movlw 0 clrf src1+0 ;movlw 0 clrf src2+2 movlw TIMSECFACT_H ; 係数 movwf src2+1 movlw TIMSECFACT_L ; 係数 movwf src2+0 call div24 call bin16tobcd bcf flag,0 call print_dec2 ; 秒2桁表示 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 走行距離表示 (0000.00km) odd_print call odotosrc1 goto odd_print_1 ;;;;;;;;;;;;;;;;;;;;;; ; 走行距離(信号間)表示 (0000.00km) odds_print call odo2tosrc1 ;goto odd_print_1 odd_print_1 ;movlw 0 clrf src2+2 movlw 0x9 ;637*4 = 2548 = 0x9f4 movwf src2+1 movlw 0xf4 ;637*4 = 2548 = 0x9f4 movwf src2+0 call div24 call bin16tobcd bcf flag,0 call print_dec3 ; まずは整数部3桁 movlw '.' call write_lcd_data ; 余りから小数2桁を計算! movf mod+1,W movwf src1+2 movf mod+0,W movwf src1+1 ;movlw 0 clrf src1+0 ;movlw 0 clrf src2+2 movlw 0x19 ;637*4*256/100=0x197b movwf src2+1 movlw 0x7b ;637*4*256/100=0x197b movwf src2+0 call div24 call bin16tobcd bcf flag,0 call print_dec2 ; 小数2桁表示 ;movlw 'k' ;call write_lcd_data ;movlw 'm' ;call write_lcd_data return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 平均速度表示 (000km) ; ; 平均速度 = 距離パルス数 ÷ 時間 × 86.235 ; 距離パルス数 ÷ (時間 ÷ 86) ; 86.23491464=1/(0.637*4)*3600/64*1000/256 ; 小数第一位まで表示したいので・・・ ; 平均速度 = 距離パルス数 ÷ 時間 × 862.35 ; 2^24/862 = 19463 = 4C07h ; 距離が 4000h 未満までは ; 平均速度 = (距離パルス数 × 862)÷ 時間 ; それ以降は ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) avgsp_print call odotosrc1 ; 862=35Eh clrf src2+2 movlw 3 movwf src2+1 movlw 52 movwf src2+0 movf src1+2,W btfss STATUS,Z goto avgsp_pr_big movlw 40 subwf src1+1,0 btfss STATUS,C ;if(src1+1>=40) skip goto avgsp_pr_sml ;if(src1+1<40) goto sml avgsp_pr_big ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) call timtosrc1 ; src2 に 862 読み込み済み call div24 call restosrc2 call odotosrc1 call div24 goto avgsp_pr_pr avgsp_pr_sml ; 平均速度 = (距離パルス数 × 862)÷ 時間 ; src1 に odometer_cn 読み込み済み ; src2 に 862 読み込み済み call mul161632 call timtosrc1 call src1tosrc2 call restosrc1 call div24 goto avgsp_pr_pr ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 平均速度(信号間)表示 (000km) ; ; 距離パルス数 ÷ 時間 × 86.235 = 平均速度 ; 距離パルス数 ÷ (時間 ÷ 86) ; 86.23491464=1/(0.637*4)*3600/64*1000/256 avgsps_print call odo2tosrc1 ; 862=35Eh clrf src2+2 movlw 3 movwf src2+1 movlw 52 movwf src2+0 movf src1+2,W btfss STATUS,Z goto avgsps_pr_big movlw 40 subwf src1+1,0 btfss STATUS,C ;if(src1+1>=40) skip goto avgsps_pr_sml ;if(src1+1<40) goto sml avgsps_pr_big ; 平均速度 = 距離パルス数 ÷(時間 ÷ 862) call tim2tosrc1 ; src2 に 862 読み込み済み call div24 call restosrc2 call odo2tosrc1 call div24 goto avgsp_pr_pr avgsps_pr_sml ; 平均速度 = (距離パルス数 × 862)÷ 時間 ; src1 に odometer_cn 読み込み済み ; src2 に 862 読み込み済み call mul161632 call tim2tosrc1 call src1tosrc2 call restosrc1 call div24 ;goto avgsp_pr_pr avgsp_pr_pr call bin16tobcd bsf flag,0 call print_dec4 return restosrc1 movf result+2,W movwf src1+2 movf result+1,W movwf src1+1 movf result+0,W movwf src1+0 return restosrc2 movf result+2,W movwf src2+2 movf result+1,W movwf src2+1 movf result+0,W movwf src2+0 return odotosrc1 bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn+2,W movwf src1+2 movf odometer_cn+1,W movwf src1+1 movf odometer_cn+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 return odo2tosrc1 bcf INTCON,RBIE ; rb割込禁止 movf odometer_cn2+2,W movwf src1+2 movf odometer_cn2+1,W movwf src1+1 movf odometer_cn2+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 return timtosrc1 bcf INTCON,RBIE ; rb割込禁止 movf timer_cn+2,W movwf src1+2 movf timer_cn+1,W movwf src1+1 movf timer_cn+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 return tim2tosrc1 bcf INTCON,RBIE ; rb割込禁止 movf timer_cn2+2,W movwf src1+2 movf timer_cn2+1,W movwf src1+1 movf timer_cn2+0,W movwf src1+0 bsf INTCON,RBIE ; rb割込許可 return src1tosrc2 movf src1+2,W movwf src2+2 movf src1+1,W movwf src2+1 movf src1+0,W movwf src2+0 return ;■ デバッグ系 --> ;;;;;;include "debugprint.asm" ;■ デバッグ系 <--