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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:418425 發(fā)表于 2018-11-10 23:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 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的讀寫(xiě)小程序,要求是:利用定時(shí)器產(chǎn)生一個(gè)0~99秒變化的秒表,并且在數(shù)碼管上顯示,每過(guò)一秒將這個(gè)變化的數(shù)寫(xiě)入AT24c02內(nèi)部。當(dāng)關(guān)閉電源時(shí),并再次打開(kāi)電源,單片機(jī)先從AT24c02中讀出原先顯示數(shù)值,接著運(yùn)行秒表。          代碼寫(xiě)入后,1、數(shù)碼管每次開(kāi)機(jī)都顯示“10”,一直運(yùn)行到“99”,再?gòu)摹?”,運(yùn)行;且不能在斷電時(shí)恢復(fù)數(shù)據(jù);求解!!
                             2、uchar read_add(uchar address)中write_byte(address);作用是什么,為什么后面跟著開(kāi)始?
        求大神幫幫忙,小弟剛剛學(xué)習(xí)不久,最近對(duì)I2c比較感興趣,再次謝謝了!

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

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

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

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

使用道具 舉報(bào)

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

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

回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久免费精品一区二区三区 | 波多野结衣在线观看一区二区三区 | 午夜丰满寂寞少妇精品 | 日韩爱爱网 | 久久精品一区 | 自拍第一页 | 欧美一级片在线看 | 国产精品成人一区二区三区 | av特级毛片 | 亚洲h在线观看 | xxxcom在线观看 | 亚洲人成人一区二区在线观看 | 国产乱码精品1区2区3区 | 久久四虎 | 日韩成人精品一区 | 亚洲欧美在线观看 | www.天天操.com | 国产精品性做久久久久久 | 亚洲黄色av网站 | 一级毛片网| 欧洲成人 | 久久精品色欧美aⅴ一区二区 | 亚洲成人精品一区二区 | 国产激情综合五月久久 | 99re视频精品 | 爱爱小视频| 色婷婷影院 | 日韩精品免费在线观看 | 久久午夜电影 | 精品久久久久一区 | 真人毛片 | 免费看国产片在线观看 | 91久久夜色精品国产网站 | 日韩高清国产一区在线 | av大片在线观看 | 国产综合久久 | 特级丰满少妇一级aaaa爱毛片 | 日韩免费中文字幕 | a在线v| 午夜免费电影 | 91精品国产色综合久久不卡98口 |