#include "../main/SystemInclude.h" //############################################################################## void SI2C_Init(void) { SCL_OUT(); SDA_OUT(); SET_SCL(); SET_SDA(); } /******************************************************************************/ void SI2C_Start(void) { SCL_OUT(); SDA_OUT(); SET_SDA(); SET_SCL(); CLR_SDA(); SI2C_Delay(); CLR_SCL(); } /******************************************************************************/ void SI2C_Stop(void) { CLR_SCL(); SI2C_Delay(); CLR_SDA(); SI2C_Delay(); SET_SCL(); SET_SDA(); } /******************************************************************************/ void SI2C_Ack(void) { CLR_SDA(); SI2C_Delay(); SET_SCL(); SI2C_Delay(); CLR_SCL(); SI2C_Delay(); SET_SDA(); } /******************************************************************************/ void SI2C_NoAck(void) { SET_SDA(); SI2C_Delay(); SET_SCL(); SI2C_Delay(); CLR_SCL(); } /******************************************************************************/ u8 SI2C_TestAck(void) { u8 ack; SDA_IN(); SET_SCL(); SI2C_Delay(); ack = READ_SDA(); CLR_SCL(); SDA_OUT(); if(ack != 0) return 1; return 0; } /******************************************************************************/ u8 SI2C_Write(u8 writeData) { u32 temp; for(temp=0; temp<8; temp++) { if((writeData & 0x80) == 0) CLR_SDA(); else SET_SDA(); SET_SCL(); SI2C_Delay(); writeData = writeData << 1; CLR_SCL(); SI2C_Delay(); } return SI2C_TestAck(); } /******************************************************************************/ u8 SI2C_Read(void) { u8 reedByte=0; u32 temp; SDA_IN(); for(temp=0; temp<8; temp++) { SET_SCL(); SI2C_Delay(); reedByte <<= 1; if(READ_SDA() != 0) reedByte |= 0x01; CLR_SCL(); SI2C_Delay(); } SDA_OUT(); return(reedByte); }