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

查看: 11689|回復: 6
打印 上一主題 下一主題

[提問] eprom芯片,一次存儲40個數字問題

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2013-12-27 12:58:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
現在做的就是,使用eprom芯片,讓數碼管從0~99顯示,工作原理就是,從單片機里寫一個數字給eprom芯片,然后再從eprom芯片里讀剛才單片機給的數字,把這數字在數碼管顯示出來。如此循環下去,就能看到數碼管從0~99顯示了。     
  現在我就想一次傳輸10個數字給eprom,然后再從eprom里讀出數據來顯示在數碼管里,這樣是沒問題的。但現在我要傳輸多一點數字,比如40個,按照這樣就會出現亂碼了,讀不了40個那么多數字,讀到第13個就開始亂了。請問,這怎么解決,謝謝啦
#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;                //一次讀取多少個數字
                                
uchar  temp[40];


void delay(uchar w)        //delay
{
   uchar j;
   for(;w>0;w--)
     for(j=0;j<125;j--);
}
void delay_nop(void)        //機器周期延時函數
{
   _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()     //總線應答信號
{
  SDA=0;
  SCL=1;
  delay_nop();
  SCL=0;
  SDA=1;

}
void noack()  //總線非應答信號
{
   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總線發送一個字節數據
{
     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總線接收一個字節數據
{
           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節數據
{
    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字節 數據
{
   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()          //主函數
{
                                           //write_str(uchar add,uchar *str,uchar num)  向IC器件指定地址寫N節數據
                                                                                  // read_str(uchar add,uchar *str,uchar num)  從指定IC器件的指定地址讀N字節 數據
           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;                                 //個位顯示
                         delay(300);
                         ge=0; shi=0;
                        
                }
         
          }

}

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


100.png (149.63 KB)

100.png
沙發
發表于 2013-12-27 17:30:20 | 只看該作者
eeprom 寫完要等其寫成功才能對其再寫。有的24C02每次寫只能寫8個byte,有的可是16個byte。一般要等待5ms才能再寫。
板凳
 樓主| 發表于 2013-12-27 21:39:32 | 只看該作者
bagdmu 發表于 2013-12-27 17:30
eeprom 寫完要等其寫成功才能對其再寫。有的24C02每次寫只能寫8個byte,有的可是16個byte。一般要等待5ms才 ...

嗯嗯,好像是”上卷“現象。但還是不知道從哪里下手,能指點一下嗎?謝謝
地板
發表于 2013-12-31 20:45:02 | 只看該作者
建議樓主重新仔細看看24CXX系列EEPROM的數據手冊。

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

如果不遵守這個規則,則會有某些信息被沖掉了。
地下室
發表于 2014-1-1 22:07:31 | 只看該作者
在程序里加一個類似握手機制的約束條件,來進行控制即可。
6
發表于 2014-1-2 22:21:36 | 只看該作者
學習了!
7
發表于 2015-2-22 14:35:32 | 只看該作者
支持一下
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲毛片免费视频 | 四虎影在线永久免费观看 | 麻豆精品在线观看 | 亚洲第一区精品观看 | 思思久久96热在精品不卡 | 亚洲欧美日韩在线线精品 | 亚洲综合激情在线影院 | 日韩一区二区三区不卡 | 精品国产三级 | 亚洲精品tv久久久久久久久 | 国产亚洲福利精品一区二区 | 天天摸天天操天天射 | 亚洲天堂欧美 | 国产成人欧美一区二区三区vr | 日本在线不卡一区 | 日本欧美在线播放 | 高清欧美一区二区免费影视 | 日本黄色网站大全 | 中文字幕日韩精品一区口 | 国产精品拍自在线观看 | 99爱这里只有精品 | 国产高清毛片 | 99久久99久久久精品久久 | 大伊香蕉精品视频在线 | www.日韩.com | 韩剧初恋裴勇俊国语全集在线播放 | 国产成人久久精品二区三区 | 国产精品不卡在线观看 | 日韩精品免费在线观看 | 国产精品久久久久久麻豆一区 | 久久久久毛片免费观看 | 久久久久国产精品美女毛片 | 日日操天天爽 | 亚洲成在人天堂在线 | 国内精品久久久久影 | 日韩精品999 | 亚洲大逼 | 亚洲国产一区在线二区三区 | 久热香蕉在线爽青青 | 天天色天天综合 | 日韩福利视频 |