Programación C51 para DS18B20
No, en tu caso lee dos veces y saca el promedio. Si desea mostrarlo, agregue
temp.x=(temp.x/2)*0.625; *0.625 es la temperatura real
return temp.x;
El programa que usé antes:
#include "reg52. h"
#include lt;intrins.hgt;
# define DQ P0_0 //DS18B20 bit de puerto de datos P0.0
#define INT8U unsigned char
#define INT16U unsigned int
void DelayXus(INT8U n);
void DS18B20_Reset();
void DS18B20_WriteByte(INT8U dat);
INT8U DS18B20_ReadByte();
INT8U TPL; p >
INT8U TPH;
Pestaña código INT8U[16]={0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64 , 0x65, 0x66};
void delay_lcd(int ms); //retraso
unsigned int t //Valor de temperatura de 16 bits
void main (void )
{ lcdinit();
while(1)
{
DS18B20_Reset() //Restablecimiento del dispositivo
DS18B20_WriteByte(0xCC); // Saltar comando ROM
DS18B20_WriteByte(0x44);