/* ----------------------------------------------- 功能: 写入一个字节的数据到SCCB 参数: 写入数据 返回值: 发送成功返回1,发送失败返回0 ----------------------------------------------- */ unsigned char SCCBwriteByte(unsigned char m_data) { unsigned char j,tem; for(j=0;j<8;j++) //循环8次发送数据 { if((m_data<<j)&0x80) { SCCB_SID_H(); } else { SCCB_SID_L(); } delay_us(500); SCCB_SIC_H(); delay_us(500); SCCB_SIC_L(); delay_us(500); } delay_us(100); SCCB_SID_IN;/*设置SDA为输入*/ delay_us(500); SCCB_SIC_H(); delay_us(100); if(SCCB_SID_STATE){tem=0;} //SDA=1发送失败,返回0} else {tem=1;} //SDA=0发送成功,返回1 SCCB_SIC_L(); delay_us(500); SCCB_SID_OUT;/*设置SDA为输出*/ return (tem); }
u8 SCCB_Write(u8 m_data) { u8 j,tem; for(j=0;j<8;j++) //循环8次发送数据 { if(m_data&0x80)SCCB_SID_H();//(m_data<<j) else SCCB_SID_L(); m_data<<=1; delay_us(50); SCCB_SIC_H(); delay_us(50); SCCB_SIC_L(); delay_us(50); } delay_us(10); SCCB_DATA_IN; delay_us(50); SCCB_SIC_H(); delay_us(10); if(SCCB_SID_STATE)tem=1;//SDA=1发送失败 else tem=0;//SDA=0发送成功,返回1 SCCB_SIC_L(); delay_us(50); SCCB_DATA_OUT; return tem; //false 1,success 0 }
void SCCB_Stop(void) { SCCB_SID_L(); delay_us(50); SCCB_SIC_H(); delay_us(50); SCCB_SID_H(); delay_us(50); }
void noAck(void) { SCCB_SID_H(); delay_us(50); SCCB_SIC_H(); delay_us(50); SCCB_SIC_L(); delay_us(50); SCCB_SID_L(); delay_us(50); }
void SCCB_Start(void) { SCCB_SID_H(); //数据线高电平 delay_us(50); SCCB_SIC_H(); //在时钟线高的时候数据线由高至低 delay_us(50); SCCB_SID_L(); delay_us(50); SCCB_SIC_L(); //数据线恢复低电平,单操作函数必要 delay_us(50); }
/* ----------------------------------------------- 功能: stop命令,SCCB的停止信号 参数: 无 返回值: 无 ----------------------------------------------- */ void stopSCCB(void) { SCCB_SID_L(); delay_us(500); SCCB_SIC_H(); delay_us(500); SCCB_SID_H(); delay_us(500); }
//SCCB 读取一个字节 //在SCL的上升沿,数据锁存 //返回值:读到的数据 u8 SCCB_Read(void) { u8 read,j; read=0x00; SCCB_DATA_IN; delay_us(50); for(j=8;j>0;j--) //循环8次接收数据 { delay_us(50); SCCB_SIC_H(); //delay_us(50); read=read<<1; if(SCCB_SID_STATE)read++; delay_us(50); SCCB_SIC_L(); } SCCB_DATA_OUT; return read; }
/* ----------------------------------------------- 功能: 一个字节数据读取并且返回 参数: 无 返回值: 读取到的数据 ----------------------------------------------- */ unsigned char SCCBreadByte(void) { unsigned char read,j; read=0x00; SCCB_SID_IN;/*设置SDA为输入*/ delay_us(500); for(j=8;j>0;j--) //循环8次接收数据 { delay_us(500); SCCB_SIC_H(); delay_us(500); read=read<<1; if(SCCB_SID_STATE) { read=read+1; } SCCB_SIC_L(); delay_us(500); } return(read); }