求助:PT100测量温度不变化

2020-02-08 09:21发布

PT100通过电阻连接到PIC单片机的AD口
程序思路:单片机采集PT100送过来的模拟信号,经内部AD转换,输出电压值,根据串联分压原理,计算PT100的阻值,根据查找表,找出对应温度
存在问题:用可调电位器模拟时,输出随调节进行变化;用PT100时,置于室温和开水中,温度不变化
麻烦各位帮忙解决
程序如下
#include<pic.h>              //包含单片机内部资源预定义
#include<pic168xa.h>         //包含877A的头文件
#include"PT100.h"

__CONFIG(0x373A);
//代码保护关,使能在线调试,写保护关断,E2PROM代码保护关,RB3数字IO(低压编程关),BOR不用,上电延时开,看门狗关,4M晶体HS振荡,掉电检测关,

void delay(uchar);
void init();
double get_tem();
void display(double);

void main()
{
        double temp;       
        init();
        while(1)
        {
                temp=get_tem();
                display(temp);
        }
}
//初始化函数
void  init()               
{
        PORTA=0X00;               
        PORTD=0X00; //熄灭所有显示
        TRISA=0X01;  //设置RA0为输入,其他为输出            
        TRISD=0X00; //设置D口全为输出
        ADCON1=0X8E; //转换结果左对齐,RA0做模拟输入口,其它做普通I/O
        ADCON0=0X41; //系统时钟Fosc/8,选择RA0通道,允许ADC工作
        delay(20);     //保证采样延时
}

//获取AD值
double get_tem()
{
        double result=0x00;
        uint num;
        double voltage;
                ADGO=0x1;        //开启转换过程
                while(ADGO);//等待转换结束
                num=ADRESL;
                num|=ADRESH<<8;
        voltage=(double)num/ADMAX*VCC;
        result=(voltage*REF)/(VCC-voltage);
        return (result);
}

//结果显示函数
void display(double num)
{
        uchar sign,bai,shi,ge;
        uint i,x;
        uint temp=0;
        uchar cnt;
        double n1;
        num = (double)((int)((num * 100) + 0.5)) / 100;//对原始数据进行四舍五入并取小数点后两位
        //查找电阻值在列表中所对应的坐标值,并将坐标值转换成温度值
        for(i=0;i<150;i++)
        {
                if(num==temp_table)
                {
                        x=i;
                        break;
                }
                else if((num>temp_table)&&(num<temp_table[i+1]))
                {
                        n1=(temp_table+temp_table[i+1])/2.0;
                        if(num>n1)
                        {
                                x=i+1;               
                                break;
                        }
                        else
                        {
                                x=i;
                                break;
                        }
                }
        }

        temp=x;
        bai=temp/100;
        shi=temp%100/10;
        ge=temp%10;
        for(cnt=10;cnt>0;cnt--)
        {         
                 PORTD=table[bai];  //显示百位
                 PORTA=0x37;
                 delay(10);
                 PORTD=table[shi];   //显示个位
                 PORTA=0x2F;
                 delay(10);
                 PORTD=table[ge];    //显示个ge位
                 PORTA=0x1F;
                 delay(10);
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
lxh0wj
1楼-- · 2020-02-08 11:51
呵呵,虽然没等到答复,不过解决了,是我接线有误,程序没有问题

一周热门 更多>