查看: 5207|回复: 12

430 f247 EEPROM IIC读写一个字节 求高手指点

[复制链接]
  • TA的每日心情
    奋斗
    2016-12-1 10:22
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-3-16 14:51:23 | 显示全部楼层 |阅读模式
    分享到:
    麻烦高手指点一下 怎么老是读不到写的数据 写了02 每次读都是04

    新建 Microsoft Word 文档.doc

    28.5 KB, 下载次数: 6

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-3-16 14:59:14 | 显示全部楼层
    表示为什么不直接贴出来,更直观呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-3-16 15:02:00 | 显示全部楼层
    看了一下,表示解决不了,看成是430内部flash了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-1 10:22
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-3-16 15:35:53 | 显示全部楼层
    ming1006 发表于 2013-3-16 14:59
    表示为什么不直接贴出来,更直观呢

    怎么贴?不太懂
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-1 10:22
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-3-16 15:40:54 | 显示全部楼层
    ming1006 发表于 2013-3-16 15:02
    看了一下,表示解决不了,看成是430内部flash了

    能否加你QQ。。。。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-3-16 15:41:02 | 显示全部楼层
    神韵1206 发表于 2013-3-16 15:35
    怎么贴?不太懂

    就是直接复制到回复框,文字直接显示
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-3-16 15:43:26 | 显示全部楼层
    神韵1206 发表于 2013-3-16 15:40
    能否加你QQ。。。。。。。

    240043926,不过表示这个问题我也无能为力,因为没搞过
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-1 10:22
  • 签到天数: 33 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-3-16 15:55:13 | 显示全部楼层
    ming1006 发表于 2013-3-16 15:41
    就是直接复制到回复框,文字直接显示

    /#define uchar unsigned char
    void init_clock() //时钟初始化
    {  
      WDTCTL=WDTPW+WDTHOLD;                //关看门狗
      BCSCTL1&= ~XT2OFF;
    do                                        //判断晶振是否起振
      {
      IFG1 &= ~OFIFG;                           // Clear OSCFault flag
      for (int i = 0x47FF; i > 0; i--);         // Time for flag to set
      }
      while ((IFG1 & OFIFG));                  // OSCFault flag still set?
      BCSCTL2=SELM_2+SELS; //MCLK 和 SMCLK 选择 XT2时钟源16MHZ
    }


    void init_pio()              
    {
       P5SEL|=0x06;//p5.1SDA,p5.2SCL
    }

    void EEPROM_I2C_init(void)//iic初始化函数
    {
      P5SEL |= BIT1 + BIT2;                     //设置p5.1,p5.2口为外围模块功能
      UCB1CTL1 |=UCSWRST;                     
      UCB1CTL0 |= UCMST + UCMODE_3+UCSYNC;             //设置为IIC主机模式
      UCB1CTL1 |= UCSSEL_2+UCSWRST;                     //USCI时钟源选择SMCLK
      UCB1BR0 = 0xc8;                             //SMCLK/30
      UCB1BR1 = 0;  
      UCB1CTL1 &=~UCSWRST;                      //进入I2C模式
    }

    void init()                      //初始化
    {  
       init_clock();
       init_pio();
       EEPROM_I2C_init();
    }

    void msec(int x)        //
    {  
            int j=0;
            while(x>=0)
            {
            for (j=0; j<600; j++);
                    x--;
            }
    }

    void EEPROM_I2C_Write_ONEByte(uchar adderss_pre,uchar adderss_curr,uchar data)  //EEPROM_I2C写1字节函数  
    {
      while(UCB1STAT&UCBBUSY);
      UCB1I2CSA=(deviceaddress|adderss_pre);     //设定从机地址为50
      UCB1CTL1 |= UCTR + UCTXSTT;               //发送起始条件
      while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
      while(UCB1CTL1&UCTXSTT); //ack(me)
      UCB1TXBUF=adderss_curr;                   //发送第1个8位数据地址
      while(UCB1CTL1&UCTXSTT); //ack(me)            //等待高位发送完毕
      while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
      UCB1TXBUF=data;
      while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
      UCB1CTL1 |=UCTXSTP;                     //置位发送停止位
      UC1IFG &=~UCB1TXIFG;
      while(UCB1CTL1&UCTXSTP);                  //等待主发送停止位发送完毕
      msec(1);
    }

    void EEPROM_I2C_Read_ONEByte(int adderss_pre,int adderss_curr,char *carry)                              //读
    {
      UCB1I2CSA=(deviceaddress|adderss_pre);                       //设定从机地址为50
      UCB1CTL1 |= UCTR  ;               
      UCB1CTL1 |= UCTXSTT;                    //发送起始条件
      while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
      UCB1TXBUF=adderss_curr;
      while(UCB1CTL1&UCTXSTT);                  //
      while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
      UCB1I2CSA=(deviceaddress|adderss_pre);                       //设定从机地址为50
      UCB1CTL1 &=(~UCTR);                         //接收起始条件
      UCB1CTL1|=UCTXSTT;
      UCB1CTL1|=UCTXSTP;   
      while(UCB1CTL1&UCTXSTT);       //
      while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
      *carry=UCB1RXIFG;
      while((UC1IFG&UCB1RXIFG)!=UCB1RXIFG);
      UCB1CTL1|=UCTXSTP;                      //接收停止位
      while(UCB1CTL1&UCTXSTP);
      temp=*carry;
    }

    void EEPROM_I2C_read_write_ONEByte(void)//eeprom读写函数
    {
       EEPROM_I2C_Write_ONEByte(0,0,0x02);//eeprom写函数
       EEPROM_I2C_Read_ONEByte(0,0,&carry);//eeprom读函数
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-3-16 15:58:26 | 显示全部楼层
    神韵1206 发表于 2013-3-16 15:55
    /#define uchar unsigned char
    void init_clock() //时钟初始化
    {  

    现在就等大神来找茬了,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 4017 天

    连续签到: 9 天

    [LV.Master]伴坛终老

    发表于 2013-3-16 16:32:41 | 显示全部楼层
    用示波器来看你的数据是发的错呢还是收的有问题?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-8 21:48 , Processed in 0.202499 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.