Инициализация цифрового термометра DS1620

char DS1620Init(void)

{

char Presence;

DDRD |= 0x20;

PORTD &= ~0x20;

TimeDelay_us(200);

TimeDelay_us(200);

TimeDelay_us(200);

DDRB &= ~0x10;

PORTB |= 0x10;

TimeDelay_us(20);

Presence = PIND & 0x10;

TimeDelay_us(200);

DDRD |= 0x20;

PORTD |= 0x20;

TimeDelay_us(200);

return Presence;

}

void DS1620WriteBit(char Value)

{

#asm("cli");

DDRD |= 0x20; //output 5

PORTD &= ~0x20;

TimeDelay_us(5);

if(Value!=0) //if data bit = H => output 5

{

PORTD |= 0x20;

}

TimeDelay_us(70);

PORTD |= 0x20; //output 5

TimeDelay_us(5);

#asm("sei");

}

void DS1620WriteByte(char data)

{

char loop, CurrentBit;

for (loop = 0; loop < 8; loop++) // Loop to write each bit in the byte, LS-bit first

{

CurrentBit = data & 0x01;

DS1620WriteBit(CurrentBit);

data >>= 1; // shift the data byte for the next bit

}

}

char DS1620ReadBit(void)

{

char Value;

#asm("cli");

DDRD |= 0x20; //output 5

PORTD &= ~0x20;

TimeDelay_us(5);

DDRD &= ~0x20; //input

PORTD |= 0x20;

TimeDelay_us(10);

Value = PIND & 0x20; //read bit

TimeDelay_us(55);

DDRD |= 0x20; //output 5

PORTD |= 0x20;

TimeDelay_us(5);

#asm("sei");

return Value;

}

//==

char DS1620ReadByte(void)

{

char loop, result=0, CurrentBit;

for (loop = 0; loop < 8; loop++)

{

result >>= 1; // shift the result right to get it ready for the next bit

CurrentBit = DS1620ReadBit();

if (CurrentBit != 0) // if result is one, then set MS bit

{

result |= 0x80;

}

}

return result;

}

Другие публикации

История развития твердотельной электроники
Ровно 54 года назад американцам Джону Бардину, Уолтеру Браттейну и Уильяму Шокли (рис. 1) была присуждена Нобелевская премия по физике «За исследования в област ...

Разработка измерителя температуры жидкости
В связи с повсеместным использованием цифровых управляющих систем постоянно растет необходимость разработки и усовершенствования их. Большинство цифровых си ...

Меню

Copyright @2021, TECHsectors.ru.