; ------------------------------------------------------------------- ; ファイル名 ramdef.asm は「RAM定義」の意 ; ------------------------------------------------------------------- __config B'11111111110010' ; @@@config のコメント書かなきゃ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; RAM 定義 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ram set 0ch timer_cn equ ram ; タイマカウンタ ram set ram+3 odometer_cn equ ram ; 走行距離カウンタ ram set ram+3 fuel_cn equ ram ; 燃料パルスカウンタ ram set ram+3 ndr_cn equ ram ; ドライブプーリースピード パルスカウンタ ram set ram+2 ndn_cn equ ram ; ドリブンプーリースピード パルスカウンタ ram set ram+2 timer_cn2 equ ram ; タイマカウンタ(信号間) ram set ram+3 odometer_cn2 equ ram ; 走行距離カウンタ(信号間) ram set ram+3 fuel_cn2 equ ram ; 燃料パルスカウンタ(信号間) ram set ram+3 speed_tm_la equ ram ; スピード・時間 ram set ram+2 speed_tm_lb equ ram ; スピード・時間 ram set ram+2 speed_tm equ ram ; スピード・時間 ram set ram+2 speed_flow equ ram ; スピード・0km/hチェック ram set ram+1 fuel_tm_la equ ram ; 燃料パルス・時間 ram set ram+2 fuel_tm_lb equ ram ; 燃料パルス・時間 ram set ram+2 fuel_tm equ ram ; 燃料パルス・時間 ram set ram+2 fuel_flow equ ram ; 燃料パルス・fuel cut チェック ram set ram+1 w_save equ ram ; 割込 退避用 ram set ram+1 status_save equ ram ; 割込 退避用 ram set ram+1 ra_save equ ram ; 通常時のPORTA ram set ram+1 rb_now equ ram ; 割込時のrb(割り込み期間だけ保存) ram set ram+1 rb_temp equ ram ; 割込時のrb(処理ワーク) ;ram set ram+1 rb_save equ ram ; 割込時のrb(次回まで保存) ram set ram+1 lcd_data_temp equ ram ; LCDデータ(テンポラリ用) ram set ram+1 src1 equ ram ; 計算用 引数 ram set ram+3 src2 equ ram ; 計算用 引数 ram set ram+3 result equ ram ; 計算用 戻り値 ram set ram+3 mod equ ram ; 計算用 戻り値 ram set ram+3 flag equ ram ;flag,0 : print 時に固定小数点(10倍)だとして表示します。 ;flag,1 : お休み中 ;flag,2 : 前回値表示中フラグ ;flag,3 : /0 error ram set ram+1 dec equ ram ; 10進格納場所(5バイト) ram set ram+5 dec_top equ ram calc_cn equ ram ; カウンタのワーク ram set ram+1 calc_cn2 equ ram ; カウンタのワーク ram set ram+1 mode equ ram ; 表示モード ram set ram+1 LSTファイルを見て、50H までがRAM容量の限界。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 定数定義 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; LCD の RS ピン #define RS PORTB,1 ; LCD の RS ピン #define E PORTB,2 ; ステータス表示 (@@@予定) #define LED_COM PORTA,4 ;分係数 ;10*1000*1000/4/128/256*60 = 4577.636719 = 0x11E2 ; 4*1000*1000/4/ 64/256*60 = 3662.109375 = 0x0E4E #define TIMMINFACT_H 0x0e #define TIMMINFACT_L 0x4e ;秒係数 ;10*1000*1000/4/128/256*256 = 19531.25 = 0x4C4B ; 4*1000*1000/4/ 64/256*256 = 15625 = 0x3D09 #define TIMSECFACT_H 0x3d #define TIMSECFACT_L 0x09 ;速度係数 ;10*1000*1000/4/128/(2.54*1000/3600) = 27682.087 = 0x6C22 ; 4*1000*1000/4/ 64/(2.54*1000/3600) = 22145.669 = 0x5682 #define SPEEDFACT_H 0x56 #define SPEEDFACT_L 0x82 ;燃料/時間 係数 ;10*1000*1000/4/128/(637*4/1000)*60 = 459919.54 = 0x70490 ; 4*1000*1000/4/ 64/(637*4/1000)*60 = 367935.64 = 0x59D40 #define FUELFACT_H 0x05 #define FUELFACT_M 0x9d #define FUELFACT_L 0x40 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; タイムアウト判断時間 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 1秒≒61 (@ 4MHz) ; 停止判断時間 #define SPEED_FLOW_MAX D'160' ; 燃料停止判断時間 (エンジン停止) #define FUEL_ST_FLOW_MAX D'254' ; 燃料停止判断時間 (フューエルカット) #define FUEL_FC_FLOW_MAX D'150' ; 4時間止まっていたらオールリセット ; 4*3600*61 = 878906 = D693A ; いや、でも面倒だから最上位バイトだけチェックしよう。 ; 0x0cffff = 3:53 ; 0x0dffff = 4:10 ; ちなみに4時間ってのはベンツのマネ。(参考 http://www.cds.co.jp/ff/r2302.htm) #define RESET_FLOW_MAX 0x0d