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

📄 ds18b20.c

📁 ds18b20 的读取,C语言,改变频率要改变延时.
💻 C
📖 第 1 页 / 共 2 页
字号:
   if (DS18B20_Master_Reset () != 1) // Master reset
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Write_Byte (0xCC); // Skip ROM command
   DS18B20_Write_Byte (0x44); // Convert temperature command
   
   Exit_Critical ();
   Soft_Delay_ms (751); // Wait for convert complete
   Enter_Critical ();
  // Cycle end
   
  // Start read SCT cycle 
   if (DS18B20_Master_Reset () != 1) // Master reset
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Write_Byte (0xCC); // Skip ROM command
   DS18B20_Write_Byte (0xBE); // Read SCT
   DS18B20_Multi_Read_Byte (sct, 9); // Read scratchpad data, 8 Bytes + 1 Byte CRC
  // Cycle end
   
   if (DS18B20_SCT_Check (sct) != 1) // Check scratchpad with CRC and CONFIG register
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Temperature_Format_Transfer (sct, Value);
   
   Exit_Critical ();
   return 1;
  }
  //--------------------------------------------------------------------------------------------------
  ////////// Read the Laser ROM from from DS18B20 // Notice: Only for single device on 1-Wire Bus 
   // Input:
   // * Value: the point for UID data storage. LSB first, MSB last
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  __monitor unsigned char DS18B20_Single_Read_ROM (unsigned char * Value)
  {
   unsigned char i;
   unsigned char rom_temp[8];
   
   if (DS18B20_Master_Reset () != 1) // Master reset and check, error to return 0
   {
   return 0;
   }
   
   DS18B20_Write_Byte (0x33); // 0x33 is Read ROM command
   
   DS18B20_Multi_Read_Byte (rom_temp, 8);
   
   if ( DS18B20_UID_Check (rom_temp) != 1)
   {
   return 0;
   }
   
   for (i = 0; i < 8; i++)
   {
   * (Value + i) = rom_temp[i]; // CRC OK, Write back result
   }
   
   return 1;
  }
  //--------------------------------------------------------------------------------------------------
  ////////// Only convert temperature without delay. Single
   // Input:
   // None
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  unsigned char DS18B20_Single_Only_Convert_Temperature (void)
  {
   unsigned char cpu_sr;
   Enter_Critical ();
  // Start convert cycle 
   if (DS18B20_Master_Reset () != 1) // Master reset
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Write_Byte (0xCC); // Skip ROM command
   DS18B20_Write_Byte (0x44); // Convert temperature command
   
   Exit_Critical ();
   return 1;
  }
  //--------------------------------------------------------------------------------------------------
  ////////// Only read SCT data from DS18B20. Single
   // Input:
   // 
   // * Value: will storage temperature.
   // * (Value + 0): = 0x00 is above 0, = 0xFF is lower 0
   // * (Value + 1): Int. of temperature value
   // * (Value + 2): dot. of temperature value, 0x00 to 0x63 (0.00 to 0.99)
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  unsigned char DS18B20_Single_Only_Read_Temperature (unsigned char * Value)
  {
   unsigned char cpu_sr;
   unsigned char sct[9]; // For temp storage scratchpad data
   Enter_Critical ();
  // Start read SCT cycle 
   if (DS18B20_Master_Reset () != 1) // Master reset
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Write_Byte (0xCC); // Skip ROM command
   DS18B20_Write_Byte (0xBE); // Read SCT
   DS18B20_Multi_Read_Byte (sct, 9); // Read scratchpad data, 8 Bytes + 1 Byte CRC
  // Cycle end
   
   if (DS18B20_SCT_Check (sct) != 1) // Check scratchpad with CRC and CONFIG register
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Temperature_Format_Transfer (sct, Value);
   
   Exit_Critical ();
   return 1;
  }
  //--------------------------------------------------------------------------------------------------
  ////////// 以指定的ROM去读温度
   // Input:
   // 
   // * UID: ROM (8 bytes)
   // * Value: will storage temperature.
   // * (Value + 0): = 0x00 is above 0, = 0xFF is lower 0
   // * (Value + 1): Int. of temperature value
   // * (Value + 2): dot. of temperature value, 0x00 to 0x63 (0.00 to 0.99)
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  unsigned char DS18B20_UID_Read_Temperature (unsigned char * Value, unsigned char * UID)
  {
   unsigned char cpu_sr;
   unsigned char sct[9]; // For temp storage scratchpad data
   Enter_Critical ();
   
   if (DS18B20_UID_Check (UID) != 1)
   {
   Exit_Critical ();
   return 0;
   }
   
  // Start convert cycle 
   if (DS18B20_Master_Reset () != 1) // Master reset
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Write_Byte (0x55); // Match ROM command
   DS18B20_Multi_Write_Byte (UID, 8);
   DS18B20_Write_Byte (0x44); // Convert temperature command
   
   Exit_Critical ();
   Soft_Delay_ms (751); // Wait for convert complete
   Enter_Critical ();
  // Cycle end
   
  // Start read SCT cycle 
   if (DS18B20_Master_Reset () != 1) // Master reset
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Write_Byte (0x55); // Skip ROM command
   DS18B20_Multi_Write_Byte (UID, 8);
   DS18B20_Write_Byte (0xBE); // Read SCT
   DS18B20_Multi_Read_Byte (sct, 9); // Read scratchpad data, 8 Bytes + 1 Byte CRC
  // Cycle end
   
   if (DS18B20_SCT_Check (sct) != 1) // Check scratchpad with CRC and CONFIG register
   {
   Exit_Critical ();
   return 0;
   }
   DS18B20_Temperature_Format_Transfer (sct, Value);
   
   Exit_Critical ();
   return 1;
  }
  //--------------------------------------------------------------------------------------------------
  ds18b20.h
  /*
  ****************************************************************************************************
  * SSAC_A1
  * Main Controller Board
  * File name : ds18b20.h
  * Version : 1.0
  * Use for : To detect temperature
  * Summary : The include file
  * Author : Shensong (E_mail:webmaster@shensong.com / QQ:2939603 / Mob:13016461980)
  * Date : 2005-05-21
  ****************************************************************************************************
  */
  #ifndef __DS18B20_H
  #define __DS18B20_H
  ////////// Read the Laser ROM from from DS18b20 // Notice: Only for single device on 1-Wire Bus 
   // Input:
   // * Value: the point for UID data storage
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  __monitor extern unsigned char DS18B20_Single_Read_ROM (unsigned char * Value);
  //--------------------------------------------------------------------------------------------------
  ////////// Read the value of temperature from DS18b20 
   // Input:
   // // * UID: which device with the UID will be read out
   // * Value: will storage temperature.
   // * (Value + 0): = 0x00 is above 0, = 0xFF is lower 0
   // * (Value + 1): Int. of temperature value
   // * (Value + 2): dot. of temperature value, 0x00 to 0x63 (0.00 to 0.99)
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  extern unsigned char DS18B20_Single_Read_Temperature (unsigned char * Value);
  //--------------------------------------------------------------------------------------------------
  ////////// Only convert temperature without delay. Single
   // Input:
   // None
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  extern unsigned char DS18B20_Single_Only_Convert_Temperature (void);
  //--------------------------------------------------------------------------------------------------
  ////////// Only read SCT data from DS18B20. Single
   // Input:
   // 
   // * Value: will storage temperature.
   // * (Value + 0): = 0x00 is above 0, = 0xFF is lower 0
   // * (Value + 1): Int. of temperature value
   // * (Value + 2): dot. of temperature value, 0x00 to 0x63 (0.00 to 0.99)
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  extern unsigned char DS18B20_Single_Only_Read_Temperature (unsigned char * Value);
  //--------------------------------------------------------------------------------------------------
  ////////// 以指定的ROM去读温度
   // Input:
   // 
   // * UID: ROM (8 bytes)
   // * Value: will storage temperature.
   // * (Value + 0): = 0x00 is above 0, = 0xFF is lower 0
   // * (Value + 1): Int. of temperature value
   // * (Value + 2): dot. of temperature value, 0x00 to 0x63 (0.00 to 0.99)
   // Return: 
   // 0: Opt. false
   // 1: Opt. OK
  extern unsigned char DS18B20_UID_Read_Temperature (unsigned char * Value, unsigned char * UID);
  #endif /* __DS18B20_H */
  ds18b20_ports.h
  /*****************************************************************************************************
  * SSAC_A1
  * Main Controller Board
  * File name : ds18b20_ports.h
  * Version : 1.0
  * Use for : To detect temperature
  * Summary : The include file for ports
  * Author : Shensong (E_mail:webmaster@shensong.com / QQ:2939603 / Mob:13016461980)
  * Date : 2005-05-25
  *****************************************************************************************************/
  #ifndef __DS18B20_PORTS_H
  #define __DS18B20_PORTS_H
  #define MCU_XTAL 11.0592 // The unit is MHz, for main MCU
  #define MCU_TYPE ATmega128
  #define COMPLIER_TYPE IAR
  #if (MCU_TYPE == ATmega128) && (COMPLIER_TYPE == IAR)
   #include <iom128.h> /* Only for "SREG" */
   #include <ina90.h> /* Only for "__disable_interrupt() */
  #endif /* (MCU_TYPE == ATmega128) && (COMPLIER_TYPE == IAR) */
  /* The realization: program critical area ----------------------------------------------------*/
  #if (MCU_TYPE == ATmega128) && (COMPLIER_TYPE == IAR)
   #define Enter_Critical() cpu_sr = SREG; __disable_interrupt(); 
   
   #define Exit_Critical() if (cpu_sr & 0x80) __enable_interrupt();
  #endif /* (MCU_TYPE == ATmega128) && (COMPLIER_TYPE == IAR) */
  /**************************************************************************************************/
  /* The realization: Software delay -------------------------------------------------------------*/
  #if (MCU_TYPE == ATmega128) && (COMPLIER_TYPE == IAR)
   #define Soft_Delay_us(x) __delay_cycles (x * MCU_XTAL)
   #define Soft_Delay_ms(x) __delay_cycles (x * MCU_XTAL * 1000)
   #define Soft_Delay_s(x) __delay_cycles (x * MCU_XTAL * 1000000)
  #endif /* (MCU_TYPE == ATmega128) && (COMPLIER_TYPE == IAR) */
  /**************************************************************************************************/
  #define DS18B20_Tx_Release() DDRB_DDB7 = 0
  #define DS18B20_Tx_Obtain() DDRB_DDB7 = 1
  #define DS18B20_Rx() PINE_PINE7
  #endif /* __DS18B20_PORTS_H */

⌨️ 快捷键说明

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