国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網(wǎng)

標(biāo)題: eprom芯片,一次存儲40個(gè)數(shù)字問題 [打印本頁]

作者: loveqloveq    時(shí)間: 2013-12-27 12:58
標(biāo)題: eprom芯片,一次存儲40個(gè)數(shù)字問題
現(xiàn)在做的就是,使用eprom芯片,讓數(shù)碼管從0~99顯示,工作原理就是,從單片機(jī)里寫一個(gè)數(shù)字給eprom芯片,然后再從eprom芯片里讀剛才單片機(jī)給的數(shù)字,把這數(shù)字在數(shù)碼管顯示出來。如此循環(huán)下去,就能看到數(shù)碼管從0~99顯示了。     
  現(xiàn)在我就想一次傳輸10個(gè)數(shù)字給eprom,然后再從eprom里讀出數(shù)據(jù)來顯示在數(shù)碼管里,這樣是沒問題的。但現(xiàn)在我要傳輸多一點(diǎn)數(shù)字,比如40個(gè),按照這樣就會出現(xiàn)亂碼了,讀不了40個(gè)那么多數(shù)字,讀到第13個(gè)就開始亂了。請問,這怎么解決,謝謝啦
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit SCL=P2^0;
sbit SDA=P2^1;
sbit  shi=P2^6;
sbit  ge=P2^7;
uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar table[]={         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
                                10,11,12,13,14,15,16,17,18,19,
                            20,21,22,23,24,25,26,27,28,29,
                            30,31,32,33,34,35,36,37,38,39};
uchar x=13;                //一次讀取多少個(gè)數(shù)字
                                
uchar  temp[40];


