This commit is contained in:
2025-10-21 20:34:06 +08:00
commit c3f6375140
55 changed files with 34675 additions and 0 deletions

189
temperature.C Normal file
View File

@@ -0,0 +1,189 @@
#include "temperature.H"
#include <stdio.h>
#include <math.h>
UnSwSample UnSwSample_1 = {0};
#define Measure_Period 11000
////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>е<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
unsigned char CRC8MY(unsigned char *serial, unsigned char length)
{
unsigned char result = 0x00;
unsigned char pDataBuf;
unsigned char i;
while (length--) {
pDataBuf = *serial++;
for (i = 0; i < 8; i++) {
if ((result ^ pDataBuf) & 0x01) {
result ^= 0x18;
result >>= 1;
result |= 0x80;
}
else {
result >>= 1;
}
pDataBuf >>= 1;
}
}
return result; //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
}
//<2F>Ǿ<EFBFBD>ȷ<EFBFBD><C8B7>ʱ10*X us<75><73><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>10us
//@12.000MHz 12Tģʽ
void Delay_us(uword x)
{
for (; x > 0; x--)
{
_nop_();
_nop_();
}
}
////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB><EFBFBD><20><><EFBFBD><EFBFBD> 480 us <20>͵<EFBFBD>ƽ<EFBFBD><C6BD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char ow_resetpresence(void)
{
unsigned char presence; int count=0;
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DIR = P3_DIR | 0x20; // load direction register P3.5<EFBFBD>л<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DQ = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(240); // <20><><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 480us
DQ = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DIR = P3_DIR & 0xDF;// load direction register
Delay_us(40); // <20>ȴ<EFBFBD> 80us <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> presence
presence = DQ; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
while( presence && (count< 17) )
{
Delay_us(2);
presence = DQ;
count++;
}
Delay_us(200); // ʱ<><CAB1>ĩβ <20>ȴ<EFBFBD>
return(presence);
} // presence =0 ʱ<><CAB1> M6 01 <20><><EFBFBD><EFBFBD> , presence =1 ʱ<><CAB1> M601 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
////////////////////////////////////////////////////////////////////
//// READ_BIT <20>C <20><> M601 <20><>ȡ һλ<D2BB><CEBB>
unsigned char read_bit(void)
{
unsigned char res;
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DIR = P3_DIR | 0x20; // load direction register <20>л<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬
DQ = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(2); // <20><><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 3us
DQ = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> DQ <20><><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Delay_us(5); // <20>ȴ<EFBFBD> 10us ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DIR = P3_DIR & 0xDF;// load direction register
res = DQ;
Delay_us(28); // ʱ<><CAB1>ĩβ <20>ȴ<EFBFBD>
return(res); // <20><><EFBFBD>ض<EFBFBD>ȡ <20><>ֵ
}
////////////////////////////////////////////////////////////////////
//// WRITE_BIT <20>C <20><><EFBFBD><EFBFBD> дһλ<D2BB><CEBB><EFBFBD><EFBFBD> <20><> M601
void write_bit(char bitval)
{
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DIR = P3_DIR | 0x20; // load direction register <20>л<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬
DQ = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(2); // <20><><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 5us
if(bitval == 1) DQ =1; // <20><><EFBFBD><EFBFBD> д 1<><31><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(25); // <20><><EFBFBD><EFBFBD> д 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DQ <20><><EFBFBD><EFBFBD> 60 us
DQ = 1; // <20>ͷ<EFBFBD> DQ <20><><EFBFBD><EFBFBD>
Delay_us(5); // <20><>д 0<><30><EFBFBD>ָ<EFBFBD> ʱ<><CAB1> 10us
}
/////////////////////////////////////////////////////////////////////
//// READ_BYTE - <20><> M601 <20><>ȡ һ<>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char read_byte(void)
{
unsigned char i, j;
unsigned char value = 0;
for (i = 0;i < 8;i++) {
j = read_bit();
value = (value) | (j<<i); // ÿ<>ζ<EFBFBD><CEB6><EFBFBD> 1 λ(<28><>λ <20><><EFBFBD><EFBFBD> ), Ȼ<><C8BB> <20><><EFBFBD><EFBFBD>
}
return(value);
}
/////////////////////////////////////////////////////////////////////
//// WRITE_BYTE - <20><><EFBFBD><EFBFBD> дһ<D0B4>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD> <20><> M601
void write_byte(char val)
{
unsigned char i;
unsigned char temp;
for (i = 0; i < 8; i++) { // д<>ֽ<EFBFBD> ,ÿ<><C3BF> һλ
temp = val >> i;
temp &= 0x01; // <20><>λ <20><><EFBFBD><EFBFBD>
write_bit(temp);
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Single_point_Read_Temperature(void)
{
unsigned char get[9];
unsigned char tpmsb, tplsb, i;
int signedInt_f_tem;
short s_tem;
short wtem;
float f_tem;
UnSwSample_1.bit_data.reserve = 0;
if (ow_resetpresence())
{
// <20><><EFBFBD><EFBFBD><E9B1A3><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Ų<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// printf("\nPresence Error\n");
UnSwSample_1.bit_data.reserve = 0x01;
}
write_byte(0xCC); //Skip ROM <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> ƥ<><C6A5> ROM <20><><EFBFBD>к<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>
write_byte(0x44); // ת<><D7AA> <20><EFBFBD>
Delay_us(Measure_Period / 2);
// <20><EFBFBD> ת<><D7AA>ʱ<EFBFBD>䣬 Ӧ<><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>üĴ<C3BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1> 4ms <20><>5.5ms <20><> 10.5m
if (ow_resetpresence())
{
// <20><><EFBFBD><EFBFBD><E9B1A3><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Ų<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// printf("\nPresence Error\n");
UnSwSample_1.bit_data.reserve = 0x02;
}
write_byte(0xCC); // Skip ROM <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> ƥ<><C6A5> ROM <20><><EFBFBD>к<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>
write_byte(0xBE); // <20><>ȡ Scratch Pad <20><><EFBFBD><EFBFBD>ֵ
for (i = 0; i < 9; i++) get[i]=read_byte();
if(get[8] != CRC8MY(get,8))
{
// <20><><EFBFBD><EFBFBD><E9B1A3><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// printf("\nCRC Error\n");
UnSwSample_1.bit_data.reserve = 0x03;
}
else
{
tpmsb = get[1]; // <20>¶ȸ<C2B6><C8B8>ֽ<EFBFBD>
tplsb = get[0]; // <20><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD>
wtem= (tpmsb << 8 | tplsb);
s_tem =(short) wtem;
f_tem=(s_tem * 1.0)/256 + 40.0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
signedInt_f_tem = (int)f_tem;
// <20><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnSwSample_1.bit_data.temperature = (unsigned int)signedInt_f_tem;
// printf( "\nTemp= %f degrees C\n", f_tem); // <20><>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}