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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3344|回復: 1
打印 上一主題 下一主題
收起左側

自己用的1T單片機AT24C02庫 支持STC12C5A60S2等芯片

[復制鏈接]
跳轉到指定樓層
樓主
ID:387733 發表于 2018-10-2 20:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自己一直使用的I2C庫,可供參考。

單片機源程序如下:
  1. #include <INTRINS.H>

  2. typedef        unsigned char BYTE;
  3. typedef        unsigned int  WORD;


  4. #define slaw    0xa0
  5. #define slar    0xa1

  6. sbit    sclb =  P3^0;
  7. sbit    sdab =  P3^1;
  8. /**************************************
  9. 延時5微秒(STC12C5A60S2@12M)
  10. 不同的工作環境,需要調整此函數
  11. 此延時函數是使用1T的指令周期進行計算,與傳統的12T的MCU不同
  12. **************************************/
  13. void Delay5us()
  14. {
  15.     BYTE n = 4;

  16.     while (n--)
  17.     {
  18.         _nop_();
  19.         _nop_();
  20.     }
  21. }
  22. //-----------------------
  23. // 發出 START 1->0
  24. void IICstart(void)
  25. {
  26.     sdab=1;
  27.     sclb=1; Delay5us();
  28.     sdab=0; Delay5us();
  29.     sclb=0;
  30.     Delay5us();             //延時
  31. }
  32. //-----------------------
  33. // 發出 STOP 0->1
  34. void IICstop(void)
  35. {
  36.     sdab=0;
  37.     sclb=1; Delay5us();
  38.     sdab=1; Delay5us();
  39.     sclb=0;
  40.     Delay5us();             //延時
  41. }
  42. //-----------------------
  43. // 發出 應答位 0
  44. void mack(void)
  45. {
  46.     sdab=0;
  47.     sclb=1; Delay5us();  sclb=0;
  48.     sdab=1;
  49.     Delay5us();             //延時
  50. }
  51. //-----------------------
  52. // 發出 非應答位 1
  53. void mnack(void)
  54. {
  55.     sdab=1;
  56.     sclb=1; Delay5us();  sclb=0;
  57.     sdab=0;
  58.     Delay5us();             //延時
  59. }
  60. //-----------------------
  61. //  向 SDA 寫一個字節
  62. bit wrbyt(BYTE out_b)
  63. {
  64.     BYTE data i;
  65.     bit bdata sack;
  66.    
  67.     ACC=out_b;
  68.     for(i=8;i>0;i--)
  69.     {
  70.         ACC = ACC<<1; sdab=CY;
  71.         sclb=1; Delay5us();  sclb=0;
  72.         Delay5us();         //延時
  73.     }
  74.    
  75.     sdab=1;
  76.     sclb=1;
  77.                 Delay5us();             //延時
  78.     sack=sdab;                                                        //收應答
  79.     sclb=0;
  80.     Delay5us();             //延時
  81.     return sack;                                                //返回應答
  82. }
  83. //-----------------------
  84. // 從 SDA 讀取一個字節
  85. sbit ACC_bit0= ACC^0;
  86. BYTE rdbyt(void)
  87. {
  88.     BYTE data i;
  89.     sdab=1;
  90.     ACC=0;
  91.     for(i=8;i>0;i--)
  92.     {
  93.         ACC=ACC<<1;
  94.         sclb=1; Delay5us();
  95.         ACC_bit0=sdab;
  96.         sclb=0;
  97.         Delay5us();             //延時
  98.     }
  99.     return ACC;
  100. }
  101. //-----------------------
  102. //  發送 numbyt 字節
  103. void wrnbyt(BYTE iic_add, BYTE numbyt, BYTE xdata *data_add)  reentrant
  104. {
  105.     BYTE i;
  106.     for(i=100;i>0;i--)
  107.     {
  108.         IICstart();
  109.         if(!wrbyt(slaw))        // 發送 SLAW 字節
  110.             break;
  111.     }                           // return 0;
  112.     wrbyt(iic_add);             // 發送 地址

  113.     for(  ; numbyt>0; numbyt--)
  114.     {
  115.         wrbyt(*data_add++);     // 發送
  116.     }
  117.     IICstop();
  118. }
  119. //-----------------------
  120. //  讀取 numbyt 字節
  121. void rdnbyt(BYTE iic_add, BYTE numbyt, BYTE idata *data_add)  reentrant
  122. {
  123.     BYTE i;
  124.     for(i=100;i>0;i--)
  125.     {
  126.         IICstart();
  127.         if(!wrbyt(slaw))        // 發送 SLAW 字節
  128.             break;
  129.     }                           // return 0;
  130.     wrbyt(iic_add);             // 發送 地址

  131.     IICstart();
  132.     wrbyt(slar);                // 發送 SLAr 字節
  133.    
  134.     for(; numbyt>0; numbyt--)
  135.     {
  136.         *data_add++=rdbyt();
  137.         if(numbyt>0)
  138.             mack();
  139.     }
  140.     mnack();
  141.     IICstop();
  142. }
復制代碼

所有資料51hei提供下載:
AT24C02.rar (972 Bytes, 下載次數: 37)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:753868 發表于 2020-5-17 11:17 | 只看該作者
想問一下最后兩個函數的參數該怎么寫呢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜亚洲| 日韩欧美国产精品一区二区 | 国产婷婷色综合av蜜臀av | 黄色大片网站 | 国产精品美女久久久久aⅴ国产馆 | 黄色av网站在线免费观看 | 国产精品免费一区二区三区 | 精精国产xxxx视频在线野外 | 欧美福利久久 | 在线观看精品 | 日韩中文字幕在线免费 | 久久精品久久久久久 | 91精品国产91久久综合桃花 | 久久综合久久自在自线精品自 | 久久久久久久一区 | 久久成人国产精品 | 日韩在线观看网站 | 夜夜夜夜草 | 日本高清中文字幕 | 色综合久久久久 | 亚洲精品中文在线 | 成人视屏在线观看 | 亚洲精品视频一区二区三区 | 婷婷色在线 | 国产草草视频 | 激情六月丁香婷婷 | 亚洲精品久久久久久下一站 | 欧美日韩精品一区 | 九九伊人sl水蜜桃色推荐 | 日本aⅴ中文字幕 | 日韩中文一区二区三区 | 九色av| 久久久久久久av麻豆果冻 | 日韩成人av在线 | 亚洲欧美成人影院 | 自拍 亚洲 欧美 老师 丝袜 | av在线免费网站 | 不卡欧美| 欧美激情一区二区三区 | 免费大黄视频 | 成人亚洲综合 |