|
|
Postat pe 25.11.2014 22:12:09
|
|
|

[mw_shl_code=c,true]#include<pic.h> // Folosește oscilatorul cu cristal de 12M #include"12864.h" #define uint unsigned int #define uchar personaj nesemnat __CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF); Uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, verificat; uint delay_time; void timer0_init()
{ TMR0=0; Prima valoare T0CS=0; Selectează sursa de ceas, care reprezintă 1/4 din oscilatorul de cristal; T0SE=1; Biți de selecție a marginii sursei de ceas PSA=0; Biți de alocare a predivizorului PS0=0; PS1=0; PS2=0; Biți de selecție înainte de diviziune TMR0IF=0; Steagul cronometrului este clar 0 GIE=1; Deschide întreruperea globală TMR0IE=0; Timer 0 activat TMR0=236; Prima valoare a poeziei
} Întrerupere Void Timer0()
{ if(TMR0IF) { TMR0IF=0; TMR0=235; delay_time--; }
} void timer0_delay(uint delay_value)
{ delay_time=delay_value; TMR0IE=1; în timp ce (delay_time); TMR0IE=0;
} Uchar Read_byte()
{ uchar i, temp, hum; for(i=0; i<8; i++) { în timp ce (! RC1); timer0_delay(2); Întârziere 20us temp=0; if(RC1){temp=1; while (RC1); } else{temp=0; } hum<<=1; hum|=temp; } revenire (hum);
} void Read_data()
{ Uchar ckeck_value; RC1=0; timer0_delay(2500); Autobuzul este tras în jos de cel puțin 18 MS RC1=1; timer0_delay(2); Magistrala este trasă în sus de rezistența de pull-up, iar întârzierea gazdei este de 20us TRISC1=1; Gazda este setată să intre pentru a judeca semnalul de răspuns al sclavului RC1=1; dacă(! RC1) { în timp ce (! RC1)) // Determină dacă sclavul emite un semnal de răspuns scăzut de 80us sau nu { NOP(); } while(RC1) // Determină dacă sclavul emite un nivel ridicat de 80us și, dacă da, intră în starea de recepție a datelor { NOP(); } temp_valueH=Read_byte(); temp_valueL=Read_byte(); hum_valueH=Read_byte(); hum_valueL=Read_byte(); verifică=Read_byte(); ckeck_value=hum_valueL+hum_valueH+temp_valueL+temp_valueH; if(bifat==ckeck_value) { Proce_num(0x84,temp_valueH); Proce_num(0x94,hum_valueH); } } TRISC1=0; RC1=1;
} void main()
{ TRISB=0X00; lcdinit(); timer0_init(); în timp ce (1) { Read_data(); } }[/mw_shl_code]
|
Precedent:Gândire și programare goală [Serializat]Următor:Beneficii sociale, reguli de denumire în limba C, lucruri foarte practice
|