打印

请高手帮我看看这程序哪儿有问题啊,搞了好久了:O(

[复制链接]
1605|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jovewaters|  楼主 | 2007-3-27 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sd, TE, WRITE, AC, ck
这是小弟写的AT24C02的测试程序,读出来
老是0xAA,请高手指点一下...


uchar dd,kkk,bm;

void T1_interrupt() interrupt 3 
{
      kkk=1;
      TR1=0;
}

//延时
void Delay(uchar time)
{
    uchar i;
    for(i=0;i<time;i++)
    {        
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
     }
}

void mack()//主机应答 
{
    SDA=0;
    SCL=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    SCL=0;
   // SCL=1;/////////////
    SDA=1;
}
    
void mnack()//主机非应答 
{
    SDA=1;
    SCL=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    SCL=0;
   // SCL=1;///////////
    SDA=0;
}



void cack()
{
    SCL=0;
    _nop_();
    _nop_();
    SDA=1;
    SCL=1;
    _nop_();_nop_();_nop_();
    //SCL=0;//////////////
//    delay(100);
    if(SDA==0)
    {
    F0=0;
    }
    else
    {
    F0=1;
    }
   SCL=0;
}


void start()
{

    SCL=1;
    SDA=1;
    SDA=0;
    SCL=0;
}


void stop()
{
    SCL=0;
    SDA=0;
    SCL=1;
    _nop_();
    SDA=1;
    SDA=0;
}

void write1()
{
    SDA=1;
     SCL=1;
     _nop_();
     SCL=0;
     SDA=0;
}

void write0()
{
     SDA=0;
    SCL=1;
     _nop_();
     SCL=0;
//    SDA=1;
}

void write8(uchar k)
{
    uchar i,kk;
    for(i=0;i<8;i++)
    {
        kk=k<<i;
        if((kk&0x80)>0) write1();
          else write0();    
    }
}

uchar read8()
{
    uchar i,da=0;
    for(i=0;i<8;i++)
    {
        SDA=1;
        da=da<<1;
        SCL=1;
        if(SDA) da=da++; 
        SCL=0;
     Delay(500);
    }
    return(da);
}



void Write24(uchar address,uchar datas)
{
    do
    {
      start();
      write8(0xA0);
      cack();
    }while(F0);

    do 
    {
        write8(address);
        cack();
    }while(F0);

    do 
    {
        write8(datas);
        cack();
    }while(F0);
    
    stop();   

    TR1=0;
    TMOD=0x16;  //      ;器1:定时、方式1(即16位方式)。器0:仍为计数方式,8位自再装计数方式
    TH1=0xD5;
    TL1=0x9D;     // ;D59DH=65536-10851。10000(微秒)=10851*11.0592/12
    TR1=1;
    kkk=0;
    while(kkk==0); 
    _nop_();
}


uchar Read24(uchar address)
{
    uchar db;
    do
    {
      start();
      write8(0xA0);
      cack();
    }while(F0);

    do 
    {
        write8(address);
        cack();
    }while(F0);

    do
    {
      start();
      write8(0xA1);
      cack();
    }while(F0);

    db=read8();
    mnack();
    //mnack();

    stop();
    return(db);
}


void main()
{

    EA=1;
    ET1=1;
  
        
    Write24(0x04,0x55); 
     _nop_(); 
     _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
    dd=Read24(0x04); 

    if(dd==0x55) 
     bm=0;
     else bm=1;
     while(1)
    {
        ;
    }    
}

相关帖子

沙发
dai_weis| | 2007-3-27 22:09 | 只看该作者
板凳
ayb_ice| | 2007-3-28 08:09 | 只看该作者

随便说说

  LZ可是用NOP的高手啊...

使用特权

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

本版积分规则

16

主题

21

帖子

0

粉丝