void delay(uchar w)        //delay
{
   uchar j;
   for(;w>0;w--)
     for(j=0;j<125;j--);
}
void delay_nop(void)        //機(jī)器周期延時(shí)函數(shù)
{
   _nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();
}
void init()//總線初始化
{
   SDA=1;
   delay_nop();
   SCL=1;
   delay_nop();
}
void start()        //總線起始信號
{
   SDA=1;
   SCL=1;
   delay_nop();
   SDA=0;
   delay_nop();
   SCL=0;
}
void  stop()   //總線停止信號
{
    SDA=0;
        SCL=1;
        delay_nop();
        SDA=1;
        delay_nop();
        SCL=0;
}
void ack()     //總線應(yīng)答信號
{
  SDA=0;
  SCL=1;
  delay_nop();
  SCL=0;
  SDA=1;

}
void noack()  //總線非應(yīng)答信號
{
   SDA=1;
    SCL=1;
        delay_nop();
        SCL=0;
        SDA=0;
}
bit detectack()    //檢測ACK信號
{
   bit b_ack;
   SDA=1;
   SCL=1;
   delay_nop();
   b_ack=SDA;
   SCL=0;
   return b_ack;
}
void write(uchar input)         //向IC總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)
{
     uchar i;
         for(i=0;i<8;i++)
           {
               if(input & 0x80)
                       SDA=1;
                        else
                            SDA=0;
                         SCL=1;
                         delay_nop();
                         SCL=0;
                          delay_nop();
                          input=input<<1;
           }

}
uchar read(void)        //向IC總線接收一個(gè)字節(jié)數(shù)據(jù)
{
           uchar tempdata=0,i;
         SDA=1;
         for(i=0;i<8;i++)
            {
                   tempdata=tempdata<<1;
                   tempdata=tempdata | ((uchar) SDA);

                    SCL=1;
                    delay_nop();
                        SCL=0;
                }
        return tempdata;
}
void write_str(uchar add,uchar *str,uchar num)  //向IC器件指定地址寫N節(jié)數(shù)據(jù)
{
    uchar i;
        start();
        write(0xa0);
          while(detectack());
        write(add);
      while(detectack());

        for(i=0;i            {
              
              write(*str);
                    while(detectack());
                  str++;
                    /*if(i>13)
                          {
                              write(add++);
                                  while(detectack());
                          }*/        

           }
           stop();
           delay(20);

}

uchar read_str(uchar add,uchar *str,uchar num)//從指定IC器件的指定地址讀N字節(jié) 數(shù)據(jù)
{
   uchar i;
    //uchar temp;
        start();
        write(0xa0);
            while(detectack());
        write(add);
           while(detectack());
        start();
        write(0xa1);
        while(detectack());

         for(i=0;i            {
              *str=read();
                  ack();
                  str++;
                    


           }

          *str=read();
          noack();
          stop();
          delay(20);
          return str;

}

void main()          //主函數(shù)
{
                                           //write_str(uchar add,uchar *str,uchar num)  向IC器件指定地址寫N節(jié)數(shù)據(jù)
                                                                                  // read_str(uchar add,uchar *str,uchar num)  從指定IC器件的指定地址讀N字節(jié) 數(shù)據(jù)
           uchar i,j;                                          //uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
          uchar a,b;
         
           init();  //初始化總線
           
         while(1)
         {
                    write_str(2,table,x);           //向IC器件寫入 table[]
                  
                  
            delay(20);
           read_str(2,temp,x);           //從IC器件讀取 table[]
        
            delay(20);
         for(i=0;i<13;i++)
      for(j=0;j<150;j++)                         //停留
            {
                    a=(temp/10);
                        b=(temp%10);
                        
                         P0=num[a];
                         shi=1;                                 //十位顯示
             delay(300);
                         shi=0;
                    
                         P0=num;
                          ge=1;                                 //個(gè)位顯示
                         delay(300);
                         ge=0; shi=0;
                        
                }
         
          }

}

100.png (142.07 KB, 下載次數(shù): 0)


100.png (149.63 KB)

100.png

作者: bagdmu    時(shí)間: 2013-12-27 17:30
eeprom 寫完要等其寫成功才能對其再寫。有的24C02每次寫只能寫8個(gè)byte,有的可是16個(gè)byte。一般要等待5ms才能再寫。
作者: loveqloveq    時(shí)間: 2013-12-27 21:39
bagdmu 發(fā)表于 2013-12-27 17:30
eeprom 寫完要等其寫成功才能對其再寫。有的24C02每次寫只能寫8個(gè)byte,有的可是16個(gè)byte。一般要等待5ms才 ...

嗯嗯,好像是”上卷“現(xiàn)象。但還是不知道從哪里下手,能指點(diǎn)一下嗎?謝謝
作者: sherwin    時(shí)間: 2013-12-31 20:45
建議樓主重新仔細(xì)看看24CXX系列EEPROM的數(shù)據(jù)手冊。

EEPROM的寫,通常分為隨機(jī)寫入(單字節(jié))和頁寫入(多字節(jié),通常為8的倍數(shù))兩種模式,其中頁寫入的時(shí)候,一次寫一頁(比如8或者16字節(jié)),這時(shí)其實(shí)是寫在了芯片的緩沖區(qū)的,需要等候5mS,等待芯片把緩沖區(qū)中的數(shù)據(jù)轉(zhuǎn)入到eeprom的真正存儲區(qū)域去。

如果不遵守這個(gè)規(guī)則,則會有某些信息被沖掉了。
作者: joywyc    時(shí)間: 2014-1-1 22:07
在程序里加一個(gè)類似握手機(jī)制的約束條件,來進(jìn)行控制即可。
作者: hbzhangtuo    時(shí)間: 2014-1-2 22:21
學(xué)習(xí)了!
作者: pcbkey    時(shí)間: 2015-2-22 14:35
支持一下





歡迎光臨 電子工程網(wǎng) (http://www.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 日韩精品一区二区三区视频 | 99视频网址 | 国产剧情自拍 | 青青青青久久久久国产的 | 884hutv四虎永久7777 | 在线成人免费视频 | 在线观看一级毛片 | 国产自产第一区c国产 | 婷婷综合五月天 | 手机在线观看黄色网址 | 欧美高清视频一区 | 日本大片aa特黄 | 一级毛片aaaaaa视频免费看 | 天堂婷婷 | 在线观看免费毛片 | 啄木乌欧美一区二区三区 | 日日射日日操 | 成人夜色香网站在线观看 | 国产不卡一区二区视频免费 | 亚洲精品三级 | 久久五月网| 国产成人精品福利网站人 | 国产特黄特色的大片观看免费视频 | 成人a一级毛片免费看 | 韩剧伦理年轻的嫂子6在线观看 | 日本视频在线看 | 曰韩一级毛片 | 日韩免费一级 | 免费aⅴ片 | www操| 亚洲精品资源 | 三面娜迦泰剧全集在线观看 | 久久精品a一国产成人免费网站 | 久久99青青久久99久久 | 天堂在线| 欧美激情一区二区三区不卡 | 国产区精品福利在线社区 | 日本免费高清在线观看播放 | 久久国产免费一区二区三区 | 一级黄色a视频 | 免费一级毛片在线播放放视频 |