⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 双口RAM程序实例
💻 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 + -