Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 10156|Odpowiedź: 0

pic16F877a steruje czujnikiem temperatury i wilgotności DHT11

[Skopiuj link]
Opublikowano 25.11.2014 22:12:09 | | |
[mw_shl_code=c,true]#include<obraz.h> // Użyj oscylatora kryształowego 12M
#include"12864.h"
#define uint unsigned int
#define Uchar bez podpisu
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
Uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, odhaczone;
uint delay_time;
pustka timer0_init()
{
   TMR0=0;  Pierwsza wartość
   T0CS=0;  Wybierz źródło zegara, które stanowi 1/4 oscylatora kryształowego;
   T0SE=1;   Bity wyboru krawędzi źródła zegara
   PSA=0;    Bity alokacji predividera
   PS0=0; PS1=0; PS2=0;  Bity wyboru przed podziałem
   TMR0IF=0;    Flaga timera jest czysta 0
   GIE=1;       Otwórz globalne przerwanie
   TMR0IE=0;    Timer 0 włączony
   TMR0=236;    Pierwsza wartość wiersza
}
przerwanie void timer0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
pustka timer0_delay(uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    while(delay_time);
    TMR0IE=0;
}
Uchar Read_byte()
{
uchar i, temp, hum;
   for(i=0; i<8; i++)   
    {
       while(! RC1);   
       timer0_delay(2); Opóźnienie 20 USD  
       temp=0;
       if(RC1){temp=1; while(RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=temp;                           
  }
   return(hum);
}
void Read_data()
{
Uchar ckeck_value;
RC1=0;
timer0_delay(2500); Autobus jest ciągnięty w dół co najmniej o 18 MS
RC1=1;
timer0_delay(2); Magistrala jest podciągana przez rezystor podciągający, a opóźnienie hosta wynosi 20us
TRISC1=1;     Host jest ustawiony na wejście do oceny sygnału odpowiedzi podrzędnego
RC1=1;
  if(! RC1)
  {
   while((! RC1)) // Określ, czy operator podrzędny emituje sygnał o niskiej odpowiedzi 80us, czy nie
   {
    NOP();
   }
   while(RC1) // Określ, czy operator podrzędny emituje wysoki poziom 80us, a jeśli tak, to wchodzi w stan odbioru danych
   {
    NOP();
   }
   temp_valueH=Read_byte();
   temp_valueL=Read_byte();
   hum_valueH=Read_byte();
   hum_valueL=Read_byte();
   check=Read_byte();
   ckeck_value=hum_valueL+hum_valueH+temp_valueL+temp_valueH;
  if(check==ckeck_value)
   {
      Proce_num(0x84,temp_valueH);
      Proce_num(0x94,hum_valueH);
   }
  }
  TRISC1=0;
  RC1=1;
}
void main()
{
  TRISB=0X00;
  lcdinit();
  timer0_init();
  while(1)
  {
   Read_data();
  }
}[/mw_shl_code]




Poprzedni:Myślenie i naked programming [serializowane]
Następny:Świadczenia socjalne, zasady nazewnictwa w języku C, bardzo praktyczne rzeczy
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com