导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→AT24C256用C51写的Write子程序可以,,但是Re[chinashenguo]

 *第11687篇: AT24C256用C51写的Write子程序可以,,但是Read 读子程序不可以?

  
楼 主:chinashenguo 2003年5月9日16:39
 AT24C256用C51写的Write子程序可以,,但是Read 读子程序不可以?
AT24C256求教!! 想不通帮我研究一下!! 

//--------------------write-------------------                                           
              AT24C256_SCL=0;                                
    AT24C256_SDA=1;                                              
    AT24C256_SCL=1;                                              
    AT24C256_SDA=0;                                              
        Write8Bit(0xa0);           
        Write8Bit(0x00);           
        Write8Bit(0x10);           
        Write8Bit(0xaa);           
                                           
            AT24C256_SCL=0;                              
    AT24C256_SDA=0;                                               
    AT24C256_SCL=1;                                              
    AT24C256_SDA=1;                                                                                   
        Delay_xMs(100);            
//-------------------read---------------------                        
          AT24C256_SCL=0;                                       
    AT24C256_SDA=1;                                             
    AT24C256_SCL=1;                                             
    AT24C256_SDA=0;                                             
        Write8Bit(0xa0);           
        Write8Bit(0x00);           
        Write8Bit(0x10);           
           AT24C256_SCL=0;                                                   
    AT24C256_SDA=1;                                               
    AT24C256_SCL=1;                                              
    AT24C256_SDA=0;                                             
        Write8Bit(0xa1);           
        temp=Read8Bit();           
            AT24C256_SCL=0;                    
    AT24C256_SDA=0;                                            
    AT24C256_SCL=1;                                             
    AT24C256_SDA=1;                    
           
;---------------------------------------------
/***************************************************************************/
bit Write8Bit(unsigned char input) {
    unsigned char i;
    for(i=0;i  <8;i++) {
        input  <  <=1;
        AT24C256_SCL=0;
        AT24C256_SDA=CY;
        AT24C256_SCL=1;
    }
    AT24C256_SCL=0;_nop_();
    AT24C256_SDA=1;_nop_();
    AT24C256_SCL=1;_nop_();
    CY=AT24C256_SDA;
    return(1);
}

/***************************************************************************/
unsigned char Read8Bit() {
    unsigned char temp,rbyte=0;
    for(temp=8;temp!=0;temp--) {
            rbyte=rbyte  <  <1;
        AT24C256_SCL=0;
        AT24C256_SCL=1;
                 rbyte=rbyte|((unsigned char)(AT24C256_SDA));
    }
    AT24C256_SCL=0;
    AT24C256_SDA=0;
    AT24C256_SCL=1;
    AT24C256_SCL=0;
    AT24C256_SDA=0;
    return(rbyte); 
}      


上面的程序我用仿真器仿可以将24C256的地址0010处写入aa正常而用下面的读程序读出0010的内容为FF不正确.
因为我用上面的程序写后再用汇编编的程序读出来的数值是对的aa
我不知上面的C51程序读程序错在哪里?求教!      

 
 

  
2楼:maxbar 2003年5月9日20:05
 在读的程序里加一个循环程序
  
3楼:zhonghuahun212 2005年3月18日10:32
 unsigned char Read8B
unsigned char Read8Bit() {
    unsigned char temp,rbyte=0;
    for(temp=8;temp!=0;temp--) {
            rbyte=rbyte  <  <1;
        AT24C256_SCL=0;
        AT24C256_SCL=1;
                 rbyte=rbyte|((unsigned char)(AT24C256_SDA));
                 AT24C256_SCL=0;//此处应该加一个把
    }
    AT24C256_SCL=0;
    AT24C256_SDA=0;
    AT24C256_SCL=1;
    AT24C256_SCL=0;
    AT24C256_SDA=0;
    return(rbyte); 
}      
你可知道iic协议,只有当scl为地电平的时候,sda才会反转,也就是说rbyte=rbyte|((unsigned char)(AT24C256_SDA));这一不执行完了以后,你看看,是不是scl从0马上变为一,sda来不及翻转,所以每次读出来的sda都是1
最后就是ff了。
我不知道我该得对不对,我也是刚学这个芯片的,多多向你们学习啊!

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:80c186的朋友?

[下一篇主题]:請各位多給一些建議