ADS1110_SDA = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
/*******************************************************************************
名称:uchar ads1110ReceiveByte(void)
功能:ADS1110 I2C 接收1个字节
********************************************************************************/
uchar ads1110ReceiveByte(void)
{
uchar i,k;
ADS1110_CLK = 0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_();
ADS1110_SDA = 1;
_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();
for(i=0;i<8;i++)
{
51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度
ADS1110_CLK = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
k= (k << 1)| ADS1110_SDA;
ADS1110_CLK = 0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
return k;
}
/*******************************************************************************
名称:ads1110Config(void)
功能:对ADS1110进行配置
********************************************************************************/
void ads1110Config(void)
{
ads1110Start();
ads1110SendByte(ADS1110_WR_ADDRESS);
waitAck();
ads1110SendByte(ADS1110_CONFIG_REG);
waitAck();
ads1110Stop();
}
/*******************************************************************************
名称:读取ADS1100数据子程序
功能:
********************************************************************************/
uint RD_ADS()
{
uchar temp;
uint W_B1byte_high, W_B1byte_low, W_B1_word;
ads1110Start();
ads1110SendByte(ADS1110_RD_ADDRESS);
temp = waitAck();
if(!temp)
{
51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度
W_B1byte_high /*= TMR_H*/ = ads1110ReceiveByte();
sendAck();
W_B1byte_low /*= TMR_L*/ = ads1110ReceiveByte();
sendAck();
temp = ads1110ReceiveByte();
ads1110Stop();
W_B1_word = (W_B1byte_high << 8)+ W_B1byte_low;
if (W_B1_word > 0x7fff)
W_B1_word = 0;
return W_B1_word;
}
else
return 0x0000;
}
/*******************************************************************************
名称: 取AD结果函数
功能: 它是16位AD转换,连续去制25次,去掉3最大值和3个最小值,剩下19个取平均值
返回: 平均取值
********************************************************************************/
uint get_ad_result()
{
uchar i,j;
uint temp;
nTmp = 0;
for(i = 0; i < 25; i++) // 连续取值25次
{
AD_Result[i] = RD_ADS();
delay1ms(10);
}
for(i = 1; i< 25; i++) // 插入法对取的25个值进行排序
{
temp = AD_Result[i]; //store the original sorted array in temp
for(j=i ; j>0 && temp < AD_Result[j-1] ; j--) //compare the new array with temp
{
AD_Result[j] = AD_Result[j-1]; //all larger elements are moved one pot to the right }
51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度
AD_Result[j] = temp;
}
// for(i = 3; i < 22; i++) // 去掉3最大值和3个最小值,余下19个值求和
// {
// nTmp = nTmp + AD_Result[i];
// }
return AD_Result[12]; //nTmp / 19; // 取剩下19个数平均值
//ad_average_result=ad_average_result*4*5000/1024;
}
/*******************************************************************************
名称: 串口发送函数
功能: 取AD结果函数发送到串口,方便调试
返回: 无
********************************************************************************/
void send_ad_result(uchar temp)
{
SBUF = temp;
while(TI == 0) ;
TI = 0;
delay1ms(100);
//SBUF=R>>4;
}
/*******************************************************************************
名称: 初始化函数
功能: 设置串口相关寄存器值,波特率取9600, 12T模式
返回: 无
********************************************************************************/
void _initiate() //初始化函数
{
EA = 1;
ES = 0;
TMOD = 0x20; // 定时计数器方式控制寄存器,"自动重装,16位计数器".
SCON = 0x50; // 串行控制寄存器,方便在串口助手那观察
// 12M
// TH1 = 0xF3; // 定时器初值高8位设置
// TL1 = 0xF3; // 定时器初值低8位设置
// 11.0592M 波特率 9600
TH1 = 0xFD; // 定时器初值高8位设置
51+HD7279+ADS1110+PT100的测温系统,通过与标准温度计对比拟合,精度能达到0.5度
TL1 = TH1; // 定时器初值低8位设置