📄 drv_18b20.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 + -