📄 main.c
字号:
#pragma scr(12.asm)
/*回大虾电子网首页 返回历史帖子
[+10]郁闷死了:ICL7135 AD转换电路,读取的数据总是5个0,到底哪里出问题了呢? 请有经验的兄弟进来谈
谈~~
帖子编号: 40462/860820, 发表用户:Henryyam 发表时间:2006-5-1 0:25:37 访问次数:138 发
贴IP:221.0.104.36
文章内容:
电源部分:1脚接-5.1V,11脚接5.1V;
接地:3脚,9脚与数字地24脚都通;
4,5,6脚分别接104电容,104电容,100K电阻,此3元件的另一端子接到一起;
7,8脚之间接一104电容;
VREF:2脚=1V;
输入:10脚=0.45V. 但读取的数据却是"00000"(正常应该是"4500".相关帖子>>>:参考电路如图:【图片】
ICL7135应用电路.JPG(5840字)Henryyam[147次]2006-5-1 0:44:21
*/
//**********************************************************************************
// e c:0fbffh=0; e c:0fbffh=0
//**********************************************************************************
//本程序用AT89S52控制ICL7135的RUN,BUSY等端子进行温度采集,并在5位LED数码管上显示出来.
//接线:
//P1.4---RUN(25);
//INTO(pin12)---BUSY(21);
//==================================================================================
//主函数模块
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h>
//#include
sbit BUSY=P1^5;
sbit RUN=P1^4;
uint t; uint n;
uchar high,low,w;
uchar SData0,SData1;
bit t_sign=0;
uchar i,j;
uint d[5];
uchar code pos[5]={0xfe,0xfd,0xfb,0xf7,0xef}; //LED数码管位数代码,P2口0-5分别驱动第1-6位数码
管.
uchar code led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管10个数
字的七段
代码表.
//==============================================
//通用延时子程序
void delay(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++); //65536*2*0.54253472uS=71111us(71ms)
} //6*8*200=9600;
/*=======================定时器0初始化=============================*/
void T0_Initial(void)
{ TMOD|=0x0d;
TH0=0; //门控的16位计数器.
TL0=0;
ET0=1;
}
//==============================================
char code DX516[3] _at_ 0x3b;
void main(void)
{
RUN=1;
IT0=1; //外部中断负跳变触发;
EX0=1; //开外部中断0;
TR0=1; //开定时器0;
EA=1;
T0_Initial();
while(1)
{
if (t_sign)
{
uint temp;
temp=SData1; //高8位放入temp
temp<<=8; //左移8位,进入高8位
temp+=SData0; //低8位放入temp
temp-=10001; //减掉正向积分期间的10001个计数值.
t=temp; //赋值到t
// t=temp();
d[4]=t/10000;
d[3]=(t%10000)/1000;
d[2]=(t%1000)/100;
d[1]=(t%100)/100;
d[0]=(t%10);
P2=0xff; P0=0xff;
for (i=0;i<50;i++)
{
for(j=0;j<5;j++)
{
if(j==2) P0=led[d[j]]&0x7f;
else P0=led[d[j]];
P2=pos[j];
delay(500);
}
}
P2=0xff; P0=0xff;
t_sign=0;
}
//else {RUN=0; RUN=1;delay(500);RUN=0; };//t=temp();//
delay(35000);
}
}
/*=====================================================*/
int0(void) interrupt 0
{
EX0=0;
//while (BUSY!=0);
delay(200);
d[4]=(P1&0x0f);
delay(400); //ICL7135 CLK=460.8KHZ(22.1184MHZ/6/8)
d[3]=(P1&0x0f);
delay(400);
d[2]=(P1&0x0f);
delay(400);
d[1]=(P1&0x0f);
delay(400);
d[0]=P1&0x0f;
t_sign=1;
}*/
/*======================外部中断0函数==========================*/
Int0 () interrupt 0 using 1
{
// EX0=0; //关闭外部中断
SData0=TL0;
SData1=TH0; //读取转换数据
TL0=0; //关闭定时器0,并清除;
TH0=0;
t_sign=1;
}
/*===========================================================
电容用高精度的,CLK不能太高~~~ (82字)ANGELYTC[35次]2006-5-1 10:21:34早都跟你打招呼了,我也是用
7135+PT100做的温度控制,你就是不理我 咳~~~电容是否高精度与读取数据无关联(0字)shnj[26次]2006-
5-1 10:23:19恩,是的.高精度的话积分时间准确,读数准确! 但实践证明不可用电解.(0字)ANGELYTC[23次
]2006-5-1 10:30:07电容都是104的CBB(后来3个104各并一105 CBB,结果同.) CLK实际频率460KHZ,还不算
高.曾换125KHZ(6MHZ/6/8)试过,结果一样.(230字)Henryyam[30次]2006-5-1 11:02:33老兄:我也一直在找
你呀!关于7135的帖子我都翻遍了...但你的QQ号码与你名字不关联,我无法确定,随便发了几个
也没回音. 论坛短信又无法保存...
好了,言归正传, 我的QQ:165710987, 欢迎上QQ聊! 恭喜你搞定7135哈~~~~(150字)ANGELYTC[28次]2006-
5-3 9:14:32我现在就剩下调试精度了,PCB我也已经画好了 呵呵 我一般都是隐身的,你也可以发邮件给
我的
123.123ytc@163.com,记得我哦 修改后的程序如下:(8964字)Henryyam[59次]2006-5-1
0:54:39//**********************************************************************************
// e c:0fbffh=0; e c:0fbffh=0
//**********************************************************************************
//本程序用AT89S52控制ICL7135的RUN,BUSY等端子进行温度采集,并在5位LED数码管上显示出来.
//接线:
//P1.4---RUN(25);
//INTO(12)---BUSY(21);
//T0(14)---CLK(22);
//ICL7135 CLK=460.8KHZ(22.1184MHZ/6(ALE)/8(74LS93分频))
//==================================================================================*/
//主函数模块
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h>
#include
sbit RUN=P1^4;
uint t; uint n;
uchar high,low,w;
uchar SData0,SData1;
bit t_sign=0;
uchar i,j;
uint d[5];
uchar code pos[5]={0xfe,0xfd,0xfb,0xf7,0xef}; //LED数码管位数代码,P2口0-5分别驱动第1-6位数码
管.
uchar code led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管10个数
字的七段
代码表.
//==============================================
//通用延时子程序
void delay(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++); //65536*2*0.54253472uS=71111us(71ms)
} //6*8*200=9600;
/*=======================定时器0初始化=============================*/
void T0_Initial(void)
{ TMOD|=0x0d;
TH0=0; //门控的16位计数器.
TL0=0;
ET0=1;
}
//==============================================
char code DX516[3] _at_ 0x3b;
void main(void)
{
RUN=1;
IT0=1; //外部中断负跳变触发;
EX0=1; //开外部中断0;
TR0=1; //开定时器0;
EA=1;
T0_Initial();
while(1)
{
if (t_sign)
{
uint temp;
temp=SData1; //高8位放入temp
temp<<=8; //左移8位,进入高8位
temp+=SData0; //低8位放入temp
temp-=10001; //减掉正向积分期间的10001个计数值.
t=temp; //赋值到t
// t=temp();
d[4]=t/10000;
d[3]=(t%10000)/1000;
d[2]=(t%1000)/100;
d[1]=(t%100)/100;
d[0]=(t%10);
P2=0xff; P0=0xff;
for (i=0;i<50;i++)
{
for(j=0;j<5;j++)
{
if(j==2) P0=led[d[j]]&0x7f;
else P0=led[d[j]];
P2=pos[j];
delay(500);
}
}
P2=0xff; P0=0xff;
t_sign=0;
}
//else {RUN=0; RUN=1;delay(500);RUN=0; };//t=temp();//
delay(35000);
}
}
/*======================外部中断0函数==========================*/
Int0 () interrupt 0 using 1
{
SData0=TL0;
SData1=TH0; //读取转换数据
TL0=0; //关闭定时器0,并清除;
TH0=0;
t_sign=1;
}
/*
程序第5行是:#include <absacc.h>(0字)Henryyam[34次]2006-5-1 0:57:23另外测量发现PIN28(UNDER
RANGE)始终输出3.7V高电平,(万用表测),怎么会这样??(0字)Henryyam[17次]2006-5-1 11:53:41晕死:4,6
脚被我搞反了,100K电阻接到4脚了! 现在好了,显示正常. 谢谢各位关注!(0字)Henryyam[25次]2006-5-1
12:36:16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -