久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4826|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

提問:關(guān)于AT24c02讀寫程序求解

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:418425 發(fā)表于 2018-11-10 23:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 yf15966844335 于 2018-11-11 00:02 編輯
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. bit write=0;
  5. sbit sda=P2^0;
  6. sbit scl=P2^1;
  7. sbit dula=P2^6;
  8. sbit wela=P2^7;

  9. uchar sec,tcnt;
  10. uchar code table[]={
  11.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  12.         0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  13.         0x39,0x5e,0x79,0x71
  14. };
  15. void delay()
  16. {
  17. ;;
  18. }

  19. void delay1ms(uint z)
  20. {
  21.         uint x,y;
  22.         for(x=z;x>0;x--)
  23.                 for(y=110;y>0;y--);
  24. }

  25. void start()//kaishi
  26. {
  27.         sda=1;
  28.         delay();
  29.         scl=1;
  30.         delay();
  31.         sda=0;
  32.         delay();
  33. }

  34. void stop()//tingzhi
  35. {
  36.         sda=0;
  37.         delay();
  38.         scl=0;
  39.         delay();
  40.         sda=1;
  41.         delay();
  42. }

  43. void respons()//yingda
  44. {
  45.         uchar i;
  46.         scl=1;
  47.         delay();
  48.         while((sda==1)&&(i<250))i++;
  49.         scl=0;
  50.         delay();
  51. }

  52. void init()//chushihua
  53. {
  54.         sda=1;
  55.         delay();
  56.         scl=1;
  57.         delay();
  58. }

  59. void write_byte(uchar date)//xiezijie
  60. {
  61.         uchar i,temp;
  62.         temp=date;
  63.         for(i=0;i<8;i++)
  64.         {
  65.                 temp=temp<<1;
  66.                 scl=0;
  67.                 delay();
  68.                 sda=CY;
  69.                 delay();
  70.                 scl=1;
  71.                 delay();
  72.         }
  73.         scl=0;
  74.         delay();
  75.         sda=1;
  76.         delay();
  77. }
  78. uchar read_byte()//duzijie
  79. {
  80.         uchar i,k;
  81.         scl=0;
  82.         delay();
  83.         sda=1;
  84.         delay();
  85.         for(i=0;i<8;i++)
  86.         {
  87.                 scl=1;
  88.                 delay();
  89.                 k=(k<<1)|sda;
  90.                 scl=0;
  91.                 delay();
  92.         }
  93.         return k;
  94. }

  95. void write_add(uchar address,uchar date)
  96. {
  97.         start();
  98.         write_byte(0xa0);
  99.         respons();
  100.         write_byte(address);
  101.         respons();
  102.         write_byte(date);
  103.         respons();
  104.         stop();
  105. }

  106. uchar read_add(uchar address)
  107. {
  108.         uchar date;
  109.         start();
  110.         write_byte(0xa0);
  111.         respons();
  112.         write_byte(address);
  113.         respons();
  114.         start();
  115.         write_byte(0xa1);
  116.         respons();
  117.         date=read_byte();
  118.         stop();
  119.         return date;
  120. }

  121. void display(uchar bai_c,uchar sh_c)
  122. {
  123.         dula=0;
  124.         P0=table[bai_c];
  125.         dula=1;
  126.         dula=0;
  127.         wela=0;
  128.         P0=0xfe;
  129.         wela=1;
  130.         wela=0;
  131.         delay1ms(5);
  132.         dula=0;
  133.         P0=table[sh_c];
  134.         dula=1;
  135.         dula=0;
  136.         wela=0;
  137.         P0=0xfd;
  138.         wela=1;
  139.         wela=0;
  140.         delay1ms(5);
  141. }

  142. void main()
  143. {
  144.         init();
  145.         sec=read_add(2);
  146.         if(sec>100)
  147.                 sec=0;
  148.         TMOD=0x01;
  149.         ET0=1;
  150.         EA=1;
  151.         TH0=(65536-50000)/256;
  152.         TH1=(65536-50000)%256;
  153.         TR0=1;
  154.         while(1)
  155.         {
  156.                 display(sec/10,sec%10);
  157.                 if(write==1)
  158.                 {
  159.                         write=0;
  160.                         write_add(2,sec);
  161.                 }
  162.         }

  163. }

  164. void T0_time()interrupt 1
  165. {
  166.         TH0=(65536-50000)/256;
  167.         TH1=(65536-50000)%256;
  168.         tcnt++;
  169.         if(tcnt==20)
  170.         {
  171.                 tcnt=0;
  172.                 sec++;
  173.                 write=1;
  174.                 if(sec==100)
  175.                         sec=0;
  176.         }        
  177. }
復(fù)制代碼
       以上就是AT24c02的讀寫小程序,要求是:利用定時器產(chǎn)生一個0~99秒變化的秒表,并且在數(shù)碼管上顯示,每過一秒將這個變化的數(shù)寫入AT24c02內(nèi)部。當關(guān)閉電源時,并再次打開電源,單片機先從AT24c02中讀出原先顯示數(shù)值,接著運行秒表。          代碼寫入后,1、數(shù)碼管每次開機都顯示“10”,一直運行到“99”,再從“0”,運行;且不能在斷電時恢復(fù)數(shù)據(jù);求解!!
                             2、uchar read_add(uchar address)中write_byte(address);作用是什么,為什么后面跟著開始?
        求大神幫幫忙,小弟剛剛學(xué)習(xí)不久,最近對I2c比較感興趣,再次謝謝了!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:94031 發(fā)表于 2018-11-11 10:16 | 只看該作者
頻繁寫入24c02是要把器件寫壞的,是一個錯誤的方案,不如直接選用時鐘芯片,比如DS1302.
回復(fù)

使用道具 舉報

板凳
ID:418425 發(fā)表于 2018-11-11 10:35 | 只看該作者
xuyaqi 發(fā)表于 2018-11-11 10:16
頻繁寫入24c02是要把器件寫壞的,是一個錯誤的方案,不如直接選用時鐘芯片,比如DS1302.

我這個程序是什么地方錯了嗎,我已經(jīng)查了1天了,還是沒有查到原因。。。
回復(fù)

使用道具 舉報

地板
ID:77406 發(fā)表于 2018-11-11 14:26 | 只看該作者
對于iic器件,你的時序要用設(shè)備看看。如果用stc的話,你的iic模擬讀寫速度快了,要延時。其次24c0x的讀寫驅(qū)動不對。這個你可以參考網(wǎng)絡(luò)上一大把。最后,你的定時器的自動重裝對了沒有?如果用stc單片機貌似不對。檢查吧。

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:111634 發(fā)表于 2018-11-11 19:34 | 只看該作者
本帖最后由 zl2168 于 2018-11-11 21:11 編輯

有關(guān)AT24Cxx頁寫緩沖的概念說明如下: 由于E2PROM的半導(dǎo)體工藝特性,對E2PROM的寫入時間需要5~10ms,但AT24Cxx系列串行E2PROM芯片內(nèi)部設(shè)置了一個具有SRAM性質(zhì)的輸入緩沖器,稱為頁寫緩沖器。CPU對該芯片寫操作時,AT24Cxx系列芯片先將CPU輸入的數(shù)據(jù)暫存在頁寫緩沖器內(nèi),然后,慢慢寫入E2PROM中。因此,CPU對AT24Cxx系列E2PROM一次寫入的字節(jié)數(shù),受到該芯片頁寫緩沖器容量的限制。頁寫緩沖器的容量為16B,若CPU寫入字節(jié)數(shù)超過芯片頁寫緩沖器容量,應(yīng)在一頁寫完后,隔5~10ms重新啟動一次寫操作。
實例49  讀寫AT24C02

Proteus仿真一下,確認有效。 實例49 讀寫IIC AT24C02.rar (38.96 KB, 下載次數(shù): 19)

實例50  非零地址讀寫AT24C02 實例50 非零地址讀寫AT24C02.rar (39.09 KB, 下載次數(shù): 8)
以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機應(yīng)用100案例,用于仿真實驗操作,電路與程序真實可靠可信可行。書中電路和程序設(shè)計有詳細說明,程序語句條條有注解。
回復(fù)

使用道具 舉報

