void s_write_byte(unsigned char value)
{
unsigned char i;
DATATR = 0;
i=0x80;
do
{
if (i & value)
DATA = 1;
else
DATA = 0;
SCK = 1;
Delay10TCYx(15);
i>>=1;
if (i==0) break;
SCK = 0;
Delay10TCYx(15);
}
while(1);
DATATR = 1;
SCK = 0;
Delay10TCYx(15);
SCK = 1;
Delay10TCYx(15);
ShtErr |= DATAIN;
SCK = 0;
}
void s_transstart(void)
{
DATA = 1;
DATATR = 0;
SCK = 0;
Delay10TCYx(10);
SCK = 1;
Delay10TCYx(10);
DATA = 0;
Delay10TCYx(10);
SCK = 0;
Delay10TCYx(30);
SCK = 1;
Delay10TCYx(10);
DATA = 1;
Delay10TCYx(10);
SCK = 0;
}
void s_write_statusreg(unsigned char value)
{
unsigned char error = 0;
s_transstart();
s_write_byte(STATUS_REG_W);
s_write_byte(value);
}
void HeatOnOff(u8 heaton)
{
heaton=(heaton==0)? SHT_CONFIG: SHT_CONFIG | 0x04;
s_write_statusreg(heaton);
}
Я включаю подогрев функцией HeatOnOff, подогрев работает.
У вас датчик виснет даже при чтении статуса?
Процедурой ресинхронизации развешивается ?