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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

24C08存儲器試驗程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71259 發(fā)表于 2014-12-30 01:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg52.h>   //  包含51單片機寄存器定義的頭文件
  2. #include<intrins.h>    //包含_nop_()函數(shù)定義的頭文件
  3. sbit SCL=P3^4;    //將串行時鐘總線SCL位定義在為P3.4引腳
  4. sbit SDA=P3^5;    //將串行數(shù)據(jù)總線SDA位定義在為P3.5引腳
  5. sbit P26=P2^6;   //十位選通定義
  6. sbit P27=P2^7;  //個位選通定義
  7. sbit K5=P1^4;   //清0按鍵
  8. unsigned char sec=0; //定義計數(shù)值,每過1秒,sec加1
  9. unsigned char count=0; //定時中斷次數(shù)
  10. bit write=0;   //寫24C08的標(biāo)志;
  11. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定義共陽數(shù)碼管顯示字型碼

  12. void delay1ms(unsigned int n)     //1ms延時
  13. {
  14. unsigned char i;
  15. while(n--)
  16.   for(i=0;i<115;i++);
  17. }

  18. void Start()  //起始信號
  19. {
  20. SDA=1;     //SDA初始化為高電平“1”
  21. SCL=1;   //開始數(shù)據(jù)傳送時,要求SCL為高電平“1”
  22. _nop_();
  23. _nop_();
  24. _nop_();
  25. _nop_();
  26. _nop_();
  27. SDA=0;    //SDA的下降沿被認為是開始信號
  28. _nop_();
  29. _nop_();
  30. _nop_();
  31. _nop_();
  32. _nop_();
  33. SCL=0;   //SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳遞)
  34. }

  35. void Stop()     //終止信號
  36. {
  37. SDA=0;      //SDA初始化為低電平“0”
  38. SCL=1;     //!!!!注意,SDA和SCL的順序不能顛倒,否則錯誤,切記
  39. _nop_();   //結(jié)束數(shù)據(jù)傳送時,要求SCL為高電平“1”
  40. _nop_();
  41. _nop_();
  42. _nop_();
  43. _nop_();
  44. SDA=1;    //SDA的上升沿被認為是結(jié)束信號
  45. _nop_();
  46. _nop_();
  47. _nop_();
  48. _nop_();
  49. _nop_();
  50. SCL=0;
  51. SDA=0;
  52. }


  53. bit Ask()   //應(yīng)答信號
  54. {
  55. bit res;
  56. SDA=1;       // 發(fā)送設(shè)備(主機)應(yīng)在時鐘脈沖的高電平期間(SCL=1)釋放SDA線,
  57.                       //以讓SDA線轉(zhuǎn)由接收設(shè)備(AT24Cxx)控制
  58. _nop_();        //等待一個機器周期
  59. _nop_();        //等待一個機器周期

  60. SCL=1;      //根據(jù)上述規(guī)定,SCL應(yīng)為高電平
  61. _nop_();
  62. _nop_();
  63. _nop_();
  64. _nop_();
  65. _nop_();
  66. res=SDA;   //接受設(shè)備(AT24Cxx)向SDA送低電平,表示已經(jīng)接收到一個字節(jié)
  67.                 //若送高電平,表示沒有接收到,傳送異常 結(jié)束發(fā)送
  68. SCL=0;      //SCL為低電平時,SDA上數(shù)據(jù)才允許變化(即允許以后的數(shù)據(jù)傳遞
  69. return res;
  70. }

  71. unsigned char ReadData()  // 從24C08移入數(shù)據(jù)到MCU

  72. {
  73. unsigned char i;
  74. unsigned char x;   //儲存從AT24Cxx中讀出的數(shù)據(jù)
  75. for(i = 0; i < 8; i++)
  76. {
  77.   SCL = 1;                //SCL置為高電平
  78.   x<<=1;                  //將x中的各二進位向左移一位
  79.   x|=(unsigned char)SDA;  //將SDA上的數(shù)據(jù)通過按位“或“運算存入x中
  80.   SCL = 0;                        //在SCL的下降沿讀出數(shù)據(jù)
  81. }
  82. return(x);                //將讀取的數(shù)據(jù)返回
  83. }

  84. void WriteCurrent(unsigned char y) //向當(dāng)前地址寫入數(shù)據(jù)
  85. {
  86. unsigned char i;
  87. for(i = 0; i < 8; i++)  // 循環(huán)移入8個位
  88. {
  89.      SDA = (bit)(y&0x80);   //通過按位“與”運算將最高位數(shù)據(jù)送到S
  90.                                     //因為傳送時高位在前,低位在后
  91.   _nop_();            //等待一個機器周期  
  92.     SCL = 1;            //在SCL的高電平將數(shù)據(jù)寫入AT24Cxx     
  93.        _nop_();            //等待一個機器周期
  94.     _nop_();             //等待一個機器周期      
  95.     SCL = 0;            //將SCL重新置為低電平,以在SCL線形成傳送數(shù)據(jù)所需的8個脈沖
  96.     y<<= 1;           //將y中的各二進位向左移一位
  97.               
  98. }
  99. }

  100. void WriteSet(unsigned char add, unsigned char dat)   // 在指定地址add處寫入數(shù)據(jù)WriteCurrent

  101. {
  102. Start();               //開始數(shù)據(jù)傳遞
  103. WriteCurrent(0xa0);  //選擇要操作的24C08芯片,并告知要對其寫入數(shù)據(jù)
  104.     Ask();
  105. WriteCurrent(add);       //寫入指定地址
  106. Ask();
  107. WriteCurrent(dat);       //向當(dāng)前地址(上面指定的地址)寫入數(shù)據(jù)
  108. Ask();
  109. Stop();                //停止數(shù)據(jù)傳遞
  110. delay1ms(4);        //1個字節(jié)的寫入周期為1ms, 最好延時1ms以上
  111. }

  112. unsigned char ReadCurrent()  //向當(dāng)前地址讀數(shù)據(jù)
  113. {
  114. unsigned char x;
  115. Start();               //開始數(shù)據(jù)傳遞
  116. WriteCurrent(0xa1);   //選擇要操作的AT24Cxx芯片,并告知要讀其數(shù)據(jù)
  117. Ask();
  118. x=ReadData();         //將讀取的數(shù)據(jù)存入x
  119. Stop();                //停止數(shù)據(jù)傳遞
  120. return x;              //返回讀取的數(shù)據(jù)
  121. }

  122. unsigned char ReadSet(unsigned char set_addr)  // 在指定地址讀取

  123. {
  124. Start();                      //開始數(shù)據(jù)傳遞
  125. WriteCurrent(0xa0);       //選擇要操作的AT24Cxx芯片,并告知要對其寫入數(shù)據(jù)
  126. Ask();
  127. WriteCurrent(set_addr);       //寫入指定地址
  128. Ask();
  129. return(ReadCurrent());        //從指定地址讀出數(shù)據(jù)并返回
  130. }

  131. void LedShow()      //LED顯示函數(shù)
  132. {
  133.     P0=table[sec/10];
  134. P26=0;
  135. delay1ms(2);
  136. P26=1;
  137. P0=table[sec%10];
  138. P27=0;
  139. delay1ms(2);
  140. P27=1;
  141. }



  142. void main()
  143. {
  144. TMOD=0x01; //定時器0工作在方式1
  145. ET0=1;
  146.     EA=1;
  147. TH0=(65536-50000)/256; //對TH0 TL0賦值
  148. TL0=(65536-50000)%256; //使定時器0.05秒中斷一次
  149.     SDA = 1;           // SDA=1,SCL=1,使主從設(shè)備處于空閑狀態(tài)
  150. SCL = 1;         
  151. sec=ReadSet(2);//讀出保存的數(shù)據(jù)賦于sec
  152. TR0=1; //開始計時
  153.   while(1)
  154.   {
  155.       LedShow();
  156.    if(write==1) //判斷計時器是否計時一秒      
  157.    {
  158.    write=0; //清零
  159.    WriteSet(2,sec); //在24c08的地址2中寫入數(shù)據(jù)sec   
  160.    }

  161.     if(K5==0){
  162.      delay1ms(10);
  163.    if(K5==0){
  164.     sec=0;
  165.    }
  166.    }
  167.   }
  168. }

  169. void t0()  interrupt 1     //定時中斷服務(wù)函數(shù)
  170. {
  171. TH0=(65536-50000)/256;
  172. TL0=(65536-50000)%256;
  173. count++;

  174. if(count==20){
  175.   count=0;
  176.   write=1;
  177.   sec++;
  178.   if(sec==100)
  179.    sec=0;

  180. }
  181. }
