int main(void) { init(); if(!(PIN_BAUDRATE & RESET_SLAVE_ID)) reset_slave_id(); registers[7]=eeprom_read_word((uint16_t*)ADDR_SLAVE_ID_MODBUS_EEP); if(registers[7]==0xFFFF) { registers[7]=0x0001; eeprom_update_word((uint16_t*)ADDR_SLAVE_ID_MODBUS_EEP, registers[7]); } slave_add=eeprom_read_byte((uint8_t*)ADDR_SLAVE_ID_MODBUS_EEP); usart0_mod_init(select_baud_rate()); sei(); //Enable Interrupt. while(1) { wdt_reset(); if(convert_delay==1) { DS18B20_Temperature(Temperature); registers[8]=Temperature[0]; registers[9]=(Temperature[1]<<8)|(Temperature[2]); registers[10]=Temperature[3]; } if(convert_delay==0) { if(DS18B20_Start_Converts()) { for(uint8_t i=8; i<11; i++) registers[i]=0xFFFF; convert_delay=1; } else { convert_delay = TIME_UPDATE; } } convert_delay--; //Условие отвечающие за обработку MODBUS протокола. if(usart0_rx_len()!=back_len0) { back_len0=usart0_rx_len(); TCNT1=0x0000; TCCR1B=(1<<CS12)|(0<<CS11)|(0<<CS10); } } }
void setID(uint16_t val){ eeprom_update_word(0x00, val); //update current ID in EEPROM }
void write_highscores(void){ eeprom_update_word(&save_sig, SIG); eeprom_write_block((void*)&high_scores, (void*)&ee_high_scores, BYTES); }
void save_score(void){ eeprom_update_word(&ee_score, score); }
void Storage_SetInstructionCount(uint16_t instructionCount) { eeprom_update_word(&StorageConfig_InstructionCount, instructionCount); }
void set_motor_speed(uint16_t speed) { pwm_ng_set(&pwm, speed); eeprom_update_word(&eep_motor_speed, speed); }