求助!avr mega128 不能 读 pcf8563

Gavin0911 2016-12-10 03:25:43


现在读不了字节 ,也不知写没写进去

网上查说: 晶振没起振也读不了。

我量OSCI 管脚电压才0.12V ;OSCO管脚 0.44V

这样应该不正常吧?

大侠们请帮小弟看看! 谢谢!



原理图

下图是我用示波器打出来的图像

大侠们帮小弟看看!

代码:
void T_I2C_Start()//定义I2C起始条件产生
{
T_OUT_SDA;//设置SDA为输出口
T_S_SDA; //SDA管脚输出高电平
T_I2C_Delay(5);//延迟一点时间
T_S_SCL; //SCL管脚输出高电平
T_I2C_Delay(5);//延迟一点时间
T_C_SDA; //SDA管脚输出低电平
T_I2C_Delay(5);//延迟一点时间
T_C_SCL; //SCL管脚输出低电平
T_I2C_Delay(5);//延迟一点时间
}
void T_I2C_Stop() //定义I2C终止条件产生
{
T_OUT_SDA;//设置SDA为输出口
T_C_SDA; //SDA管脚输出低电平
T_I2C_Delay(5);//延迟一点时间
T_S_SCL; //SCL管脚输出高电平
T_I2C_Delay(5);//延迟一点时间
T_S_SDA; //SDA管脚输出高电平
T_I2C_Delay(5);//延迟一点时间
T_C_SCL; //SCL管脚输出低电平
}
void T_I2C_TxByte(char ch)//定义写字节函数
{//数据发送顺序是从高到低位发送的
int i;

T_OUT_SDA;//设置SDA为输出口

T_C_SCL;
T_I2C_Delay(1);////延迟一点时间
for(i=8; i>0; i--)
{
if((ch & 0x80) == 0x80)//依次取最高位,并输出到数据输出管脚
{
T_S_SDA; //SDA管脚输出高电平
}
else
{
T_C_SDA; //SDA管脚输出低电平
}
ch <<=1; //左移发送下一位
T_S_SCL; //置高电平,确认数据
T_I2C_Delay(5);//延迟一点时间
T_C_SCL;
T_I2C_Delay(5);
}
T_I2C_Delay(5);//延迟一点时间
T_I2C_GetACK();
}
char T_I2C_RxByte()//定义读字节函数
{//从低位到高位的顺序接收
char ch=0;
int i;
T_IN_SDA;//定义SDA为输入口
//T_I2C_Delay(5);//延迟一点时间

for(i=8; i>0; i--)
{
T_C_SCL;
T_I2C_Delay(5);//延迟一点时间
T_S_SCL;
T_I2C_Delay(5);//延迟一点时间
ch = ch<<1;
if(T_R_SDA)
{
ch++;
}
}
T_C_SCL;
T_I2C_Delay(5);//延迟一点时间
return(ch);
}
char T_I2C_GetACK() //定义确认函数
{
char ch;

//T_OUT_SDA;//设置SDA为输出口
//T_I2C_Delay(8);//延迟一点时间
T_C_SCL; //SCL管脚输出低电平
T_S_SDA; //SDA管脚输出高电平
T_I2C_Delay(5);//延迟一点时间
T_S_SCL; //SCL管脚输出高电平
T_IN_SDA;//定义SDA为输入口
T_I2C_Delay(5);//延迟一点时间
ch = (T_R_SDA);//读SDA
int i=0;
while(ch!=0)
{
ch = (T_R_SDA);
if((i++) > 250) break;
}
T_C_SCL; //SCL管脚输出低电平
T_I2C_Delay(5);//延迟一点时间
return(ch);
}
void T_I2C_Write(char nAddr,char ch)//定义写字节操作
{
T_I2C_Start();
T_I2C_TxByte(0x0A2);//发写命令
T_I2C_TxByte(nAddr);// 发送地址
T_I2C_TxByte(ch);// 发送字节
T_I2C_Stop();
}
char T_I2C_Read(char nAddr)//定义读字节操作
{
char ch;
T_I2C_Start();
T_I2C_TxByte(0x0A2);//发写命令
T_I2C_TxByte(nAddr);// 发送地址
T_I2C_Start();
T_I2C_TxByte(0x0A3);//发读命令
ch = T_I2C_RxByte();
T_I2C_Stop();
return(ch);
}



...全文
353 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly 100% 2016-12-12
  • 打赏
  • 举报
回复
ack 好像完全没拉下来, 上拉电阻改小一点试试看
Gavin0911 2016-12-12
  • 打赏
  • 举报
回复
不对吧, 应该是加大阻值吧 ,不是减小阻值
Gavin0911 2016-12-12
  • 打赏
  • 举报
回复
换了个3.3k 的也不行

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