Temperature sensor 18B20 driver

Publisher:机械梦想家Latest update time:2015-10-16 Source: eefocus Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere
The following green texts are all the drivers of the 18B20 driver. You don't have to understand every sentence when learning. You just need to know the function of each function to facilitate future calls! The calling method can be understood in the last bold text!

study method:

The more advanced and complex the device looks, the more it will have its own driver program, which is often provided by the manufacturer! So in the later stage of improvement, you need to learn how to use these driver functions! Just like when you learn a higher-level ARM system in the future, it has its own library function, and you only need to change the parameters when using it (of course, on the surface)! The price will be proficient in the later stage.

 

 

bit   flag;
unsigned int   idata Temperature;
unsigned char idata temp_buff[9]; //Store the read bytes, read scratchpad is 9 bytes, read rom ID is 8 bytes
unsigned char idata id_buff[8];
unsigned char idata *p,TIM;
unsigned char idata crc_data;


unsigned char code CrcTable [256]={
0,   94, 188,   226,   97,   63,   221,   131,   194,   156,   126,   32,   163,   253,   31,   65,
157  ,  195,   33,   127,   252 ,   162,   64,   30,   95,   1,   227,   189,   62,   96,   130,   220,
35,   125,   159   , 193,   66,   28,   254,   160,   225,   191,   93,   3,   128,   222 ,   60,   98,
190,   224,   2,   92,   223,   129,   99,   61,   124,   34,   192,   158,   29,   67,   161,   255,
70,   24,   250,   164,   39,   121,   155,   197,   132,   218,   56,   102,   229,   187,   89,   7,
219,   133, 103,   57,   186,   228,   6,   88,   25,   71,   165,   251,   120,   38,   196  ,  154,
101,   59, 217,   135,   4,   90,   184,   230,   167,   249,   27,   69,   198,   152,   122,   36,
248,   166, 68,   26,   153,   199,   37,   123,   58,   100,   134,   216,   91,   5,   231,   185,
140,   210, 48,   110,   237,   179,   81,   15,   78,   16,   242,   172,   47,   113,  147  ,   205,
17,   79,   173,   243,   112,   46,   204,   146,   211,   141,   111,   49,   178,   236,   14,   80,
175,   241, 19,   77,  206,   144,   114,   44,   109,   51,   209,   143,   12,   82,   176,   238,
50,   108,   142,   208,   83,   13,   239,   177,   240,   174,   76,   18,   145,   207,   45,   115,
202,   148, 118,   40,   171,   245,   23,   73,   8,   86,   180,   234,   105,   55,   213, 139,
87,   9,   235,   181,   54,   104,   138,   212,   149,   203,   41,   119,   244,   170,   72,   22,
233,   183,   85,   11,   136,   214,   52,   106,   43,   117,   151,   201,   74,   20,   246,   168,
116,   42,   200,   150,   21,   75,   169,   247,   182,   232,   10,   84,   215,   137,   107,   53
};
//

void TempDelay (unsigned char idata us)
{
 while(us--);
}


void Init18b20 (void)
{
 D18B20=1;
 _nop_();
 D18B20=0;
 TempDelay(80);    //delay 530 uS//80
 _nop_();
 D18B20=1;
 TempDelay(14);    //delay 100 uS/ /14
 _nop_();
 _nop_();
 _nop_();
 
 if(D18B20==0)
  flag = 1;    //detect 1820 success!
 else
  flag = 0;     //detect 1820 fail!
 TempDelay(20);        //20
 _nop_();
 _nop_();
 D18B20 = 1;
}


void WriteByte (unsigned char idata wr)   //Single byte write
{
 unsigned char idata i;
 for (i=0;i<8;i++)
 {
  D18B20 = 0;
  _nop_();
  D18B20=wr&0x01;
  TempDelay(3) ;    //delay 45 uS //5
  _nop_();
  _nop_();
  D18B20=1;
  wr >>= 1;
 }
}


