4643|9

13

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

我这是用单片机普通I/O模拟IIC,向E2PROM中写1个字节的,然后读出来校验,可以就是出错,我不知道是读错误,还是根本没有写进去,下面是我的程序,帮忙看看,谢谢了

#define  CSI24WC02     0xA0             /* 定义从要地址,忽略通用地址 */
#define  SCL   (1<<2)
#define  SDA   (1<<3)
#define  LED1  (1<<22)
void i2c_start(void)//发送开始信号
{
      IO0SET = SDA;
      IO0SET = SCL;
      IO0CLR = SDA;
      IO0CLR = SCL;
      return;
}
//****************************************************************************
void i2c_stop(void)//发送停止信号
{
      IO0CLR = SDA;
      IO0SET = SCL;
      IO0SET = SDA;
      return;
}    
//****************************************************************************
uint8   i2c_ack(void)//确认信号
{
      uint8    ack;
      IO0SET = SDA;
      IO0SET = SCL;
      if(SDA==1)
           ack = 1;
       else
           ack = 0;
       IO0CLR = SCL;
       return  (ack);
}
//****************************************************************************
void i2c_send8bit(uint8 b)
{
       uint8 a;
       for(a=0;a<8;a++)
        {
          if (b&0x80==1)
             IO0SET = SDA;
          else
             IO0CLR = SDA;
          IO0SET = SCL;
          IO0CLR = SCL;
         }
       
       return;
}

//****************************************************************************
uint8 i2c_receive8bit(void)
{
       uint8 a;
       uint8 b=0;
       for(a=0;a<8;a++)
          {
            IO0SET = SCL;
            b=b<<1;
            if(SDA==1)
                b=b|0x01;       //按位或
            IO0CLR = SCL;
           }
       return(b);
}

//****************************************************************************
//i2c_write(地址,数据),写一个字节

void i2c_write(uint8 Address,uint8 Data)
{
       i2c_start();
       i2c_send8bit(CSI24WC02);          
       do{   
          i2c_send8bit(Address);
           }while(i2c_ack());
       do{
           i2c_send8bit(Data);
            }while(i2c_ack());
       i2c_stop();
       return;
}

//****************************************************************************
//i2c_read(地址,数据),写一个字节