6#
ID:111634 發(fā)表于 2018-11-11 21:08 | 只看該作者
實例93  99.9秒秒表
實例95 99.9秒秒表.rar (38.86 KB, 下載次數(shù): 5)
Proteus仿真一下,確認有效。

實例96  能預(yù)置初值的倒計時秒表 實例96 能設(shè)置初值的倒計時秒表.rar (40 KB, 下載次數(shù): 4)
以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機應(yīng)用100案例,用于仿真實驗操作,書中電路和程序設(shè)計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms計數(shù)器,并修改相應(yīng)計數(shù)顯示程序。

回復(fù)

使用道具 舉報

7#
ID:418425 發(fā)表于 2018-11-11 21:38 | 只看該作者
bg8wj 發(fā)表于 2018-11-11 14:26
對于iic器件,你的時序要用設(shè)備看看。如果用stc的話,你的iic模擬讀寫速度快了,要延時。其次24c0x的讀寫驅(qū) ...

下午找到原因了 ,好不容易,原因在停止信號上,時鐘信號沒有被拉高,謝謝大家了
回復(fù)

使用道具 舉報

8#
ID:401564 發(fā)表于 2018-11-12 02:14 | 只看該作者
你要是用匯編 我就能幫到你了,可是............
如果你要用到IIC保存一些東西,不要在程序運行的時候一直不斷的寫入,說不定幾天24C02就壞了的.
用一個二極管把電源分開,再加一個掉電檢測的電路,就一個電阻就可以,接到單片機的中斷,那一頭掉電了,這一頭還有電,可以寫入一次IIC
這樣一來,就只有有掉電的情況下寫入一次而已了
回復(fù)

使用道具 舉報

9#
ID:424815 發(fā)表于 2018-11-12 09:08 | 只看該作者
IIC寫完或者讀取完成之后,需要延時
回復(fù)

使用道具 舉報

10#
ID:359322 發(fā)表于 2018-11-12 09:09 | 只看該作者
調(diào)這個  要耐心   首先看   開始停止等   時序  對照 DATASHHEET   建議延時時間多一點   
回復(fù)

使用道具 舉報

11#
ID:418425 發(fā)表于 2018-11-12 10:53 | 只看該作者
zl2168 發(fā)表于 2018-11-11 21:08
實例93  99.9秒秒表
先Proteus仿真一下,確認有效。

謝謝大神的講解,我看懂了
回復(fù)

使用道具 舉報

12#
ID:623732 發(fā)表于 2019-11-10 08:37 | 只看該作者
把字符數(shù)組存到AT24c02并在串口調(diào)試助手顯示的程序怎么寫?
回復(fù)

使用道具 舉報

13#
ID:623732 發(fā)表于 2019-11-10 08:38 | 只看該作者
swiky 發(fā)表于 2018-11-12 09:09
調(diào)這個  要耐心   首先看   開始停止等   時序  對照 DATASHHEET   建議延時時間多一點

把字符數(shù)組存到AT24c02并在串口調(diào)試助手顯示的程序怎么寫?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人精品在线视频 | 亚洲视频在线看 | 丝袜天堂 | 久热伊人| 久久久天天 | 精品国产区 | 成人深夜福利网站 | 日韩欧美在线观看视频 | 91av视频在线免费观看 | 久久精品亚洲一区二区三区浴池 | 亚洲视频在线免费观看 | 日韩精品在线观看免费 | 国产黄色麻豆视频 | 国产精品一区二区三区在线 | 91亚洲精品国偷拍自产在线观看 | www一级片 | www.日本在线 | 久久精点视频 | 国产精品久久久 | 国产高清精品一区二区三区 | 91精品国产乱码久久久久久久 | 精品国产乱码久久久久久蜜柚 | 欧美精品一区二区三区蜜桃视频 | 最新午夜综合福利视频 | 日韩欧美一区二区三区免费观看 | 国产免费观看一级国产 | 高清18麻豆 | 免费观看国产视频在线 | 美人の美乳で授乳プレイ | 亚洲在线看 | 天天插天天干 | 国产综合欧美 | 二区视频 | 蜜臀久久| 国产在线一区二区 | 国产三级在线观看播放 | 久久久成人精品 | 久久小视频 | 精品一二| 一区二区久久精品 | 国产一级在线观看 |