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

📄 drv_18b20.c

📁 该模板使用于周立功公司研发的EasyARM2100系列开发板
💻 C
字号:
#include "\inc\system.h"
#define DS1820_IO	               0x00020000   
#define DS1820_IO_DDR_SET          IO0DIR=IO0DIR|0x00020000
#define DS1820_IO_DDR_CLR          IO0DIR=IO0DIR&0xfffdffff

#define DS18B20_READ_ROM           0x33
#define DS18B20_MATCH_ROM          0x55
#define DS18B20_SKIP_ROM           0xCC
#define DS18B20_SEARCH_ROM         0xF0
#define DS18B20_ALARM_SEARCH_ROM   0xEC
    //ram   operation
#define DS18B20_WRITE_RAM          0x4E
#define DS18B20_READ_RAM           0xBE
#define DS18B20_COPY_RAM           0x48
#define DS18B20_CONVERT_TEM        0x44
#define DS18B20_EECALL_EEPROM      0xB8
#define DS18B20_READ_POWER_SUPPLY  0xB4

void delays(uint32 time)
{
uint32 i,j;
for(i=0;i<time;i++)
   {
   for(j=0;j<3;j++){;}
   }

}


uint8 init_ds1820(void) {
     DS1820_IO_DDR_SET;//输出状态
       IO0CLR|=DS1820_IO;
       delays(1200);  //延时500us
      IO0SET|=DS1820_IO;
     DS1820_IO_DDR_CLR;//输入状态
       delays(240);   //延时90us
			
      if(IO0PIN&DS1820_IO>1)
         {
          return 0;
         }
	    else
        { 
         
           DS1820_IO_DDR_SET;
           IO0SET|=DS1820_IO;
             delays(950); //延时400us
          return 1;
        }
}

void write_ds1820(uint8 data)//向DS18b20写入一个字节
{
   uint8 i; 
    DS1820_IO_DDR_SET;//DS1820_IO_DDR=1; 
    for(i=0;i<8;i++)
     {
        if(data & 0x01) { 
                            // 写 1
            IO0CLR|=DS1820_IO;
             delays(18);      //8us
             IO0SET|=DS1820_IO;
             delays(133);     //55us  
        }  
        else
        {                // 写 0 
            IO0CLR|=DS1820_IO;
            delays(133);     //55us
             IO0SET|=DS1820_IO;
            delays(18);      //8us
        }
       data = data>>1;
    }
}

uint8  read_bit_ds1820(void){
    uint8  data;
    DS1820_IO_DDR_SET;
    IO0CLR|=DS1820_IO;
      delays(1);        //延时1.25us
     IO0SET|=DS1820_IO;
      delays(2);      //延时2.5us
   
    DS1820_IO_DDR_CLR;
    data =((IO0PIN&DS1820_IO)>>17);
    delays(140);      //60us
    return data;
}


uint8  read_byte_ds1820(void){
   uint8  i,datak;
	 datak = 0;
    for(i=0;i<8;i++){
        datak = datak >> 1;    
        if(read_bit_ds1820()) datak |= 0x80;
    }
    return datak;
}


void covert_ds1820(void)
{
    write_ds1820(DS18B20_SKIP_ROM);
    write_ds1820(DS18B20_CONVERT_TEM);
}


uint8 read_tem_ds1820(void)
{
    uint8  Height,Low;
    uint16   Temp; 
    uint8 wendu=0;                              
    write_ds1820(DS18B20_SKIP_ROM);                   //跳过ROM
    write_ds1820(DS18B20_READ_RAM);                   //读存储器
    Low    = read_byte_ds1820();
    Height = read_byte_ds1820();
    Temp   = (Height << 8) + Low;
    wendu=(uint8)(Temp>>4) ;
   return wendu;
}


	



⌨️ 快捷键说明

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