Zdravím všechny a žádám o radu, kde bych mohl mít chyby v kódu. Proměnné tempL a tempH zobrazuji na displeji, ale jejich hodnoty jsou 0.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 4000000
#define C PORTEbits.RE0
#define TRE TRISEbits.TRISE0
__CONFIG(FOSC_XT & WDTE_OFF & PWRTE_OFF);
/*-------------------------------------------------------------*/
//Komunikace s DS 18B20
/*-------------------------------------------------------------*/
void OWReset()
{
int out;
C=0;
TRE = 0;
__delay_us(480);
C=1;
TRE = 1;
__delay_us(70);
if(C == 0)
out=0;
else
out=1;
__delay_us(410);
//return(out);
}
void OWWriteBit(int bita)
{
if (bita)
{
C=0;
TRE = 0;
__delay_us(6);
C = 1;
TRE = 1;
__delay_us(64);
}
else
{
C=0;
TRE = 0;
__delay_us(60);
C=1;
TRE = 1;
__delay_us(10);
}
}
void OWWriteByte(int data)
{
int loop;
for (loop = 0; loop < 8; loop++)
{
OWWriteBit(data & 0x01);
data >>= 1;
}
}
int OWReadBit(void)
{
int result;
C=0;
TRE = 0;
__delay_us(6);
C=1;
TRE = 1;
__delay_us(9);
result = C & 0x01;
__delay_us(55);
return result;
}
int OWReadByte(void)
{
int loop=0, result=0;
for (loop = 0; loop < 8; loop++)
{
result >>= 1;
if (OWReadBit())
result |= 0x80;
}
return result;
}
/*-------------------------------------------------------------*/
void main()
{
int tempL, tempH;
//int out;
OWReset();
OWWriteByte(0xCC); // skip ROM
OWWriteByte(0x44); // convert T
__delay_ms(750);
OWReset();
OWWriteByte(0xCC); //skip ROM
OWWriteByte(0xBE); //read scratchpad
tempL = OWReadByte(); //cteni spodniho bytu teploty
tempH = OWReadByte(); //cteni horniho bytu teploty
}