118 lines
2.2 KiB
C
118 lines
2.2 KiB
C
|
//#include "user_iic.h"
|
|||
|
//
|
|||
|
//
|
|||
|
//
|
|||
|
///*时钟线SCL高电平时,拉低数据线SDA-------------启动
|
|||
|
//时钟线SCL高电平时,拉高数据线SDA-------------停止*/
|
|||
|
////产生IIC起始信号
|
|||
|
//void IIC_Start(void)
|
|||
|
//{
|
|||
|
// IIC_SDA_1();
|
|||
|
// IIC_SCL_1();
|
|||
|
// delay_us(4);
|
|||
|
// IIC_SDA_0();//START:when CLK is high,DATA change form high to low
|
|||
|
// delay_us(4);
|
|||
|
// IIC_SCL_0();//钳住I2C总线,准备发送或接收数据
|
|||
|
//}
|
|||
|
////产生IIC停止信号
|
|||
|
//void IIC_Stop(void)
|
|||
|
//{
|
|||
|
// IIC_SCL_0();
|
|||
|
// IIC_SDA_0();
|
|||
|
// delay_us(4);
|
|||
|
// IIC_SCL_1();
|
|||
|
// IIC_SDA_1();
|
|||
|
// delay_us(4);
|
|||
|
//}
|
|||
|
////等待应答信号到来
|
|||
|
////返回值:1,接收应答失败
|
|||
|
//// 0,接收应答成功
|
|||
|
//uint8_t IIC_Wait_Ack(void)
|
|||
|
//{
|
|||
|
// uint8_t ucErrTime=0;
|
|||
|
// IIC_SDA_1();delay_us(1);
|
|||
|
// IIC_SCL_1();delay_us(1);
|
|||
|
// while(READ_SDA())
|
|||
|
// {
|
|||
|
// ucErrTime++;
|
|||
|
// if(ucErrTime>100)
|
|||
|
// {
|
|||
|
// IIC_Stop();
|
|||
|
// return 1;
|
|||
|
// }
|
|||
|
// }
|
|||
|
// IIC_SCL_0();//时钟输出0
|
|||
|
// return 0;
|
|||
|
//}
|
|||
|
////产生ACK应答
|
|||
|
//void IIC_Ack(void)
|
|||
|
//{
|
|||
|
// IIC_SCL_0();
|
|||
|
// IIC_SDA_0();
|
|||
|
// delay_us(2);
|
|||
|
// IIC_SCL_1();
|
|||
|
// delay_us(2);
|
|||
|
// IIC_SCL_0();
|
|||
|
// IIC_SDA_1();
|
|||
|
//}
|
|||
|
////不产生ACK应答
|
|||
|
//void IIC_NAck(void)
|
|||
|
//{
|
|||
|
// IIC_SCL_0();
|
|||
|
// IIC_SDA_1();
|
|||
|
// delay_us(4);
|
|||
|
// IIC_SCL_1();
|
|||
|
// delay_us(4);
|
|||
|
// IIC_SCL_0();
|
|||
|
// IIC_SDA_1();
|
|||
|
//}
|
|||
|
////IIC发送一个字节
|
|||
|
////返回从机有无应答
|
|||
|
////1,有应答
|
|||
|
////0,无应答
|
|||
|
//void IIC_Send_Byte(uint8_t txd)
|
|||
|
//{
|
|||
|
// uint8_t t;
|
|||
|
// IIC_SCL_0();//拉低时钟开始数据传输
|
|||
|
// for(t=0;t<8;t++)
|
|||
|
// {
|
|||
|
// if((txd&0x80)>>7)
|
|||
|
// {
|
|||
|
// IIC_SDA_1();
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// IIC_SDA_0();
|
|||
|
// }
|
|||
|
// txd<<=1;
|
|||
|
// delay_us(2); //对TEA5767这三个延时都是必须的
|
|||
|
// IIC_SCL_1();
|
|||
|
// delay_us(2);;
|
|||
|
// IIC_SCL_0();
|
|||
|
// delay_us(2);
|
|||
|
// }
|
|||
|
//}
|
|||
|
//
|
|||
|
//
|
|||
|
////读1个字节,ack=1时,发送ACK,ack=0,发送nACK
|
|||
|
//uint8_t IIC_Read_Byte(unsigned char ack)
|
|||
|
//{
|
|||
|
// unsigned char i,receive=0;
|
|||
|
// for(i=0;i<8;i++ )
|
|||
|
// {
|
|||
|
// IIC_SCL_0();
|
|||
|
// delay_us(2);
|
|||
|
// IIC_SCL_1();
|
|||
|
// receive<<=1;
|
|||
|
// if(READ_SDA())receive++;
|
|||
|
// delay_us(1);
|
|||
|
// }
|
|||
|
// if (!ack)
|
|||
|
// IIC_NAck();//发送nACK
|
|||
|
// else
|
|||
|
// IIC_Ack(); //发送ACK
|
|||
|
// return receive;
|
|||
|
//}
|
|||
|
//
|
|||
|
//
|
|||
|
//
|