unsigned char ReadByte (void)      //Read single byte
{
 unsigned char idata i,u=0;
 for(i=0;i<8;i++)
 {
  D18B20 = 0;
  u >>= 1;
  D18B20 = 1;
  if(D18B20==1)
  u |= 0x80;
  TempDelay (2);
  _nop_();
 }
 return(u);
}


void read_bytes (unsigned char idata j)
{
  unsigned char idata i;
  for(i=0;i   {
    *p = ReadByte();
    p++;
  }
}


unsigned char CRC (unsigned char j)
{
    unsigned char idata i,crc_data=0;
   for(i=0;i //Table check
     crc_data = CrcTable[crc_data^temp_buff[i]];
    return ( crc_data);
}


void GemTemp (void)
{
   read_bytes (9);
   if (CRC(9)==0) //Verification is correct
   {
     Temperature = temp_buff[1]*0x100 + temp_buff[0];
//      Temperature *= 0.625;
  Temperature / = 16;
  TempDelay(1);
    }
}


void Config18b20 (void)   //Reconfigure alarm limit value and resolution
{
     Init18b20();
     WriteByte(0xcc);   //skip rom
     WriteByte(0x4e);   //write scratchpad
     WriteByte(0x19);   //Upper limit
     WriteByte(0x1a);   //Lower limit
     WriteByte(0x7f);      //set 11 bit (0.125)
     Init18b20();
     WriteByte(0xcc);   //skip rom
     WriteByte(0x48);   //Save setting value
     Init18b20();
     WriteByte(0xcc);   //skip rom
     WriteByte(0xb8);   //Call back setting value
}


void ReadID (void) // read device ID
{
 Init18b20();
 WriteByte(0x33);   // read rom
 read_bytes(8);
}


void TemperatuerResult(void)
{
   p = id_buff;
   ReadID();
   Config18b20();
 Init18b20 ();
 WriteByte(0xcc);    //skip rom
 WriteByte(0x44);    //Temperature convert

 Init18b20 ();
 WriteByte(0xcc);    //skip rom
 WriteByte(0xbe);    //read Temperature
 p = temp_buff;
 GemTemp();
}

void GetTemp()
     
     if(TIM==100) //Read temperature every 1000ms
  TIM=0;
    TemperatuerResult();
 }

}


void T1zd(void) interrupt 3
{
   TH1 = 0xD8;     //10
   TL1 = 0xF0;
   TIM++;

}
#include
#include "tem.H"
extern GetTemp();             //Declare reference to external function
extern unsigned int   idata Temperature;                //Declare reference to external variable
void delay(unsigned int i);

//else IO
sbit     LS138A=P2^2;        //pin definition
sbit     LS138B=P2^3;
sbit     LS138C=P2^4;


//This table is the font of LED, common cathode digital tube 0-9   -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned long   LedOut[5],LedNumVal;


void system_Ini()
{
    TMOD|= 0x11;
    TH1 = 0xD8;     //10
    TL1 = 0xF0; 
 IE = 0x8A; 
    TR1   = 1;

}

main()
{ unsigned char i;
  system_Ini();
    while(1)
   { 
   GetTemp();

     
       LedNumVal=Temperature;       //Send the actual temperature to the LedNumVal variable
   LedOut[0]=Disp_Tab[LedNumVal000/1000];
      LedOut[1]=Disp_Tab[LedNumVal00/100];
      LedOut[2]=Disp_Tab[LedNumVal0/10];   //Tens digit
      LedOut[3]=Disp_Tab[LedNumVal];     //Ones digit
    
    for(i=0; i<4; i++)
   {   
   P0 = LedOut[i] ;
             
  switch(i)       
         {         //138 decoding
   case 0:LS138A=0; LS138B=0; LS138C=0; break;         
            case 1:LS138A=1; LS138B=0; LS138C=0; break;               
            case 2:LS138A=0; LS138B=1; LS138C=0; break;
            case 3:LS138A=1; LS138B=1; LS138C=0; break;
         }
  
  delay(100);
   }

   P0 = 0; 
 
    }
}

 //Delay program
void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}

Reference address:Temperature sensor 18B20 driver

Previous article:Timing application methods and techniques
Next article:12864 Drivers for actual applications