uint8 i2c_read(uint8 Address)
{
       uint8 c;
       i2c_start();
       i2c_send8bit(CSI24WC02);                      
       do{                   
           i2c_send8bit(Address);      
           }while(i2c_ack());
       do{
           i2c_start();
           i2c_send8bit(0xA1);
       }while(i2c_ack());
       do{      
           c=i2c_receive8bit();
           }while(i2c_ack());
       i2c_stop();
       return(c);
int main(void)
{
       uint8 dd;
       PINSEL0 = 0x00000000;   // 设置I2C口连接
       PINSEL1 = 0x00000000;
        i2c_write(0x02,0x06);
       DelayNS(5);
       dd=i2c_read(0x02);
        for(;;)
        {}
       return(0);
}

此帖出自单片机论坛

最新回复

你们真牛,大篇的程序就这么往上贴?   详情 回复 发表于 2007-4-12 13:39
点赞 关注
 

回复
举报

13

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

Re: 求助

请大家给点意见
此帖出自单片机论坛
 
 

回复

1284

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 

Re: 求助

在忙,。。。我给你一个,你参考下。。。
此帖出自单片机论坛
 
个人签名呼呼...在校应届大四学生,代做电子类毕业设计(测量类、仪器类、控制类、无线通信类、电子产品类、界面设计类、纯论文类等等,一一俱全)。涉及各种单片机软硬件设计、电路模拟分析、FPGA、CPLD、ARM7/ARM9、LINUX、VB/VC++/QT界面等等。包过。。。欢迎咨询。Tel:13957160506。QQ:273437087
 
 

回复

1284

帖子

0

TA的资源

五彩晶圆(中级)

4
 

Re: 求助

sbit a0=ACC^0; //定义ACC的位,利用ACC操作速度最快 sbit a1=ACC^1; sbit a2=ACC^2; sbit a3=ACC^3; sbit a4=ACC^4; sbit a5=ACC^5; sbit a6=ACC^6; sbit a7=ACC^7; void s24(void) { _nop_();scl=0;sda=1;scl=1;_nop_();sda=0;_nop_();scl=0; } void s240(void) { _nop_();scl0=0;sda0=1;scl0=1;_nop_();sda0=0;_nop_();scl0=0; } void p24(void) { sda=0;scl=1;_nop_();sda=1; } void p240(void) { sda0=0;scl0=1;_nop_();sda0=1; } unsigned char rd24(void) { sda=1; scl=1;a7=sda;scl=0; scl=1;a6=sda;scl=0; scl=1;a5=sda;scl=0; scl=1;a4=sda;scl=0; scl=1;a3=sda;scl=0; scl=1;a2=sda;scl=0; scl=1;a1=sda;scl=0; scl=1;a0=sda;scl=0; sda=1;scl=1;scl=0; return(ACC); } void wd24(unsigned char dd) { ACC=dd; sda=a7;scl=1;scl=0; sda=a6;scl=1;scl=0; sda=a5;scl=1;scl=0; sda=a4;scl=1;scl=0; sda=a3;scl=1;scl=0; sda=a2;scl=1;scl=0; sda=a1;scl=1;scl=0; sda=a0;scl=1;scl=0; sda=1;scl=1; } unsigned char read(unsigned int address) { unsigned char dd; dd=((address&0x7ff)/256)<<1; s24();wd24(0xa0|dd);scl=0;wd24(address);scl=0; s24();wd24(0xa1|dd);scl=0;dd=rd24();p24();return(dd); } void write(unsigned int address,unsigned char dd) { unsigned char ddd; ddd=((address&0x7ff)/256)<<1; s24();wd24(0xa0|ddd);scl=0;wd24(address);scl=0;wd24(dd);scl=0;p24(); time=0; //time为定时器时间参考,time增加1代 //表1ms,如果没有用定时器,取消该行 while (1) { s24(); wd24(0xa0|ddd); sda=1; if (sda==0) break; if (time>10) break; //此行防止由于eeprom器件损坏后的死循环 scl=0; } }
此帖出自单片机论坛
 
个人签名呼呼...在校应届大四学生,代做电子类毕业设计(测量类、仪器类、控制类、无线通信类、电子产品类、界面设计类、纯论文类等等,一一俱全)。涉及各种单片机软硬件设计、电路模拟分析、FPGA、CPLD、ARM7/ARM9、LINUX、VB/VC++/QT界面等等。包过。。。欢迎咨询。Tel:13957160506。QQ:273437087
 
 

回复

1284

帖子

0

TA的资源

五彩晶圆(中级)

5
 

Re: 求助

读24C02的00H~07H到CPU的RAM的31H~38H单元 #include /*=== 头文件包含 ===*/ #include #include #define uchar unsigned char #define uint unsigned int sbit SCL=P1^0; sbit SDA=P1^1; sbit a_7=ACC^7; sbit a_0=ACC^0; uchar r_byte(); void w_byte(uchar by); void start(); void stop24(); main() { uchar i; uchar datay[0x40]; start(); w_byte(0xa0); w_byte(datay[0]); for(i=0;i<0x8;i++) { start(); w_byte(0xa1); datay=r_byte(); } stop24(); } void w_byte(uchar by) { uchar i; _nop_(); ACC=by; for(i=0;i<8;i++) { SCL=0; SDA=a_7; ACC=ACC<<1; SCL=1; } _nop_(); SCL=0; _nop_(); SCL=1; while(SDA); SCL=0; _nop_(); } uchar r_byte() { uchar i; _nop_(); for(i=0;i<8;i++) { SCL=0; _nop_(); SCL=1; _nop_(); a_0=SDA; ACC=ACC<<1; } SCL=0; _nop_(); SDA=1; _nop_(); SCL=1; return ACC; } void start() { SCL=0; _nop_(); SDA=1; _nop_(); SCL=1; _nop_(); SDA=0; _nop_(); SCL=0; } void stop24() { SCL=0; _nop_(); SDA=0; _nop_(); SCL=1; _nop_(); SDA=1; _nop_(); SCL=0; }
此帖出自单片机论坛
 
个人签名呼呼...在校应届大四学生,代做电子类毕业设计(测量类、仪器类、控制类、无线通信类、电子产品类、界面设计类、纯论文类等等,一一俱全)。涉及各种单片机软硬件设计、电路模拟分析、FPGA、CPLD、ARM7/ARM9、LINUX、VB/VC++/QT界面等等。包过。。。欢迎咨询。Tel:13957160506。QQ:273437087
 
 

回复

1284

帖子

0

TA的资源

五彩晶圆(中级)

6
 

Re: 求助

把CPU的RAM的31H~38H的数据24c02的00H~07H单元 #include /*=== 头文件包含 ===*/ #include #include #define uchar unsigned char #define uint unsigned int sbit SCL=P1^0; sbit SDA=P1^1; sbit a_7=ACC^7; void w_byte(uchar by); void start(); void stop24(); main() { uchar i; uchar datay[0x40]; for(i=0;i<0x40;i++) { start(); w_byte(0xa0); w_byte(datay); w_byte(0x99); } stop24(); } void w_byte(uchar by) { uchar i; _nop_(); ACC=by; for(i=0;i<8;i++) { SCL=0; SDA=a_7; ACC=ACC<<1; SCL=1; } _nop_(); SCL=0; _nop_(); SCL=1; while(SDA); SCL=0; _nop_(); } void start() { SCL=0; _nop_(); SDA=1; _nop_(); SCL=1; _nop_(); SDA=0; _nop_(); SCL=0; } void stop24() { SCL=0; _nop_(); SDA=0; _nop_(); SCL=1; _nop_(); SDA=1; _nop_(); SCL=0; }
此帖出自单片机论坛
 
个人签名呼呼...在校应届大四学生,代做电子类毕业设计(测量类、仪器类、控制类、无线通信类、电子产品类、界面设计类、纯论文类等等,一一俱全)。涉及各种单片机软硬件设计、电路模拟分析、FPGA、CPLD、ARM7/ARM9、LINUX、VB/VC++/QT界面等等。包过。。。欢迎咨询。Tel:13957160506。QQ:273437087
 
 

回复

1284

帖子

0

TA的资源

五彩晶圆(中级)

7
 

Re: 求助

够了吧。。。很忙的,最近。。。
此帖出自单片机论坛
 
个人签名呼呼...在校应届大四学生,代做电子类毕业设计(测量类、仪器类、控制类、无线通信类、电子产品类、界面设计类、纯论文类等等,一一俱全)。涉及各种单片机软硬件设计、电路模拟分析、FPGA、CPLD、ARM7/ARM9、LINUX、VB/VC++/QT界面等等。包过。。。欢迎咨询。Tel:13957160506。QQ:273437087
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

8
 

Re: 求助

好的,谢谢
此帖出自单片机论坛
 
 
 

回复

1284

帖子

0

TA的资源

五彩晶圆(中级)

9
 

Re: 求助

....+++
此帖出自单片机论坛
 
个人签名呼呼...在校应届大四学生,代做电子类毕业设计(测量类、仪器类、控制类、无线通信类、电子产品类、界面设计类、纯论文类等等,一一俱全)。涉及各种单片机软硬件设计、电路模拟分析、FPGA、CPLD、ARM7/ARM9、LINUX、VB/VC++/QT界面等等。包过。。。欢迎咨询。Tel:13957160506。QQ:273437087
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

10
 

Re: 求助

你们真牛,大篇的程序就这么往上贴?
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表