下面是我搞过的玩样,ICL7135
楼上说得对,最好还是要靠自己调试出来,
我在调试这个AD的时候,整个英文的datasheet不晓得研究了多少遍。
下面的程序希望对你有参考意义

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
bit ad_over; //每次AD读到数据中断标志位
uint idata ad_pul; //用于存放每次读到的AD计数值
uchar idata s_num; //采样次数存放
bit readad_flag;//采样次数到,读取计算数据标志
uchar chan; //通道号
uchar schan;
int idata tem_buf[17]; //tem——buf[0]未用
/*******************************************************************/
/* */
/* 数据采集 把温度数据存入tem_buf[]中 */
/* 存到全局变量数组tem——buf【】中
/* */
/*******************************************************************/
void get_data()
{
// uchar i;
uint ad_buf[7]; //用于存放读取的AD数值,临时存放
long f_addat; //用于存放计算AD数值总数,临时存放
if(ad_over==1) //AD有数据来,存数据, 在主程序大循环里,数据采集是实时的,主要扫描对象
{
ad_over=0;
ad_buf[s_num]=ad_pul;
s_num++; //记录采样次数
}
if(readad_flag==1) //采样次数到,计算数据
{
readad_flag=0; //清标志位
f_addat=(ad_buf[5]+ad_buf[3]+ad_buf[4])/3; //取中间几次稳定数据,求总和
tem_buf[chan]=(f_addat*1.232863)/2.3826-2731.5; //求平均值,乘一个系数K
chan++;
if(chan==17)
{
chan=1;
}
chsel(chan);
}
}
main()
{
TMOD=0x1d;
TH0=0xd8;
TL0=0xf0;
EA=1;
}
/*******************************************************************/
/* */
/* ICL7135 */
/* */
/*******************************************************************/
void icl7135_ex0_int() interrupt 0
{
ad_pul=256*TH0+TL0;
ad_over=1;
if(pol==0)
{
ad_pul=0-ad_pul; //这里不会用到负电压
}
if(s_num==6)
{
s_num=0;
readad_flag=1;
}
TH0=0xd8;
TL0=0xf0;
}
|