PT100的温度,用stc8系列转换功式
时间: 2024-05-01 13:23:32 浏览: 143
PT100是一种常用的温度传感器,其输出信号是一个电阻值,需要通过转换电路将其转换为温度值。STC8系列单片机可以通过使用ADC模块来实现PT100的温度转换。
下面是一个简单的PT100温度转换代码示例:
```c
#include <STC8.H>
#define VREF 3300 // 单片机ADC参考电压为3.3V
// PT100阻值与温度转换表
const unsigned int pt100_table[201] = {
10000, 10120, 10240, 10360, 10480, 10600, 10720, 10840, 10960, 11080, // -50℃ ~ 0℃
11200, 11320, 11440, 11560, 11680, 11800, 11920, 12040, 12160, 12280, // 0℃ ~ 50℃
12400, 12520, 12640, 12760, 12880, 13000, 13120, 13240, 13360, 13480, // 50℃ ~ 100℃
13600, 13720, 13840, 13960, 14080, 14200, 14320, 14440, 14560, 14680, // 100℃ ~ 150℃
14800, 14920, 15040, 15160, 15280, 15400, 15520, 15640, 15760, 15880, // 150℃ ~ 200℃
16000, 16120, 16240, 16360, 16480, 16600, 16720, 16840, 16960, 17080, // 200℃ ~ 250℃
17200, 17320, 17440, 17560, 17680, 17800, 17920, 18040, 18160, 18280, // 250℃ ~ 300℃
18400, 18520, 18640, 18760, 18880, 19000, 19120, 19240, 19360, 19480, // 300℃ ~ 350℃
19600, 19720, 19840, 19960, 20080, 20200, 20320, 20440, 20560, 20680, // 350℃ ~ 400℃
20800, 20920, 21040, 21160, 21280, 21400, 21520, 21640, 21760, 21880, // 400℃ ~ 450℃
22000, 22120, 22240, 22360, 22480, 22600, 22720, 22840, 22960, 23080, // 450℃ ~ 500℃
23200, 23320, 23440, 23560, 23680, 23800, 23920, 24040, 24160, 24280, // 500℃ ~ 550℃
24400, 24520, 24640, 24760, 24880, 25000, 25120, 25240, 25360, 25480, // 550℃ ~ 600℃
25600, 25720, 25840, 25960, 26080, 26200, 26320, 26440, 26560, 26680, // 600℃ ~ 650℃
26800, 26920, 27040, 27160, 27280, 27400, 27520, 27640, 27760, 27880, // 650℃ ~ 700℃
28000, 28120, 28240, 28360, 28480, 28600, 28720, 28840, 28960, 29080, // 700℃ ~ 750℃
29200, 29320, 29440, 29560, 29680, 29800, 29920, 30040, 30160, 30280, // 750℃ ~ 800℃
30400, 30520, 30640, 30760, 30880, 31000, 31120, 31240, 31360, 31480, // 800℃ ~ 850℃
31600, 31720, 31840, 31960, 32080, 32200, 32320, 32440, 32560, 32680, // 850℃ ~ 900℃
32800, 32920, 33040, 33160, 33280, 33400, 33520, 33640, 33760, 33880, // 900℃ ~ 950℃
34000, 34120, 34240, 34360, 34480, 34600, 34720, 34840, 34960, 35080, // 950℃ ~ 1000℃
35200, 35320, 35440, 35560, 35680, 35800, 35920, 36040, 36160, 36280, // 1000℃ ~ 1050℃
36400, 36520, 36640, 36760, 36880, 37000, 37120, 37240, 37360, 37480, // 1050℃ ~ 1100℃
37600, 37720, 37840, 37960, 38080, 38200, 38320, 38440, 38560, 38680, // 1100℃ ~ 1150℃
38800, 38920, 39040, 39160, 39280, 39400, 39520, 39640, 39760, 39880, // 1150℃ ~ 1200℃
40000 // 1200℃
};
// 获取PT100温度
int get_pt100_temp(unsigned int pt100_res) {
int i;
for (i = 0; i < 201; i++) {
if (pt100_res <= pt100_table[i]) {
break;
}
}
return i - 50;
}
void main() {
unsigned int pt100_res;
int pt100_temp;
// 初始化ADC模块
P1M0 = 0x01; // P1.0置为输入模式
P1M1 = 0x01;
ADC_CONTR = 0xE0; // 设置ADC模块工作时钟为Fosc/32
ADC_RES = 0x80; // 设置ADC模块为8位模式
while (1) {
ADC_CONTR |= 0x08; // 开始ADC转换
while ((ADC_CONTR & 0x10) == 0); // 等待ADC转换完成
pt100_res = (ADC_RESL | (ADC_RESH << 8)); // 获取ADC转换结果
pt100_temp = get_pt100_temp(pt100_res * VREF / 256); // 将ADC转换结果转换为温度值
}
}
```
这个代码示例中,我们建立了一个PT100和温度的转换表,通过将ADC转换结果转换为电阻值,再通过查表获取温度值。需要注意的是,PT100的电阻值随温度变化而变化,所以需要建立一个完整的转换表来获取准确的温度值。
阅读全文