Recommended ReadingLatest update time:2024-11-17 10:03

Technical requirements for insulation structure of drive motors for new energy vehicles
As we all know, the most feared things for any electrical equipment or machine are leakage and short circuit. As the saying goes, "laymen watch the excitement, experts watch the doorway." The doorway of insulation structure and system has always been a key topic of continuous discussion and research within majo
[Embedded]
Technical requirements for insulation structure of drive motors for new energy vehicles
Backlight panel driver control integrated circuit pins
Backlight panel English meaning of driver control integrated circuit pin ENA, STB enable control integrated circuit startup terminal ON/OFF function REF, VREF, Vref, REG Reference voltage output terminals SS, SST soft start control external capacitor RT External oscillation frequen
[Power Management]
26.3.4.2 I2C Driver under Kernel (I)
1. Hardware Protocol 1.1mini2440 I2C device as shown in the figure 1.2 The I2C protocol is as follows: 1.3 Start and stop signals are as shown below 1.4 I2C bus data transmission timing: 1.5 2440 is only responsible for sending, and does not know the meaning of the data. Only the peripheral device knows.
[Microcontroller]
26.3.4.2 I2C Driver under Kernel (I)
18b20 Programs and Applications
The DS18B20 digital thermometer is a 1-Wire, or single bus device, produced by DALLAS. It has the characteristics of simple circuits and small size. Therefore, it can be used to form a temperature measurement system with simple circuits. Many such digital thermometers can be hung on one communication line, which is
[Industrial Control]
18b20 Programs and Applications
LED driver selection for wireless products
Mobile phone lighting has changed dramatically in the last few years. From the end customer point of view, not much has changed - they may just notice a bigger display, more indicator lights or a flash when taking photos. From a technical point of view, the challenges of creating lighting features are difficult and
[Power Management]
LED driver selection for wireless products
4×4 keyboard recognition based on 51 single chip microcomputer and digital display driven by 74LS164
;P1 port is connected to a 4×4 keyboard, and the output uses 74LS164 to drive a digital display. ;When any key is pressed, the key value is displayed on the digital display. ;The program is written in assembly language, and the screen of PROTEUS simulation debugging is as follows: ;The procedure is as follows:     O
[Microcontroller]
4×4 keyboard recognition based on 51 single chip microcomputer and digital display driven by 74LS164
USB device driver (I)
USB driver programming principle: When we insert a USB device into a USB port, we will be prompted to install the corresponding driver, such as USB mouse, USB keyboard, etc. These computers already have the corresponding drivers. When the computer detects that the USB device type is the same, it will help
[Microcontroller]
USB device driver (I)
Dynamic drive and protection circuit design for large-size digital tubes
introduction LED digital tubes are commonly used display devices in single-chip microcomputer systems. Each field of LED digital tubes larger than 1 inch is composed of multiple light-emitting diodes connected in series and in parallel, which are called large-size digital tubes. Although large-size digital
[Power Management]
Latest Microcontroller Articles
  • Download from the Internet--ARM Getting Started Notes
    A brief introduction: From today on, the ARM notebook of the rookie is open, and it can be regarded as a place to store these notes. Why publish it? Maybe you are interested in it. In fact, the reason for these notes is ...
  • Learn ARM development(22)
    Turning off and on interrupts Interrupts are an efficient dialogue mechanism, but sometimes you don't want to interrupt the program while it is running. For example, when you are printing something, the program suddenly interrupts and another ...
  • Learn ARM development(21)
    First, declare the task pointer, because it will be used later. Task pointer volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • Learn ARM development(20)
    With the previous Tick interrupt, the basic task switching conditions are ready. However, this "easterly" is also difficult to understand. Only through continuous practice can we understand it. ...
  • Learn ARM development(19)
    After many days of hard work, I finally got the interrupt working. But in order to allow RTOS to use timer interrupts, what kind of interrupts can be implemented in S3C44B0? There are two methods in S3C44B0. ...
  • Learn ARM development(14)
  • Learn ARM development(15)
  • Learn ARM development(16)
  • Learn ARM development(17)
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号