ds1621.c

来自「CVAVR的函数库的源代码。开发AVR的编译器CodeVision AVR最新版」· C语言 代码 · 共 93 行

C
93
字号
/*
  Dallas Semiconductor DS1621 I2C bus
  thermometer/thermostat functions

  CodeVisionAVR C Compiler
  (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.
*/

union ds1621_temp {
                  unsigned char b[2];
                  int w;
                  };
                  
unsigned char ds1621_get_status(unsigned char chip)
{
unsigned char i2c_address,status;
i2c_address=0x90|(chip<<1);
i2c_start();
i2c_write(i2c_address);
i2c_write(0xac);
i2c_start();
i2c_write(++i2c_address);
status=i2c_read(0);
i2c_stop();
return status;
}

void ds1621_set_status(unsigned char chip,unsigned char status)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0xac);
i2c_write(status);
i2c_stop();
}

void ds1621_set_temp(unsigned char chip,unsigned char cmd,char data)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(cmd);
i2c_write(data);
i2c_write(0);
i2c_stop();
while (ds1621_get_status(chip) & 0x10);
}

void ds1621_start(unsigned char chip)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0xee);
i2c_stop();
}

void ds1621_stop(unsigned char chip)
{
i2c_start();
i2c_write(0x90|(chip<<1));
i2c_write(0x22);
i2c_stop();
}

void ds1621_init(unsigned char chip,signed char tlow,signed char thigh,
unsigned char pol)
{
//set configuration register
ds1621_set_status(chip,8+(pol<<1));
//set low temperature
ds1621_set_temp(chip,0xa2,tlow);
//set high temperature
ds1621_set_temp(chip,0xa1,thigh);
//start temperature conversions
ds1621_start(chip);
//while ((ds1621_get_status(chip) & 0x80)==0);
}

int ds1621_temperature_10(unsigned char chip)
{
union ds1621_temp tt;
unsigned char i2c_addr;
i2c_addr=0x90|(chip<<1);
i2c_start();
i2c_write(i2c_addr);
i2c_write(0xaa);
i2c_start();
i2c_write(++i2c_addr);
tt.b[1]=i2c_read(1);
tt.b[0]=i2c_read(0);
i2c_stop();
return (tt.w>>7)*5;
}

⌨️ 快捷键说明

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