打印

求救:protues仿真I2C实验中遇到问题

[复制链接]
3361|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include<reg51.h>
#define uchar unsigned char
sbit sck=P2^0;
sbit sda=P2^1;
void delay()
{
for(;;);
}
void init()
{
sck=1;
delay();
sda=1;
delay();
}
void start()
{

sda=1;
delay();
sck=1;
delay();
sda=0;
delay();

}
void stop()
{

sda=0;
delay();
sck=1;
delay();
sda=1;
delay();
}
void write_add(uchar data1)
{
uchar i,temp;
temp=data1;
for(i=0;i<8;i++)
{
  
  temp=temp<<1;
  sck=0;               //֮ǰstartÐźÅÖÐsck=1,sda=0;ΪÁËдÊý¾Ý
                       //±ØÐëÈÃsck´¦ÓÚ0·Ç±£³Ö״̬
  delay();
  sda=CY;
  sck=1;
  delay();
}
sck=0;                   //ΪӦ´ðÐźŵÄÉÏÉýÑØ×ö×¼±¸
delay();
sda=1;
delay();
}
void respons()
{
uchar j;
sck=1;
delay();
while((sda==1)&&(j<250)) //Ö»ÈÃ×ö250µÄÑÓʱ£¬Ò»¶Îʱ¼äÄÚûÓÐÊÕµ½´Ó»úµÄ
                          //Ó¦´ðÐźţ¬Ôò×Ô¶¯ÈÏΪ´Ó»úÒÑÕýÈ·½ÓÊÕµ½Êý¾Ý¡£
{
  j++;
}
sck=0;                   //Í£Ö¹±£³Ö
delay();
   
}
uchar read_add()
{
uchar k,data2;
sck=0;
delay();
sda=1;
delay();
for(k=0;k<8;k++)
{
  sck=1;
  delay();
  data2=(data2<<1)|sda;
  sck=0;
  delay();
}
return data2;
}
void write(uchar address,uchar info)
{
start();

write_add(0xa0);
respons();
write_add(address);
respons();
write_add(info);
respons();
stop();
  
}
uchar read(uchar address)
{
uchar da;
start();

write_add(0xa0);
respons();
write_add(address);
respons();
start();

write_add(0xa1);
respons();
da=read_add();
stop();
return da;
  
}
void delay1(uchar z)
{
uchar i,j;
for(i=z;i>0;i--)
  for(j=110;j>0;j--);
}
void main()
{

init();

//start();
write(23,0xaa);
delay1(100);
P1=read(23);
while(1);
}

想问的是:在仿真中怎么感觉24C02b没工作是的,本来写一个字节给EEPROM,再读取那个字节到数码管让其显示,牛人们帮我看看吧!!不胜感激!

相关帖子

沙发
yanguang_1261| | 2011-11-8 17:25 | 只看该作者
没看出来,你这程序应该是看的郭天祥视频写的吧。按他的程序应该是可以写出来的,我刚刚学到这里。可以点亮灯,数码管

使用特权

评论回复
板凳
何去何从者| | 2011-11-8 17:36 | 只看该作者
我还没学到这儿呢

使用特权

评论回复
地板
hrrhappy| | 2011-11-8 18:29 | 只看该作者
好好看程序吧

使用特权

评论回复
5
shizaigaole| | 2011-11-8 19:44 | 只看该作者
proteus自带I2C调试器,对于I2C调试比实际硬件来的还方便

使用特权

评论回复
6
xia_os| | 2011-11-28 21:17 | 只看该作者
LZ 这里漏写了。。。
void start()
{

sda=1;
delay();
sck=1;
delay();
sda=0;
delay();


sck = 0; //LZ你这里要将SCK拉低,因为你后面想要往总线里写数据的就应该占用总线,所以要拉低。
delay();

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

35

帖子

1

粉丝