////////////////////////////////////////////////////////// // NEN5_EEPI.INC // // // // EEPROM読み書き、割り込み処理 // // 01/07/06 // ////////////////////////////////////////////////////////// //  【EEPROM読み出し関連関数】 //**************************************************************//// int r_ee(int addr){ restart_wdt(); return(read_eeprom(addr)); //EEPROM読み出し } //++++++++ EEPROMからのデーター&設定値取り出し +++++++++++++++// void load_settei() { int i; for( i=0 ; i<=4 ; i++){ //ストア値の読み出し inj_ini[i] = inj[i] = r_ee(ee_inj0+i); if(i!=4) speed_ini[i] = speed[i] = r_ee(ee_speed0+i); } tmr1l = inj[0]; tmr1h = inj[1]; tmr0 = speed[0]; nenr_l = r_ee(ee_hosei_l); nenr_h = r_ee(ee_hosei_h); content_u = r_ee(ee_content_u); content_l = r_ee(ee_content_l); opt = r_ee(ee_opt); section = r_ee(ee_section); plsk = r_ee(ee_plsk); } //  【EEPROM書き込み関連関数】 //**************************************************************//// void s_ee(int addr,int data) { write_eeprom(addr,data); //EEPROM書き込み restart_wdt(); } //++++++++ EEPROM格納・電源off時 +++++++++++++++++++++++++++++// void stor_eeprom() { int i,j; inj[0] = tmr1l; inj[1] = tmr1h; for( i=0,j=ee_inj0 ; i<=4 ; i++,j++ ) s_ee(j,inj[i]); //インジェクタ値格納 speed[0] = tmr0; for( i=0,j=ee_speed0 ; i<=3 ; i++,j++) s_ee(j,speed[i]); //スピードパルス格納 } //++++++++ 履歴移動 & クリア ++++++++++++++++++++++++++++++// void move_history(){ int i; inj[0] = tmr1l; inj[1] = tmr1h; speed[0] = tmr0; for( i=0 ; i<=4 ; i++ ){ s_ee(ee_inj0_3+i,r_ee(ee_inj0_2+i)); s_ee(ee_inj0_2+i,r_ee(ee_inj0_1+i)); s_ee(ee_inj0_1+i,inj[i]); if(i != 4){ s_ee(ee_speed0_3+i,r_ee(ee_speed0_2+i)); s_ee(ee_speed0_2+i,r_ee(ee_speed0_1+i)); s_ee(ee_speed0_1+i,speed[i]); } } tmr1l = 0; //クリア値 tmr1h = 0; inj[2] = 0; inj[3] = 0; inj[4] = 0; tmr0 = 0; speed[1] = 0; speed[2] = 0; speed[3] = 0; stor_eeprom(); //クリア値をEEPROMに格納// lcd_clr(); lcd_out("Reset Completion"); // Reset完了 } //  【割り込み処理関連関数】 //**************************************************************//// //++++++++ タイマ2割り込み処理 ++++++++++++++++++++++++++++++// #int_timer2 timer2_isr(){ msec1_l++; if(msec1_l == 0){ //250mSec毎にmsec1_h +1 unit_t_inj[4]++; msec1_h++; if(unit_t_inj[4] == 1){ unit_t_inj[0] = tmr1l; unit_t_inj[1] = tmr1h; syun[0] = tmr0; syun[1] = speed[1]; } if(unit_t_inj[4] == 5){ unit_t_inj[2] = tmr1l; unit_t_inj[3] = tmr1h; syun[2] = tmr0; syun[3] = speed[1]; } } } //++++++++ タイマ1割り込み処理 ++++++++++++++++++++++++++++++// #int_timer1 //インジェクタ用割り込み intval(){ //100KHz * 16Bit毎 #asm incf inj[2],f btfss 3,2 goto aaaa incf inj[3],f btfss 3,2 goto aaaa incf inj[4],f btfss 3,2 goto aaaa incf inj[5],f aaaa: #endasm if(injl_over != 0x00) bit_clear(t1con,0); //タイマ1停止 injl_over = 0x01; } //++++++++ タイマ0による割り込み ++++++++++++++++++++++++++++// #int_rtcc rtcc_isr(){ //SPEEDパルス用割り込み #asm incf speed[1],f btfss 3,2 goto bbbb incf speed[2],f btfss 3,2 goto bbbb incf speed[3],f btfss 3,2 goto bbbb incf speed[4],f bbbb: #endasm } //++++++++ RB4-7の変化割り込み +++++++++++++++++++++++++++++++// #int_rb //インジェクタ用タイマ1動作・停止用 rb_isr(){ if(bit_test(port_a,pin_IG)){ //igチェック if(!bit_test(port_b,7)){ //inj if(inj_t[4] == 0){ //data更新 inj_t[0] = tmr1l; inj_t[1] = tmr1h; inj_t[4] = 0x11; } bit_set(t1con,0); //タイマ1動作 } else{ bit_clear(t1con,0); //タイマ1停止 if(inj_t[4] == 0x11){ inj_t[2] = tmr1l; inj_t[3] = tmr1h; inj_t[4] = 0x22; } } } else{ bit_clear(t1con,0); //タイマ1停止 } injl_over = 0; //燃料噴射監視用RAMクリア } //++++++++ RB0による1秒ごとの割り込み ++++++++++++++++++++// #int_ext ext_isr(){ sec++; //秒を+1 if(sec == 60){ sec = 0; minute++; //分を+1 if(minute ==60) minute = 0; } }