А вот так будет правильно ?
struct __ds18b20_scratch_pad_struct { unsigned char temp_lsb,temp_msb, temp_high,temp_low, conf_register, res1, res2, res3, crc; } __ds18b20_scratch_pad;
unsigned char *p; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { if(ds==0) if(w1_init()==0) {ds=45; Tp=-9999;} ; if(ds==1) w1_write(0xCC); if(ds==2) w1_write(0xBE); if(ds==3) if(w1_init()==0) {ds=45; Tp=-9999;} ; if(ds==4) w1_write(0xCC); if(ds==5) w1_write(0x44); //ïåðåòâîðåííÿ if(ds==30) if(w1_init()==0) {ds=45; Tp=-9999;} ; if(ds==31) w1_write(0xCC); if(ds==32) { w1_write(0xBE); p=(char *) &__ds18b20_scratch_pad;} if(ds==33) *(p++)=w1_read(); if(ds==34) *(p++)=w1_read(); if(ds==35) *(p++)=w1_read(); if(ds==36) *(p++)=w1_read(); if(ds==37) *(p++)=w1_read(); if(ds==38) *(p++)=w1_read(); if(ds==39) *(p++)=w1_read(); if(ds==40) *(p++)=w1_read(); if(ds==41) *(p++)=w1_read(); if(ds==42) if(!w1_dow_crc8(&__ds18b20_scratch_pad,9)==0) {ds=45; Tp=-9999;}; if(ds==43) if(w1_init()==0) {ds=45; Tp=-9999;} ; if(ds==44) Tp = (*((int *) &__ds18b20_scratch_pad.temp_lsb) & 0xFFF8)*0.0625; if(Tp>1000) Tp=Tp-4096; ds++; if(ds>50) ds=0; }
|