|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2015-11-21 18:07:06
|
显示全部楼层
谢天谢地,终于有人回复!!
我把工程文件贴出来,还有模拟IIC的关键程序
我调试的结果是,SDA一直是高电平。手头没有示波器,只有万用表,所以只能求助万能的坛子啦,希望大家能指点一二,同时也能帮助像我一样的人。再次感谢!
void IIC_Init(void)
{
SCL_OUT;
SDA_OUT;
IIC_SCL=1;
IIC_SDA=1;
}
void IIC_Start(void)
{
SDA_OUT; //sda线输出
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总线,准备发送或接收数据
}
void IIC_Stop(void)
{
SDA_OUT;//sda线输出
IIC_SCL=1;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT;
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(3);
IIC_SCL=0;
delay_us(5);
}
void IIC_Send_Byte(uchar txd)
{
uchar t;
SDA_OUT;
IIC_SCL=0;//拉低时钟开始数据传输
for(t=0;t<8;t++)
{
IIC_SCL=0;
delay_us(2);
if(txd&0x80)
IIC_SDA=1;
else
IIC_SDA = 0;
txd <<= 1;
delay_us(2); //对TEA5767这三个延时都是必须的
IIC_SCL=1;
delay_us(2);
}
IIC_Ack();
}
uchar IIC_Read_Byte(void)
{
unsigned char i,receive=0;
// SDA_OUT;
// IIC_SDA=0;
// delay_us(2);
SDA_IN;//SDA设置为输入
delay_us(2);
for(i=0;i<8;i++ )
{
receive<<=1;
IIC_SCL=1;
delay_us(2);
if(READ_SDA)
receive |= 0x01;
IIC_SCL=0;
delay_us(2);
}
IIC_Ack(); //发送ACK
return receive;
}
我调试的感觉,是写数据应该没问题,但是读不出来数。。。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|