Sunteți pe pagina 1din 5

//HABILITE LIBRERIAS DE UART Y LCD

//CODIGO: EDWIN NOLBERTO COPA APAZA


//INGENIERIA ELECTRONICA UNSA

//Pines de salida para el LCD


sbit LCD_RS at PORTB.B5;
sbit LCD_EN at PORTB.B4;
sbit LCD_D7 at PORTB.B3;
sbit LCD_D6 at PORTB.B2;
sbit LCD_D5 at PORTB.B1;
sbit LCD_D4 at PORTB.B0;
//Bits de configuraci�n TRIS
sbit LCD_RS_Direction at TRISB.B5;
sbit LCD_EN_Direction at TRISB.B4;
sbit LCD_D7_Direction at TRISB.B3;
sbit LCD_D6_Direction at TRISB.B2;
sbit LCD_D5_Direction at TRISB.B1;
sbit LCD_D4_Direction at TRISB.B0;

//variables necesarias
unsigned char T_U_1=0,T_D_1=0,H_U_1=0,H_D_1=0;
unsigned char REVISION_1;
unsigned char BYTE_T2_1,BYTE_T1_1,BYTE_H2_1,BYTE_H1_1,CHECK_1;
unsigned sum_1;

unsigned char T_U_2=0,T_D_2=0,H_U_2=0,H_D_2=0;


unsigned char REVISION_2;
unsigned char BYTE_T2_2,BYTE_T1_2,BYTE_H2_2,BYTE_H1_2,CHECK_2;
unsigned sum_2;
unsigned dif;
unsigned dif_1;
//Bits entrada y salida, bit de configuracion
sbit DHT11_DATO_1 at PORTD.B0;
sbit DHT11_CONFIG_1 at TRISD.B0;

sbit DHT11_DATO_2 at PORTD.B1;


sbit DHT11_CONFIG_2 at TRISD.B1;
////////////////////////////////////////////////////////////////////////////////
//Funcion de inicio del DHT11_1
void PEDIDO_MCU_1()
{
DHT11_CONFIG_1=0; //Configuro como salida el pin RC0
DHT11_DATO_1=0; //Mando un cero al DTH11
delay_ms(18); //Esperamos 18 ms para el cambio
DHT11_DATO_1=1; //Cambiamos a estado logico alto
delay_us(30); //Esperamos 30 us en respuesta al DHT11
DHT11_CONFIG_1=1; //Configuro como entrada el pin RC0
}
void RESPUESTA_DHT11_1()
{
REVISION_1=0;
delay_us(40);
if(DHT11_DATO_1==0)
{
delay_us(80);
if(DHT11_DATO_1==1)
{
REVISION_1=1;
}
delay_us(40);
}
}
char lectura_DHT11_1()
{
char i_1,j_1;
for (j_1=0;j_1<8;j_1++)
{
while(!DHT11_DATO_1);
delay_us(30);
if(DHT11_DATO_1==0)
{
i_1&=~(1<<(7-j_1));
}
else
{
i_1|=(1<<(7-j_1));
while(DHT11_DATO_1);

}
}
return i_1;
}

////////////////////////////////////////////////////////////////////////////////
//Funcion de inicio del DHT11_2
void PEDIDO_MCU_2()
{
DHT11_CONFIG_2=0; //Configuro como salida el pin RC0
DHT11_DATO_2=0; //Mando un cero al DTH11
delay_ms(18); //Esperamos 18 ms para el cambio
DHT11_DATO_2=1; //Cambiamos a estado logico alto
delay_us(30); //Esperamos 30 us en respuesta al DHT11
DHT11_CONFIG_2=1; //Configuro como entrada el pin RC0
}
void RESPUESTA_DHT11_2()
{
REVISION_2=0;
delay_us(40);
if(DHT11_DATO_2==0)
{
delay_us(80);
if(DHT11_DATO_2==1)
{
REVISION_2=1;
}
delay_us(40);
}
}
char lectura_DHT11_2()
{
char i_2,j_2;
for (j_2=0;j_2<8;j_2++)
{
while(!DHT11_DATO_2);
delay_us(30);
if(DHT11_DATO_2==0)
{
i_2&=~(1<<(7-j_2));
}
else
{
i_2|=(1<<(7-j_2));
while(DHT11_DATO_2);

}
}
return i_2;
}

