色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AT24C1024 proteus 2-wire Serial EEPROM 1

          AT24C1024 proteus 2-wire Serial EEPROM 1

          作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          第i地址寫入i

          注意,讀數(shù)據(jù)時(shí)候 if((TWSR & 0xF8) != 0x10)//0x10 重復(fù)START 已發(fā)。。。不是0x08.還有2次讀寫之間稍微延時(shí)一會。否則不出結(jié)果

          本文引用地址:http://cafeforensic.com/article/201611/316380.htm

          avr的數(shù)據(jù)手冊寫得很好,好多程序源碼都有,怪不得這么流行

          1

          #include
          #include "1602.c"

          #define uint unsigned int
          #define uchar unsigned char

          #define START TWCR=(1<#define STOP TWCR=(1<

          void iic_init()
          {
          TWBR=32;//8mhz/80= 100khz
          TWCR=0;
          TWSR=0;
          //DDRC|=0X03;
          //PORTC|=0X03;
          }

          uint write_B(uchar page,uint addr,uchar data )//page 0 . 1. 代表17位地址最高位
          {
          uchar s=0xa0|(page<<1);//at24 從地址
          START;
          while(!(TWCR & (1<if((TWSR & 0xF8) != 0x08)
          return 0xffff;
          ////////////////
          TWDR=s;
          TWCR = (1<while(!(TWCR & (1<if((TWSR & 0xF8) != 0x18)
          return 0xffff;
          //// /////////
          TWDR = (addr>>8); //先發(fā)高地址
          TWCR = (1<while(!(TWCR & (1<
          if((TWSR & 0xF8) != 0x28)
          return 0xffff;
          ////////////////
          TWDR = (addr&0xff); //地址低8位
          TWCR = (1<while(!(TWCR & (1<
          if((TWSR & 0xF8) != 0x28)//數(shù)據(jù)已發(fā)送接收到ACK

          return 0xffff;
          /////////////////
          TWDR = data; //數(shù)據(jù)
          TWCR = (1<while(!(TWCR & (1<
          if((TWSR & 0xF8) != 0x28)//數(shù)據(jù)已發(fā)送接收到ACK

          return 0xffff;

          STOP;

          }

          uint read_B(uchar page,uint addr)
          {
          uchar data,s=0xa0|(page<<1);//at24 從地址.。@@寫最后一位為0

          START;
          while(!(TWCR & (1<

          if((TWSR & 0xF8) != 0x08)
          return 0xffff;
          ////////////////
          TWDR=s;
          TWCR =(1<while (!(TWCR & (1<if((TWSR & 0xF8) != 0x18)
          return 0xffff;
          //// /////////
          TWDR = (addr>>8); //先發(fā)高地址
          TWCR = (1<while(!(TWCR & (1<
          if((TWSR & 0xF8) != 0x28)
          return 0xffff;
          ////////////////
          TWDR = (addr&0xff); //地址低8位
          TWCR = (1<while(!(TWCR & (1<
          if((TWSR & 0xF8) != 0x28)//數(shù)據(jù)已發(fā)送接收到ACK

          return 0xffff;
          //重復(fù)START
          START;
          while(!(TWCR & (1<

          if((TWSR & 0xF8) != 0x10)//0x10 重復(fù)START 已發(fā)
          return 0xffff;

          TWDR=s|(1);//最后一位1,讀
          TWCR = (1<while(!(TWCR & (1<if((TWSR & 0xF8) != 0x40)//SLA+R 已發(fā)送接收到ACK

          return 0xffff;
          //DDRC&=~(0X03);

          TWCR = (1<while(!(TWCR & (1<data=TWDR;
          STOP;
          //DDRC|=(0X03);

          return data;

          }

          void main()
          {
          uint i,j,k,r;
          uchar temp[4], temp1[7]="t[ ]";
          uchar table[255];

          iic_init();
          init_1602();

          for(k=0;k<255;k++)
          table[k]=k;

          for(k=0;k<255;k++)
          {
          write_B(0,k,k);//第k地址寫k
          for(i=0;i<10;i++)//一定要延時(shí)
          for(j=0;j<1141;j++);
          }



          for(i=0;i<1000;i++)//延時(shí)
          for(j=0;j<1141;j++);

          for(k=0;k<255;k++)
          {
          r=read_B(0,k);
          r=r&0xff;

          temp[0]=r/100+0;
          temp[1]=r%100/10+0;
          temp[2]=r%10+0;
          temp[3]=0;

          LCD_write_string(1,1,temp);


          temp1[2]=k/100+0;
          temp1[3]=k%100/10+0;
          temp1[4]=k%10+0;
          temp1[6]=0;



          LCD_write_string(2,0,temp1);


          for(i=0;i<1000;i++)
          for(j=0;j<1141;j++);


          }

          while(1);
          }



          關(guān)鍵詞: AT24C1024proteus2-wireSeria

          評論


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

          關(guān)閉