復(fù)制代碼


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久综合一区 | 天天草天天操 | 欧美一级在线 | 国产你懂的在线观看 | 国产视频久久 | 日本网站免费在线观看 | 精品毛片视频 | 婷婷久久五月天 | 久草久草久草 | 中文字幕av一区二区三区 | 亚洲欧美在线一区 | 国产精品视频一区二区三区四区国 | 亚洲视频中文字幕 | 一区二区三区日韩 | 亚洲精品电影网在线观看 | 久久精品国产免费 | 亚洲福利在线观看 | 亚洲高清免费 | 欧美日韩亚洲国产 | 性高湖久久久久久久久 | 国产精品久久久久免费 | 国产99久久久国产精品 | 欧美福利在线 | 天天干天天操天天射 | 免费的av网站 | 99久久精品免费看国产四区 | 国产在线观看福利 | 国产成人精品一区二三区在线观看 | 欧美一区二区另类 | 天天操天天射天天 | 国产亚洲一区二区三区在线观看 | 欧美一级视频免费看 | 成人毛片网站 | 国产成人精品一区二 | 黄色网址免费在线观看 | 午夜性视频 | 九九久久这里只有精品 | 久久亚洲国产精品 | 亚洲欧美日韩精品久久亚洲区 | 精品九九久久 | 天天色天天射天天干 |