找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8253|回复: 9
打印 上一主题 下一主题
收起左侧

基于STC12单片机的24C02程序--自己写的,高质量代码

  [复制链接]
跳转到指定楼层
楼主
因为STC12系列没有I2C模块,所以使用IO模拟I2C总线的方法实现的。1、EEPROM的读写,I2C通讯。

2、STC12系列是1T指令周期的,且已用示波器测量,delay(1);约1us;(程序中所用延时函数);
3、所有元件时序,皆按手册操作,高效稳定可靠,会附件PDF给大家。
4、I2C总线是用的P1.3,P1.4 IO;



单片机源程序如下:
  1. #include "I2C.h"

  2. sbit I2C_SDA=P1^3;
  3. sbit I2C_SCL=P1^4;


  4. void I2C_Delay(u16 x)
  5. {
  6.         while(x--);
  7. }


  8. void I2C_Start()         //产生I2C的启动信号
  9. {
  10.         I2C_SDA=1;       
  11.           I2C_SCL=1;
  12.         I2C_Delay(5);         //4.7us
  13.         I2C_SDA=0;
  14.         I2C_Delay(5);
  15.         I2C_SCL=0;
  16. }

  17. void I2C_Stop()           //产生I2C的停止信号
  18. {
  19.           I2C_SCL=0;
  20.         I2C_SDA=0;       
  21.         I2C_Delay(5);
  22.         I2C_SCL=1;
  23.         I2C_Delay(5);
  24.         I2C_SDA=1;
  25. }

  26. void I2C_Send(u8 dat)           //按照I2C的协议发送一个字节
  27. {
  28.         u8 i;
  29.         for(i=0;i<8;i++)
  30.         {
  31.                  I2C_SCL=0;
  32.                 I2C_SDA=dat>>7;
  33.                 I2C_SCL=1;
  34.                 dat<<=1;
  35.         }
  36. }

  37. u8 Wait_Ack()           //主机等待从机发送应答信号
  38. {
  39.         u16 timeout;
  40.         I2C_SCL=0;
  41.         I2C_SDA=1;
  42.         I2C_SCL=1;
  43.         timeout=0;
  44.         while(I2C_SDA)
  45.         {
  46.                  if(timeout++>=500)
  47.                 {
  48.                         I2C_SCL=0;
  49.                           return 1;                 // 表示应答失败
  50.                 }
  51.         }
  52.         I2C_SCL=0;                           //释放SDA
  53.                
  54.         return 0;
  55. }

  56. u8 I2C_Receive()   // 主机接收从机一个字节
  57. {
  58.         u8 dat,i;
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 dat<<=1;       
  62.                 I2C_SCL=1;
  63.                 if(I2C_SDA)
  64.                 {
  65. //                        dat|=0x01;
  66.                         dat++;
  67.                 }
  68.                 I2C_SCL=0;
  69.         }
  70.         return dat;
  71. }

  72. void I2C_Ack()          //主机向从机产生应答信号
  73. {
  74.         I2C_SCL=0;       

  75.         I2C_SDA=0;

  76.         I2C_SDA=1;
  77.         I2C_SCL=1;       
  78. ……………………

  79. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
I2C总线器件选型(包含8591应用).pdf (385 KB, 下载次数: 68)
24c02串行储存器中文官方资料手册.pdf (994.32 KB, 下载次数: 76)
24c02.zip (66.04 KB, 下载次数: 260)

评分

参与人数 1黑币 +4 收起 理由
gqzjl + 4 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏9 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:409415 发表于 2018-10-14 14:39 | 只看该作者
确实简洁质量高
回复

使用道具 举报

板凳
ID:375538 发表于 2019-3-15 12:08 | 只看该作者
很有用,谢谢楼主
回复

使用道具 举报

地板
ID:33544 发表于 2019-6-27 16:41 | 只看该作者
确实简洁质量高
回复

使用道具 举报

5#
ID:578917 发表于 2019-7-19 18:57 | 只看该作者
可以可以  效率很高
回复

使用道具 举报

6#
ID:479395 发表于 2021-12-15 19:52 | 只看该作者
很久没玩单片机了    现在从新学习一下
回复

使用道具 举报

7#
ID:479395 发表于 2021-12-15 19:56 | 只看该作者
有没有公德心啊   啥都放一个文件夹里
回复

使用道具 举报

8#
ID:997450 发表于 2022-2-27 08:58 | 只看该作者
质量很高,实现了16位数字和浮点数的储存和读取,并且都能通过对应的显示函数显示
回复

使用道具 举报

9#
ID:447337 发表于 2023-4-11 15:52 | 只看该作者
写的不错,666
回复

使用道具 举报

10#
ID:996773 发表于 2023-4-11 16:13 | 只看该作者
为什么看到好多24c02电路时钟和数据脚都有上拉电阻,我用的51单片机接p3口没有

用上拉电阻,也一样用,难道这一定要加上拉电阻吗,有大师知道吗,不加有什么影响
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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