Programación de conexión entre microcontrolador y sensor
¿#Definición? ¿Uchar? ¿No firmado? ¿Ciel?
¿#Definición? uint? ¿No firmado? int?
¿un poquito? dq=p1^4;? //¿Interfaz entre ds18b20 y el microcontrolador?
¿No está firmado? ¿Ciel? ¿Código? str[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00, 0x40}? ;? //* * *Tabla de códigos de tubos digitales Yin
¿No está firmado? ¿Ciel? ¿Código? str1[]={0x0bf, 0x86, 0x0db, 0x0cf, 0x0e6, 0x0ed, 0x0fd, 0x87, 0x0ff, 0x0ef};? //Tabla de códigos numéricos con punto decimal
¿Sin firmar? ¿Ciel? ¿Código? wei[]={0x0fe, 0x0fd, 0x0fb, 0x0f 7};?
¿Uchar? ¿datos? disdatos[5];?
¿uint? tvalue//Valor de temperatura?
¿Uchar? tflag//¿Signo positivo y negativo de temperatura?
/* * * * * * * * * Programa DS1820 * * * * * * * * * */?
¿Anulado? delay_18B20(¿sin firmar?int?i)? //¿Retraso de 1 microsegundo?
{?
mientras(yo-);?
}
¿Anulado? ds 1820 primero()/* ds 1820 restablecer */?
{?
¿No está firmado? ¿Ciel? x = 0;?
¿DQ? =?1; //¿Restablecer DQ?
retraso _ 18b 20(4); //¿Retraso?
¿DQ? =?0;//¿DQ desplegable?
retraso _ 18b 20(100);? // ¿El retraso exacto es mayor que 480us?
¿DQ? =?1; //¿Levantar?
retraso _ 18b 20(40);
} ?
Uchar? Ds1820rd() /*Leer datos*/?
{?
¿No está firmado? ¿Ciel? Yo = 0;?
¿No está firmado? ¿Ciel? eso? =?0;?
¿Para qué? (I = 8; I gt0; I-)
{
DQ? =?0;? // ¿Dar una señal de pulso?
dat gt=1;
DQ? =?1;? // ¿Dar una señal de pulso?
¿Y si (DQ)? dato | = 0x80?
retraso _ 18b 20(10);?
}?
return(dat);
}?
¿Anulo? ds1820wr(uchar?Wdata) /*escribir datos*/?
{
¿No estás firmado? ¿Ciel? Yo = 0;?
¿Para qué? (I = 8;?i gt0;?i-)
{
DQ? =?0;?
¿DQ? =?wdata amp0x 01;?
retraso _ 18b 20(10);?
¿DQ? =?1;?
wdata gt gt=1
}
}?
Read_temp() /*Leer el valor de temperatura y convertirlo* /?
{
¿Uchar? A, B;?
d
s 1820 primero();?
ds 1820 wr(0xcc);? //Omitir lectura del número de secuencia
ds 1820 wr(0x 44);? //¿Iniciar conversión de temperatura?
ds 1820 primero();?
ds 1820 wr(0xcc);? //¿Saltar el número de secuencia de lectura?
ds 1820 wr(0x ser);? //Temperatura de lectura
a = ds 1820 rd();?
b = ds 1820rd();?
tvalor=b;?
tvalor lt lt=8;?
tvalue = tvalue | a;
if(t valor lt; 0x0fff)
tflag = 0;
Otro
{
tvalor = ~ tvalor 2;? bandera t = 1;? // ¿Temperatura negativa?
}
tvalor = tvalor *(0.625);? //El valor de temperatura se amplifica 10 veces y tiene una precisión de 1 decimal.
return(tvalue);
}
/************************ ***********/
¿Anulado? Ds1820disp() //Visualización del valor de temperatura
{
Uchar? Yo;
disdata[0]= tvalue/1000;? //Cientos de dígitos
disdata[1]= valor t 1000/100;? // ¿Diez dígitos?
disdata[2]= t valor 100/10; //Un dígito
disdata[3]= t valor 10; //Número decimal
if (tflag==0)
{
if(disdata[0]==0x00)
? {
? disdata[0]= 0; //No se muestra cuando el dígito de las centenas es 0.
? si(disdata[1]==0x00)? datos[1]=0;? //El dígito de las decenas es 0 y no se muestra.
? }
}
¿Y si? // ¿Temperatura negativa?
{
disdata[0]= 0x0b;? //Las temperaturas negativas muestran signos negativos en unidades de centenas: -
if(disdata[1]==0x00)? disdata[1]= 0; //El dígito de las decenas es 0 y no se muestra.
}
for(I = 0;ilt150;i)
{
P2 = Wei[0];
p>
P0 = str[disdata[3]];
retraso _ 18b 20(20);
P2 = Wei[1]; p>
P0 = str 1[disdata[2]];
retraso _ 18b 20(20);
=Wei[2];
P0 = str [disdata[1]];
retraso _ 18b 20(20);
=Wei[3];
P0 = str[ disdata[0] ];
retraso _ 18b 20(20);
}
}
* * * * * * * * * * Programa principal * * * * * * * *
¿Evitado? main()
{
ds 1820 primero();? //Inicializar visualización
while(1)
{
read _ temp(); //Leer temperatura
ds 1820 disp (); //Mostrar
}
}?