[
#include <18f4550.h> //Libreria del PIC a usar
#Fuses HSPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, PLL2, CPUDIV1, VREGEN //Palabra de configuración
#use delay (clock=48M) //Frecuencia del reloj del pic //Esta función afecta directamente al registro para configurar como entrada o salida
#include <MLCD.c>
#DEFINE DHT11 PIN_A2
VOID START_SIGNAL(VOID) {
OUTPUT_DRIVE(DHT11); // Configure connection pin as output
OUTPUT_LOW(DHT11); // Connection pin output low
DELAY_MS(25); // Wait 25 ms
OUTPUT_HIGH(DHT11); // Connection pin output high
DELAY_US(30); // Wait 30 us
OUTPUT_FLOAT(DHT11); // Configure connection pin as input
}
INT1 CHECK_RESPONSE(VOID) {
WHILE(INPUT(DHT11)){
RETURN 0;
}
DELAY_US(80);
WHILE(!INPUT(DHT11)){
RETURN 0;
}
RETURN 1;
}
INT1 READ_DATA(FLOAT*TEMPERATURA11,FLOAT*HUMEDAD11){
INT8 I,X=0;
INT8 DATA[5];
OUTPUT_DRIVE(DHT11);
FOR (X=0; X<5; X++){
INT8 VALUE=0;
FOR(I=0;I<8;I++){
VALUE<<=1;
WHILE(!INPUT(DHT11));
DELAY_US(38);
IF(INPUT(DHT11))
{
VALUE |=1;
}
WHILE(INPUT(DHT11));
}
DATA[X]=VALUE;
}
IF((int8)(DATA[0] + DATA[1] + DATA[2] +DATA[3])==DATA[4])
{
INT16 RAWHUMEDAD=DATA[0]<<8 | DATA[1];
INT16 RAWTEMPERATURA=DATA[2]<<8 | DATA[3];
IF(RAWTEMPERATURA & 0X8000){
*TEMPERATURA11=(FLOAT)((RAWTEMPERATURA & 0x7fff)/10.0)*-1.0;
}
ELSE
{
*TEMPERATURA11 =(FLOAT)(RAWTEMPERATURA)/10.0;
}
*HUMEDAD11=((FLOAT)(RAWHUMEDAD)/10);
RETURN 1 ;
}
RETURN 0;
}
VOID MAIN(VOID){
FLOAT TEMPERATURA;
FLOAT HUMEDAD;
LCD_INIT();
START_SIGNAL();
CHECK_RESPONSE();
WHILE (TRUE){
INT8 ESTADO = READ_DATA(&TEMPERATURA,&HUMEDAD);
IF(ESTADO==1) {
LCD_GOTOXY(1,1);
printf(lcd_putc
,"TEMP=%04.2f",TEMPERATURA
); lcd_putc(" ");
LCD_GOTOXY(1,2);
printf(lcd_putc
,"HUM=%04.2f",HUMEDAD
); }
ELSE{
lcd_gotoxy(1,1);
lcd_putc("SENSOR NO CONECTADO");
}
DELAY_MS(20);
}
RETURN ;
}
]
me sirvio pero ahora me compilabien el programa y todo pero en la lcd me arroja 0.20 en la temperatura y 12.80 pero son valores erroneos podrias ayudarme no se que puede estar mal