参 数:无 返回值 :无
********************************************/ void stop(void) { }
/******************************************* 函数名称:mack
功 能:完成IIC的主机应答操作 参 数:无 返回值 :无
********************************************/ void mack(void) { }
/******************************************* 函数名称:mnack
功 能:完成IIC的主机无应答操作 参 数:无 返回值 :无
********************************************/
25
SDA_L; delay(); SCL_H; delay(); SDA_H; delay();
SDA_L; _NOP(); _NOP(); SCL_H; delay(); SCL_L; _NOP();_NOP(); SDA_H; delay();
void mnack(void) { }
/**********检查应答信号函数******************/ /*如果返回值为1则证明有应答信号,反之没有*/ /******************************************* 函数名称:check
功 能:检查从机的应答操作 参 数:无
返回值 :从机是否有应答:1--有,0--无 ********************************************/ void ack() { uchar i; i=0; SDA_in; SCL_H; delay();
while((P1IN&BIT1)&&(i<250)) i++; SDA_out; SCL_L; delay(); }
/******************************************* 函数名称:write1
功 能:向IIC总线发送一个1 参 数:无
26
SDA_H; _NOP(); _NOP(); SCL_H; delay(); SCL_L; _NOP(); _NOP(); SDA_L; delay();
返回值 :无
********************************************/ void write1(void) { }
/******************************************* 函数名称:write0
功 能:向IIC总线发送一个0 参 数:无 返回值 :无
********************************************/ void write0(void) { }
/******************************************* 函数名称:write1byte
功 能:向IIC总线发送一个字节的数据 参 数:wdata--发送的数据 返回值 :无
********************************************/ void write1byte(uchar wdata) {
uchar i;
27
SDA_H; delay(); SCL_H; delay(); SCL_L; delay();
SDA_L; delay(); SCL_H; delay(); SCL_L; delay();
}
/******************************************* 函数名称:read1byte
功 能:从IIC总线读取一个字节 参 数:无
返回值 :读取的数据
********************************************/ uchar read1byte(void) {
uchar rdata = 0x00,i; for(i = 0;i < 8;i++) { }
28
for(i = 8;i > 0;i--) { } SDA_H; _NOP();
if(wdata & 0x80) write1(); else
write0();
wdata <<= 1;
uchar flag;
SDA_H; delay(); SCL_H; delay(); flag = SDA_val; rdata <<= 1;
if(flag) rdata |= 0x01; SCL_L; delay();
SDA_in;
SDA_out;
return rdata;
}
void Confige1115(uchar channel) {
uchar a_channel; switch (channel) {
case 0:a_channel=0xC0;break; case 1:a_channel=0xD0;break; case 2:a_channel=0xE0;break; case 3:a_channel=0xF0;break; default: break; } start();
write1byte(address); ack();
write1byte(config); ack();
write1byte(a_channel); ack();
write1byte(Lsiwei); ack(); stop(); }
uint read1115() {
uchar result_l,result_h; uint result; start();
write1byte(address); ack();
write1byte(conversion); ack(); stop(); delay_ms(5);
29