serialicon8051_next/lib/peripheral/temp.c
2024-11-28 00:54:11 +08:00

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;
}