[an error occurred while processing this directive] [an error occurred while processing this directive]
Ессно. Семеро - с ложкой ... Помните?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Yes! 07 декабря 2001 г. 19:52
В ответ на: Ответ: А Вы давно уже профи?Так подскажите начинающему а-то все язвят и делают умный вид .И вообще на всю конфу человек пять чего либо лобают а все остальные .... отправлено starter 07 декабря 2001 г. 19:48


char DS_Reset(void)
{ // }
char i, D;
// DS_Reset
DS18_Zero;
DS18_Out;
_CLI();
wait_us(240);
wait_us(240);
// DS_Presence
DS18_In;
wait_us(20);
// ЖДЕМ "0" НЕ БОЛЕЕ 400MKS
i=21;
D = 0;
while (--i)
{
if (!DS18_Test) goto End_Delay;
wait_us(3);
}
D = 1;
End_Delay:
_SEI();
wait_us(220);
wait_us(220);
return(D);
}
// ;****************************************************************************

void DS_Tx(char D) // ПЕРЕДАЕТСЯ МЛ. БИТАМИ ВПЕРЕД
{ // }
char i;
wait_us(2);
i = 8;
while (i--)
{
_CLI();
DS18_Zero;
DS18_Out;

if (D&1)
{ // ПЕРЕДАЕМ "1" }
wait_us(2); // !
}
else
{ // ПЕРЕДАЕМ "0"
wait_us(60); // !
}
DS18_In;
_SEI();
wait_us(60);
D >>= 1;
}
}

// ;****************************************************************************

char DS_Rx(void) // ПРИНИМАЕТСЯ С МЛАДШИХ БИТОВ
{ // }
char i, D;
D = 8;
while (D--)
{ // }
DS18_Zero;
_CLI();
DS18_Out; // !
wait_us(2); // !
DS18_In; // !
wait_us(6); // !
i >>= 1; // !
i |= (DS18_Test) ? 0x80 : 0; // !
_SEI();
wait_us(60);
}
return(i);
}
// ;****************************************************************************
void DS1820_Start(void)
{
DS_Error = DS_Reset();

DS_Tx((char)0xcc); // SKIP ROM COMMAND CCh

DS_Tx((char)0x44); // CONVERT T COMMAND 44h

DS_Mode = 0;
}

void DS1820_Read(void)
{
char DS[9];
char i;
// ВЫДЕРЖИВАЕМ ВРЕМЯ ИЗМЕРЕНИЯ
i = 80;
while ( (DS_Rx() != 0xff) && (i--) ) wait_ms(10);

DS_Error |= (DS_Reset() && 2);
DS_Tx((char)0xcc); // SKIP ROM COMMAND CCh
DS_Tx((char)0xbe); // READ SCRATCHPAD COMMAND BEh

/*
;КУСОК ДЛЯ ТОЧНОГО ИЗМЕРЕНИЯ ТЕМПЕРАТУРЫ ПО ФОРМУЛЕ
;=TEMPER-0.25+(COUNT_PER_C-COUNT_REMAIN)/COUNT_PER_C=
;=(BYTE1,BYTE0)-0.25+(BYTE7-BYTE6)/BYTE7=
;=(BYTE1,BYTE0)+0.75-BYTE6/BYTE7=
;=((BYTE1,BYTE0)+110)*100+75-BYTE6*100/BYTE7-110*100 - ЭТО БУДЕТ КОЛИЧЕСТВО
;0.005 ДОЛЕЙ ГРАДУСА С ДИАПАЗОНОМ 36000 (ДЛЯ -55...+125)
*/
DS[0] = DS_Rx();
DS[1] = DS_Rx();
DS[2] = DS_Rx();
DS[3] = DS_Rx();
DS[4] = DS_Rx();
DS[5] = DS_Rx();
DS[6] = DS_Rx();
DS[7] = DS_Rx();
DS[8] = DS_Rx();

res_t = ((float)(DS[0] | ((int)DS[1] << 8)))/2 + 0.75 - ((float)DS[6]/DS[7]);

DS_Error |= (DS_Reset() && 4);
DS_Mode = 0;
}


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru