79 lines
1.1 KiB
C
79 lines
1.1 KiB
C
#include "temp.h"
|
|
|
|
void Delay1ms(uint y) {
|
|
uint x;
|
|
for(; y > 0; y--) {
|
|
for(x = 110; x > 0; x--);
|
|
}
|
|
}
|
|
|
|
uchar Ds18b20Init(void) {
|
|
uchar i;
|
|
DSPORT = 0; // Pull down bus
|
|
i = 70;
|
|
while(i--);
|
|
DSPORT = 1; // Pull up bus
|
|
i = 0;
|
|
while(DSPORT) {
|
|
Delay1ms(1);
|
|
i++;
|
|
if(i > 5) return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
void Ds18b20WriteByte(uchar payload) {
|
|
uint i, j;
|
|
for(j = 0; j < 8; j++) {
|
|
DSPORT = 0;
|
|
i++;
|
|
DSPORT = payload & 0x01;
|
|
i = 6;
|
|
while(i--);
|
|
DSPORT = 1;
|
|
payload >>= 1;
|
|
}
|
|
}
|
|
|
|
uchar Ds18b20ReadByte(void) {
|
|
uchar byte, bi;
|
|
uint i, j;
|
|
for(j = 8; j > 0; j--) {
|
|
DSPORT = 0;
|
|
i++;
|
|
DSPORT = 1;
|
|
i++;
|
|
i++;
|
|
bi = DSPORT;
|
|
byte = (byte >> 1) | (bi << 7);
|
|
i = 4;
|
|
while(i--);
|
|
}
|
|
return byte;
|
|
}
|
|
|
|
void Ds18b20ChangTemp(void) {
|
|
Ds18b20Init();
|
|
Delay1ms(1);
|
|
Ds18b20WriteByte(0xCC);
|
|
Ds18b20WriteByte(0x44);
|
|
}
|
|
|
|
void Ds18b20ReadTempCom() {
|
|
Ds18b20Init();
|
|
Delay1ms(1);
|
|
Ds18b20WriteByte(0xCC);
|
|
Ds18b20WriteByte(0xBE);
|
|
}
|
|
|
|
int Ds18b20ReadTemp() {
|
|
int temp = 0;
|
|
uchar th, tl;
|
|
Ds18b20ChangTemp();
|
|
Ds18b20ReadTempCom();
|
|
temp = th;
|
|
temp <<= 8;
|
|
temp |= tl;
|
|
return temp;
|
|
}
|