void main()
{ //INICIALIZANDO DHT11_UART_VETILADORES
TRISC.B0=0;
PORTC.B0=0;
TRISC.B1=0;
PORTC.B1=0;
TRISC.B2=0;
PORTC.B2=0;
Lcd_Init(); //Inicio del LCD.
Lcd_Cmd(_LCD_CLEAR); //Limpia el LCD.
Lcd_Cmd(_LCD_CURSOR_OFF); //Se apaga el cursor.
Lcd_out(1,1,"T1=");
Lcd_out(1,6,"oC");
Lcd_out(2,1,"H1=");
Lcd_out(2,6,"%");
Lcd_out(1,10,"T2=");
Lcd_out(1,15,"oC");
Lcd_out(2,11,"H2=");
Lcd_out(2,16,"%");
UART1_Init(9600); //Inicio del m�dulo USART.
UART1_Write_Text("Bienvenido al simulador:");
UART1_Write(13);
UART1_Write(10);
while(1) //Bucle infinito.
{
PEDIDO_MCU_1();
RESPUESTA_DHT11_1();
if(REVISION_1==1)
{
BYTE_H2_1=lectura_DHT11_1();
BYTE_H1_1=lectura_DHT11_1();
BYTE_T2_1=lectura_DHT11_1();
BYTE_T1_1=lectura_DHT11_1();
CHECK_1=lectura_DHT11_1();
delay_us(50);
sum_1=BYTE_T2_1+BYTE_T1_1+BYTE_H2_1+BYTE_H1_1;
if(CHECK_1==(sum_1&0xFF))
{
T_D_1=BYTE_T2_1/10;
T_U_1=BYTE_T2_1%10;
H_D_1=BYTE_H2_1/10;
H_U_1=BYTE_H2_1%10;

T_D_1=T_D_1+0x30;
T_U_1=T_U_1+0x30;
H_D_1=H_D_1+0x30;
H_U_1=H_U_1+0x30;

Lcd_Chr(1,4, T_D_1);
Lcd_Chr(1,5, T_U_1);
Lcd_Chr(2,4, H_D_1);
Lcd_Chr(2,5, H_U_1);

if(UART1_Tx_Idle()==1)
{
UART1_Write_Text("Temp1=");
UART1_Write(T_D_1);
UART1_Write(T_U_1);
UART1_Write(248); //�
UART1_Write_Text("C");
UART1_Write(32); //ESPACIO
UART1_Write_Text("Hume1=");
UART1_Write(H_D_1);
UART1_Write(H_U_1);
UART1_Write(37); //%
UART1_Write(32); //ESPACIO
UART1_Write(32); //ESPACIO
}
}
}

PEDIDO_MCU_2();
RESPUESTA_DHT11_2();
if(REVISION_2==1)
{
BYTE_H2_2=lectura_DHT11_2();
BYTE_H1_2=lectura_DHT11_2();
BYTE_T2_2=lectura_DHT11_2();
BYTE_T1_2=lectura_DHT11_2();
CHECK_2=lectura_DHT11_2();
delay_us(50);
sum_2=BYTE_T2_2+BYTE_T1_2+BYTE_H2_2+BYTE_H1_2;
if(CHECK_2==(sum_2&0xFF))
{
T_D_2=BYTE_T2_2/10;
T_U_2=BYTE_T2_2%10;
H_D_2=BYTE_H2_2/10;
H_U_2=BYTE_H2_2%10;

T_D_2=T_D_2+0x30;
T_U_2=T_U_2+0x30;
H_D_2=H_D_2+0x30;
H_U_2=H_U_2+0x30;

Lcd_Chr(1,13, T_D_2);
Lcd_Chr(1,14, T_U_2);
Lcd_Chr(2,14, H_D_2);
Lcd_Chr(2,15, H_U_2);

if(UART1_Tx_Idle()==1)
{
UART1_Write_Text("Temp2=");
UART1_Write(T_D_2);
UART1_Write(T_U_2);
UART1_Write(248); //�
UART1_Write_Text("C");
UART1_Write(32); //ESPACIO
UART1_Write_Text("Hume2=");
UART1_Write(H_D_2);
UART1_Write(H_U_2);
UART1_Write(37); //%
UART1_Write(13); //INICIO
UART1_Write(10); //NUEVA LINEA
}
}
}
dif=BYTE_T2_2-BYTE_T2_1;
dif_1=BYTE_H2_1-BYTE_H2_2;
if(dif<=2) //PREGUNTA SI LA TEMPERATURA ESTABLE
{
PORTC.B0=0; //APAGA VENTILADOR 1
PORTC.B1=0; //APAGA VENTILADOR 2
if(dif_1<=10) //PREGUNTA SI LA HUMEDAD ES ESTABLE
{
if(BYTE_H2_1<=26) //PREGUNTA SI LA HUMEDAD ES ESTABLE
{
PORTC.B2=1; //ENCIENDE LED DE AVISO
}
}
else
PORTC.B2=0; //APAGA LED DE AVISO
}
else
{
PORTC.B0=1;
PORTC.B1=1;
if(dif_1<=10) //PREGUNTA SI LA HUMEDAD ES ESTABLE
{
if(BYTE_H2_1<22) //PREGUNTA SI LA HUMEDAD ES MENOR QUE 22%
{
PORTC.B2=1;
PORTC.B0=0;
PORTC.B1=0;
}
}
else
PORTC.B2=0;
}
}
}

S-ar putea să vă placă și