往EEPROM AT24C1024指定地址读一个字节的问题。

a006045 2010-07-21 12:04:24

/*往 AT24C1024指定地址读一个字节
 */
void read_8bit(unsigned char *ch)
{
unsigned char i;
unsigned char temp=0x80;
*ch=0x00;
SCL=0;
for(i=0;i<8;i++)
{
SDA=1; //SDA=1这语句在这里有什么用呢。我去掉后程序照样正常运行。
SCL=1; //上拉SCL读数据
iic_delay();
if(SDA)
*ch|=temp;
temp >>= 1;
SCL=0;
iic_delay();
}
}
...全文
322 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesea87 2010-07-21
  • 打赏
  • 举报
回复
你用的单片机是51系列的吧,要读入外面数据的时候,该引脚必须置1(置1就是使I/O口的MSO管关闭),不然读到的电平值可肯定是0;

你那句话是确保在读取之前SDA为1(虽然可能已经是1 了);所以最好不要删除,若想做试验,改成置0,那么读到的数据将全部是0;
Great_Bug 2010-07-21
  • 打赏
  • 举报
回复
单片机读的时候,SDA就是输入吧?
a006045 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 great_bug 的回复:]
SDA=1; //SDA=1这语句在这里有什么用呢。我去掉后程序照样正常运行。

这个一般是用在那些所谓的"准双向口"的IO上的,写1就成为输入.它在这里写一次1是为了确保它是输入.
你最好留着这一行,免得以后程序出了问题找不着错在哪里.
[/Quote]我这里是读取SDA。。不是作为输入啊。
Great_Bug 2010-07-21
  • 打赏
  • 举报
回复
SDA=1; //SDA=1这语句在这里有什么用呢。我去掉后程序照样正常运行。

这个一般是用在那些所谓的"准双向口"的IO上的,写1就成为输入.它在这里写一次1是为了确保它是输入.
你最好留着这一行,免得以后程序出了问题找不着错在哪里.

27,370

社区成员

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

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