Upravil jsem si program, aby mi vypisoval i číslo měření, protože sem tam se mi to sekne a nedostane se to ani do while(1) a kolikrát to přestane i měřit.
Když tam dám u teploty a vlhkosti
volatile unsigned int
tak mi to vypíše hned při prvním měření u hodnot měření, teploty a vlhkosti 8224 a tu to vypíše vždycky při dalších měřeních.
Můj program teď vypadá takto
[code]unsigned char Check;
void StartSignal()
{
TRISA = 0b00000000; //PORTA je výstup
RA0 = 0; //RA0 jde do 0 = startovacísignál
__delay_ms(18);//18
RA0 = 1; //RA0 se vrací do 1
__delay_us(30);
TRISA = 0b11111111; //PORTA je vstupní
}
void CheckResponse()
{
Check = 0;
__delay_us(40);
if (RA0 == 0)
{
__delay_us(80);//80
if (RA0 == 1)
Check = 1;
__delay_us(40);//40
}
}
char ReadData()
{
char i, j;
for(j = 0; j < 8; j++)
{
while(RA0 == 0); //Čeká dokud je RA0 v 0
__delay_us(40);//30 hranice mezi log 0 a log 1
if(RA0 == 0) //Zkouší, zda je RA0 po uplynulé době v 1 čí 0
i&= ~(1<<(7 - j)); //Znuluje bit
else
{
i|= (1 << (7 - j)); //Nastaví bit do 1
while(RA0 == 1); //Čeká dokud je RA0 v 1
break;
}
}
return i;
}
void main(void)
{
PSPIE = 0;
PSPMODE = 0;
ADCON1 = 7;
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00000000;
TRISD = 0b00000000;
GLCD_Init();
__delay_ms(100);
GLCD_ClrScr();
unsigned int i = 0;
char text1[16];
char text2[16];
char text3[16];
GLCD_ClrScr();
volatile unsigned int T_byte1, T_byte2, RH_byte1, RH_byte2;
volatile unsigned int Temp, RH, Sum ;
TRISA = 0b00000000; //RA0 jako vstup
TRISC = 0b00000000;
int a =0;
__delay_ms(1000);
unsigned int teplota = 0;
unsigned int vlhkost = 0;
sprintf(text3,"Mereni: %d ",a);
GLCD_text(0, 2,text3 );
sprintf(text1,"Teplota: %d^C ",teplota);
GLCD_text(0, 4,text1 );
sprintf(text2,"Vlhkost: %d ` ",vlhkost);
GLCD_text(0, 6,text2 );
RC7 = 1; __delay_ms(100); RC7 = 0; __delay_ms(500);
while(1)
{
StartSignal();
CheckResponse();
RH_byte1 = ReadData();
RH_byte2 = ReadData();
T_byte1 = ReadData();
T_byte2 = ReadData();
Sum = ReadData();
teplota = (T_byte1 << 8 )| T_byte2;
vlhkost = (RH_byte1 << 8 )| RH_byte2;
GLCD_ClrScr();
sprintf(text3,"Mereni: %d ",a);
GLCD_text(0, 2,text3 );
sprintf(text1,"Teplota: %d^C ",teplota);
GLCD_text(0, 4,text1 );
sprintf(text2,"Vlhkost: %d ` ",vlhkost);
GLCD_text(0, 6,text2 );
a++;
RC7 = 1;
__delay_ms(500);
RC7 = 0;
__delay_ms(500);
RC7 = 1;
__delay_ms(500);
RC7 = 0;
__delay_ms(500);
RH_byte1 = 0;
RH_byte2 = 0;
T_byte1 = 0;
T_byte2 = 0;
teplota = 0;
vlhkost = 0;
}//end while(1)
}//end main
[/code]