📄 ds1621.c
字号:
/*
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -