#include "IO-reg.h" #include "intr6811.h" #include "X25128.h" #include "menu.h" #include "ds1820.h" #include "LCD.h" char last_path[8]; char nbr_of_thermos[2]; /* Väntfunktion microsecs = 0x01 ger puls på 25 microsek. microsecs = 0x02 ger puls på 35 microsek. etc... */ monitor void ds1820_wait(char microsecs){ char i; for(i=0x01; i int_max[0]) || ((int_current[0] == int_max[0]) && int_current[1] > int_max[1])) X25128_write_data(temp_data, address, 4); tmp = 1 + (8 + 14 + 4) * nbr_of_thermos[0] + 4 * nbr; address[0] = tmp/256; address[1] = tmp%256; ds1820_convert_temp_decimals(min_value, int_min); if((int_current[0] < int_min[0]) || ((int_current[0] == int_min[0]) && int_current[1] < int_min[1])) X25128_write_data(temp_data, address, 4); ds1820_reset(); } /* returnerar heltalsdelen av temperaturen, som beräknas mha temp_data[0 och 1]. */ int ds1820_convert_temp(char temp_data[]){ int signed_temp; if(temp_data[1]) signed_temp = (-256 + temp_data[0])/2; else signed_temp = temp_data[0]/2; return signed_temp; } /* lagrar decimaldelen av temperaturen i temp[1], som beräknas mha temp_data[2 och 3]. Ändrar även temp[0] om decimaldelen understiger 0 eller överstiger 100. */ void ds1820_convert_temp_decimals(char temp_data[], int temp[]){ char taljare; char namnare; taljare = temp_data[3] - temp_data[2]; namnare = temp_data[3]; temp[1] = 10 * (taljare * 10 / namnare); taljare = 10 * taljare - ((temp[1]/10) * namnare); temp[1] += (taljare * 10 / namnare); taljare = 10 * taljare - ((temp[1]%10) * namnare); if((taljare * 10 / namnare) >= 5) temp[1] += 1; temp[1] -= 25; if(temp[1] < 0){ temp[0] -= 1; temp[1] = 100 + temp[1]; } else if(temp[1] > 99){ temp[0] += 1; temp[1] -= 100; } } /* Kopierar de senaste lästa värdena till loggen i minnet */ void ds1820_logg_values(void){ char last_address[2]; char new_address[2]; char address[2]; char temp_data[4]; char i; int tmp; tmp = 1 + (8 + 14 + 4*4) * nbr_of_thermos[0]; address[0] = tmp/256; address[1] = tmp%256; X25128_read_data(last_address, 2, address); for(i=0; i