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

📄 ds18b20z.c

📁 基于TMS320F2812的DS18B20温度传感器应用
💻 C
字号:
//ds18b20 采样程序,每15ms采样读取一次温度值,调用温控算法程序求出对应的占空比,输出PWM波控制TEC工作
//------------------------------------------------------

#include "DSP281x_Device.h" 
#include "DSP281x_Examples.h"
//#include "ds18b203.h" 
#include "ds18.h"
//float temperature;
void  delay(int count);//给count 设定值,延时1us,count=50
int k;
//int v1=0xfffe;
//int v2=0xffff;
void main(void)
{  
   
	  InitSysCtrl();
      //InitGpio();
      DS_IO;
      DS_QUAL;
      EALLOW;
 
      DS_OUT;
    // EDIS;
    //  DINT;

    //  InitPieCtrl();
    //  IER = 0x0000;//禁止所有的中断
    //  IFR = 0x0000;
    // InitPieVectTable();
      
     // EALLOW;
   //  EDIS;
      
   //  EINT;          // Enable Global interrupt INTM
   //  ERTM;          // Enable Global realtime interrupt DBGM
         while(1)                 //recycle interrupt
     {
       //float read_temp();
//       int j;
//    unsigned char buff[2];
    //float temprature=0;
    while(reset_ds1820()==1){}
    write_byte(0xCC);
    write_byte(0x44);
  // for (j=0;j<1000;j++) delay(3750);
   while(reset_ds1820()==1){}
   write_byte(0xCC);
   write_byte(0xBE);
   read_byte();
   //read_byte(buff);
   //read_byte(buff+1);
   
  // temprature=transform(buff);
   DS_OUT;
   DS_HI;
   //for(k=0;k++;k<5000){delay(3750);}
   }
}
unsigned char reset_ds1820(void)
{	
    // EALLOW;
//    int i;
	unsigned char flag;
	    DS_OUT;
		DS_HI;
		delay(12);//1us
		DS_LOW;
	    delay(6390);//510us
		DS_HI;//拉高总线 
		delay(1000);//80us	  //等待DS18B20的应答
		DS_IN;
	    flag=DS_DATA;  
	    DS_OUT;    
	    DS_HI;
	   delay(1600);//200us
	   return(flag);
		
}
unsigned char read_byte(void)
{
  int i;
  Uint16  temp;
  temp=0x0000;
  DS_OUT;
  DS_HI;
  for(i=12;i>0;i--)
  {
   DS_LOW;
   //修改于2007,8,14
   //delay(25);//2us
   //DS_HI;
  // delay(175);//14us
   delay(175);//14us
   DS_HI;
   delay(750);//60us
   DS_IN;
    //delay(480);//58us
   if(DS_DATA)temp=temp|0x1000;
   else temp=temp&0xefff;
   temp=temp>>1;
   DS_OUT;
   DS_HI;
   delay(20);
   }
  // *readbyte=temp;
   return temp ;
 }
 
float transform(unsigned char *t)
{
  unsigned char temp=0;
  float temprature=0;
  temp|=(*(t+1)<<8);
  temp|=(*t);
  if((temp&0x0F800)==0x0F800)
   temprature=0-((~temp)+1)*0.0625;
   else temprature=temp*0.0625;
   return(temprature);
}

float read_temp()
{
 int j;
 unsigned char buff[2];
 float temprature=0;
 while(reset_ds1820()==1){}
 write_byte(0xCC);
 write_byte(0x44);
 for (j=0;j<1000;j++) delay(3750);
 while(reset_ds1820()==1){}
 write_byte(0xCC);
 write_byte(0xBE);
 //read_byte(buff);
// read_byte(buff+1);
 temprature=transform(buff);
 DS_OUT;
 DS_HI;
 return(temprature);
}
 
void write_byte(unsigned char command)
{
  unsigned char i;
  DS_OUT;
  DS_HI;  
  for(i=0.;i<8;i++)  
  {
    DS_LOW;
     //delay(71);//10us
    delay(125);//10us
   GpioDataRegs.GPADAT.all=command&0x0001;
    delay(750);//60us
	command=command>>1;
	delay(9);//1us
   }
   DS_OUT;
   DS_HI;
} 

//一条指令执行时间是1/150M,for(i=0;i<count;i++)执行一次相当于用了4count个指令周

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -