*--------------------------------------;模块名称:s_write_byte();;功能:SHT10写函数;参数说明:;创建日期:;版本:;修改日期:;修改说明:;-------------------------------------*/cha... *--------------------------------------
;模块名称:s_write_byte();
;功 能:SHT10写函数
;参数说明:
;创建日期:
;版 本:
;修改日期:
;修改说明:
;-------------------------------------*/
char s_write_byte(unsigned char value)
//----------------------------------------------------------------------------------
// writes a byte on the Sensibus and checks the acknowledge
{
unsigned char i,error=0;
for (i=0x80;i>0;i/=2) //shift bit for masking
{
if (i & value) DATA=1; //masking value with i , write to SENSI-BUS
else DATA=0;
SCK=1; //clk for SENSI-BUS
_nop_();_nop_();_nop_(); //pulswith approx. 3 us
SCK=0;
}
DATA=1; //release DATA-line
SCK=1; //clk #9 for ack
error=DATA; //check ack (DATA will be pulled down by SHT11),DATA在第9个上升沿将被SHT11自动下拉为低电平。
_nop_();_nop_();_nop_();
SCK=0;
DATA=1; //release DATA-line
return error; //error=1 in case of no acknowledge //返回:0成功,1失败
}
就是标准的I2C写字节操作呀.从valueZ高位开始发送数据到i2c总线上,共发送8次.(i/=2相当于右移一位).发送完成后,再从DATA数据线上接收应答.