<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 通過(guò)MSP430的IO口模擬I2C總線對(duì)AT24C25進(jìn)行讀寫程序

          通過(guò)MSP430的IO口模擬I2C總線對(duì)AT24C25進(jìn)行讀寫程序

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏


          unsigned char EEPROM_ByteWrite(unsigned int addr,unsigned char data)
          {
          unsigned char Dev_addr; //設(shè)備地址
          unsigned char AddrLow;
          unsigned char AddrHigh;
          AddrLow = (unsigned char)addr;
          AddrHigh = (unsigned char)(addr>>8);
          Dev_addr = 0xa0|(AddrHigh<<1);
          i2c_start();
          i2c_SendByte(Dev_addr);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_SendByte(AddrHigh);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_SendByte(AddrLow);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_SendByte(data);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_stop();
          i2c_delay_ms(10);
          return 0;
          }

          unsigned char EEPROM_RandomRead(unsigned int addr)
          {
          unsigned char Dev_addr; //設(shè)備地址
          unsigned char AddrLow;
          unsigned char AddrHigh;
          unsigned char tmp;
          AddrLow = (unsigned char)addr;
          AddrHigh = (unsigned char)(addr>>8);
          Dev_addr = 0xa0|(AddrHigh<<1);
          i2c_start();
          i2c_SendByte(Dev_addr);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_delay_ms(5);
          i2c_SendByte(AddrHigh);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_SendByte(AddrLow);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_delay_ms(5);
          i2c_start();
          Dev_addr = 0xa1|(AddrHigh<<1);
          i2c_SendByte(Dev_addr);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_delay_ms(5);
          tmp = i2c_RevByte();
          i2c_SendNoAck();
          i2c_stop();
          i2c_delay(100);
          return tmp;
          }

          本文引用地址:http://www.ex-cimer.com/article/201611/322430.htm


          unsigned int EEPROM_PageWrite(unsigned int page,unsigned char* p,unsigned char n)
          {
          unsigned char Dev_addr;
          unsigned char AddrLow;
          unsigned char AddrHigh;
          unsigned int tmp;
          if((n > 64)|(page > 512)) //根據(jù)讀寫的設(shè)備而變更為適合的頁(yè)數(shù)和每頁(yè)字節(jié)數(shù)
          {
          return OutOfRang;
          }
          tmp = ((unsigned int)page) << 6; //得出頁(yè)首地址
          AddrLow = (unsigned char)tmp;
          AddrHigh = (unsigned char)(tmp>>8);
          Dev_addr = 0xa0 | (AddrHigh << 1);
          i2c_start();
          i2c_SendByte(Dev_addr);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_delay_ms(5);
          i2c_SendByte(AddrHigh);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_SendByte(AddrLow);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          while(n--)
          {
          i2c_SendByte(*p++);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          }
          i2c_stop();
          i2c_delay_ms(10);
          return 0;
          }

          unsigned char EEPROM_SequentialRead(unsigned int addr,unsigned int n,unsigned char* p)
          {
          unsigned char Dev_addr; //設(shè)備地址
          unsigned char AddrLow;
          unsigned char AddrHigh;
          if(n > (32768 - addr)) //檢查預(yù)寫入地址是否有效
          {
          return OutOfAddr;
          }
          AddrLow = (unsigned char)addr;
          AddrHigh = (unsigned char)(addr>>8);
          Dev_addr = 0xa0|(AddrHigh<<1);
          i2c_start();
          i2c_SendByte(Dev_addr);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_delay_ms(5);
          i2c_SendByte(AddrHigh);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_SendByte(AddrLow);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          i2c_delay_ms(5);
          i2c_start();
          Dev_addr = 0xa1|(AddrHigh<<1);
          i2c_SendByte(Dev_addr);
          if(i2c_check_ACK() == FALSE)
          {
          return AckError;
          }
          while(n--)
          {
          *p = i2c_RevByte();
          p++;
          if(n)
          i2c_SendAck();
          else
          i2c_SendNoAck();
          }
          i2c_stop();
          return 0;
          }

          main()
          {
          //unsigned char tt,tt1;
          WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
          DCOCTL = 0X73;
          BCSCTL1= 0X87; // 設(shè)置時(shí)鐘頻率4.00MHz
          P5DIR |=0X03;
          P5OUT |=0X03;
          //EEPROM_ByteWrite(0x0,12);
          //tt=EEPROM_RandomRead(0x0);
          //tt1=tt;
          EEPROM_PageWrite(2,dat,14);
          EEPROM_SequentialRead(128,14,x);
          }


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();