|
PT100通過op07c芯片接到C8051F020芯片,用網(wǎng)上找的例程改的測到的溫度室溫只有8度,而且顯示25以上就又稱0了,大神們幫我看看是程序哪里不對
萬分感謝
程序如下
#include <stdio.h>
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
sfr16 ADC0= 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
sfr16 DAC0= 0xd2; // DAC0 data
sfr16 DAC1= 0xd5; // DAC1 data
//#define SYSCLK 22118400 // SYSCLK frequency in Hz
//#define SAMPLE_RATE 50000 // Sample frequency in Hz
//#define AMX0SL_AIN 0 // 0=AIN0....7=AIN7,8=TEMP
uint ADCdata;
bit ADCflag;
uchar volarray[3]; //讀到的數(shù)值緩存
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// ADC0配置,ADC0BUSY為轉(zhuǎn)換啟動源, 并在轉(zhuǎn)換完成時產(chǎn)生中斷
//-----------------------------------------------------------------------------
void ADC0_Init (void)
{
AMX0CF = 0x60; // AMUX Configuration Register
AMX0SL = 0; // 第0個通道
ADC0CF = (22118400/50000)<< 3; // ADC conversion clock = .5MHz
ADC0CN = 0x80; // ADC Control Register
REF0CN = 0x03; // 啟用內(nèi)部基準(zhǔn)源
EIE2 |= 0x02; // 啟用 ADC 中斷
}
//-----------------------------------------------------------------------------
// 顯示子程序
//-----------------------------------------------------------------------------
void ADZH()
{
float Voltage;
int Vol;
uint temp;
if (ADCflag)
{
ADCflag=0;
Voltage=(ADCdata*2.4)/4096;
Vol=Voltage*100;
volarray[0]=Vol/100; //數(shù)碼管第一位
temp=Vol%100;
volarray[1]=temp/10; //數(shù)碼管第二位
volarray[2]=temp%10; //數(shù)碼管第三位
AD0BUSY=1;
}
}
//-----------------------------------------------------------------------------
void ADCSH ()
{
ADC0_Init(); // init ADC
AD0BUSY=1;
}
//-----------------------------------------------------------------------------
// ADC0采樣中斷
//-----------------------------------------------------------------------------
void ADC0_ISR (void) interrupt 15
{
AD0INT = 0; // 清 ADC 中斷標(biāo)志位
ADCdata= ADC0; // ADC采樣數(shù)據(jù)
ADCflag=1;
}
|
|