找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2851|回复: 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, 下载次数: 35)


评分

参与人数 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 单片机教程网

快速回复 返回顶部 返回列表