这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 工业控制与自动化 » 我的max66754炉温度检测程序??请指教!!不接热电偶显示是不是应该是0度,

共3条 1/1 1 跳转至

我的max66754炉温度检测程序??请指教!!不接热电偶显示是不是应该是0度,但是有变化?why?

助工
2010-05-18 17:55:52     打赏

/******************************************************************************/
/**
/** 功能描述: 热电偶电路测温程序
/**
/** 创 建 人:                 日期:2010-05-11   */
/** 修 改 人:                 日期:2010-05-11   */
/** 其他说明:
/**
/******************************************************************************/

#include <reg51.h>  
#include <stdio.h>  
#include <intrins.h>
/*************************************************
    预定义声明                 
*************************************************/
#define XTAL            11059200  // CPU振荡频率 
#define baudrate         9600      // 波特率

#define  uchar unsigned char
#define  uint  unsigned int

sbit k_so=P2^0;
sbit k_sck=P2^1;
sbit k_cs=P2^2;
sbit CD4052_A = P2^3;
sbit CD4052_B = P2^4;
sbit INHBIT = P2^5;
 
uchar idata  outbuf[6];         // 发送缓冲区
unsigned char count;
/*************************************************
    子函数声明                  
*************************************************/
void fenli(unsigned char wd );
void com_initialize (void);//串口初始化
void com_isr (void);//串口发送函数
void CD4052_select();//巡检
void init(void);
int k_read(void);//获得数据
//bit k_flag(void);//掉线检测 0为掉线,1为正常;
int k_tomdata(void);//获得13为温度数据

/*************************************************
    定时器0初始化                  
*************************************************/
void init(void)
{
 EA=1;
 ET0=1;
 TMOD=1;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 TR0=1;
 count=0;
}
/*************************************************
    分离函数                  
*************************************************/
void fenli(unsigned char wd )
{
 outbuf[0]=wd%10;
 outbuf[1]=wd%100/10;
 outbuf[2]=wd%1000/100;
 outbuf[3]=10;
 outbuf[4]=10;
// outbuf[5]=10;
}
/*************************************************
   MAX232串口                 
*************************************************/
//初始化串口     
void com_initialize (void)  
{  

 //配置T1及波特率 
 PCON |= 0x80;  // 波特率加倍 
 TMOD |= 0x20; // 方式2  
 TH1 = (unsigned char) (256 -(XTAL / (16L * 12L * baudrate)));  
 TR1 = 1;  // 启动T1 
 SCON  = 0x50;  // 串口方式1,允许接收 
 EA = 1;  //允许串行中断  
}
void com_isr (void)
{   unsigned char i;
 //------发送数据中断.  
    for(i=0;i<6;i++)
    {
     SBUF=outbuf[i];
     while(!TI);
        TI=0;
    } 
}
/*************************************************
  CD4052 四路巡检                
*************************************************/  
void CD4052_select()
{
    unsigned char i;
    int tom;
    INHBIT=0;//使能CD4052

  while(i<4)
  {
  switch(i)
  {
   case 0 :
      if(count==40)
      {
       CD4052_B=0;
       CD4052_A=0;
       tom=k_tomdata();
       tom=(tom/8)-24;
       outbuf[5]=0;
       fenli(tom);
         com_isr ();
       }
   break;
   case 1 :
      if(count==80)
      {
       CD4052_B=0;
       CD4052_A=1;
       tom=k_tomdata();
       tom=(tom/8)-24;
       outbuf[5]=1;
       fenli(tom);
         com_isr ();
      }
   break;
   case 2 :
         if(count==160)
      { 
       CD4052_B=1;
       CD4052_A=0;
       tom=k_tomdata();
       tom=(tom/8)-24;
       outbuf[5]=2;
       fenli(tom);
         com_isr ();
      }
   break;
   case 3 :
      if(count==240)
      {  
       CD4052_B=1;
       CD4052_A=1;
       tom=k_tomdata();
       tom=(tom/8)-24;
       outbuf[5]=3;
       fenli(tom);
         com_isr ();
       count=0;
      }
   break;
  }
  i++;
  if(i==4)i=0;
  }

/*************************************************
    MAX6675 读取转换结果               
*************************************************/
int k_read(void)//获得数据
{
  int dat=0,i;
  k_sck=0;
  k_cs=0;//开始读数据
  k_sck=1;
  k_sck=0;//输出D15
  k_sck=1;
  for(i=15;i>=1;i--) 
  {
  k_sck=0;
  dat=dat|k_so;
  dat=dat<<1;
  k_sck=1;
  }
  k_cs=1;
  return( dat);
 }

/*bit k_flag(void)//掉线检测 0为掉线,1为正常;
{  int dat;
   dat=k_read();
   if(dat&0x04==1)return(0);
   if(dat&0x04==0)return(1);
   }*/
int k_tomdata(void) //获得13位温度数据
{
   int dat;
   dat=k_read();
   dat=dat&0x7ff8;
   dat=dat>>3;
   dat=(1023.75/4095)*dat;
   return(dat);
}
//-------------主函数--------------
void main (void)  
{  
 
 init();    
 com_initialize (); /* 初始化串口*/
    while(1)
  {
   CD4052_select();

  }
 
}
void timer0() interrupt 1 using 0
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 count++;
}  




关键词: 我的     max66754     温度     检测     程序     指教         

高工
2010-05-18 22:49:15     打赏
2楼
有点文字说明更有助于别人帮你。

没看程序。可以肯定地告诉你,不接热电偶,肯定不是0度

助工
2010-05-20 12:46:46     打赏
3楼

我的程序主要实现4路温度检测,每隔2秒从MAX6675读取一次,并显示出来!(注意:显示是在另外的一个板子上,采用单片机双机通信),四路温度测量的切换是用的cd4052双四模拟开关


朋友搞过相关的东西吗   帮忙分析一下


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]