Embedded PIC16F887的ADC读取LM35温度值时经常出现问题

Embedded PIC16F887的ADC读取LM35温度值时经常出现问题,embedded,Embedded,我在AN1的模拟通道中连接了LM35温度传感器,然后通过PIC16F887中的串行RS232传输温度。我已经读取了温度值,但该值经常变化为31和32,而且当触摸LM35时,温度变化非常快,如32、33等。如何控制恒温值。这是我的密码,请任何人帮我 #include <htc.h> void main(void) { TRISA1 = 1; ANS1 = 1; OSCCON = 0x78; // OSCILLATOR CONTROL REGISTER

我在AN1的模拟通道中连接了LM35温度传感器,然后通过PIC16F887中的串行RS232传输温度。我已经读取了温度值,但该值经常变化为31和32,而且当触摸LM35时,温度变化非常快,如32、33等。如何控制恒温值。这是我的密码,请任何人帮我

#include <htc.h>
void main(void)
{
     TRISA1 = 1;
     ANS1 = 1;
     OSCCON = 0x78; // OSCILLATOR CONTROL REGISTER 
     TXSTA = 0x26;
     RCSTA = 0x90;
     SPBRG = 10;
     ADCON1 = 0x80;
     unsigned int current_temp, initial_temp = temperature();
     transmit_char(initial_temp);
     flag = 0;

     while (1)
     {
          current_temp = temperature();
          if((current_temp == (initial_temp + 1)) || (current_temp == (initial_temp - 1)))
          {
               flag = 1;
          }
          if(flag == 1)
          {
               flag = 0;
               transmit_char(current_temp);
               initial_temp = current_temp;
          }
     }
}

int temperature(void)
{ 
     ADCON0 = 0xC5;
     GODONE = 1;
     while(GODONE);
     int temp;
     temp = (ADRESH << 8) + ADRESL;
     temp = temp/2;
     return temp;
}
#包括
真空总管(真空)
{
TRISA1=1;
ANS1=1;
OSCCON=0x78;//振荡器控制寄存器
TXSTA=0x26;
RCSTA=0x90;
SPBRG=10;
ADCON1=0x80;
无符号整数当前温度,初始温度=温度();
传输字符(初始温度);
flag=0;
而(1)
{
当前温度=温度();
如果((当前温度==(初始温度+1));(当前温度==(初始温度-1)))
{
flag=1;
}
如果(标志==1)
{
flag=0;
传输字符(当前温度);
初始温度=当前温度;
}
}
}
内部温度(空隙)
{ 
ADCON0=0xC5;
GODONE=1;
while(GODONE);
内部温度;
温度=(ADRESH执行此操作,
收集10个adc数据,
从该值中删除最小值和最大值。
将剩余的8个ADC值相加,然后将该值除以8。
这应该是连续的过程,平均每十个样品
注:采样和平均值应为…1至10,其次为2至11和3至12。每次读取时,您都会得到adc值。这里也会过滤突然的波动


希望这有帮助..祝你好运..

有些变化是正常的。请阅读数据表并确保你的硬件是正确的(噪音等)。从描述中,我不认为这是软件问题。