3613|13

3416

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【R7F0C809】模拟IIC,EEPROM [复制链接]

本帖最后由 ljj3166 于 2015-9-15 00:06 编辑

计划中准备掉电保存电量数据
翻遍了C809的得特希特
发现片上木有带EEPROM
真小气啊,来个1k,至少个512字节也行啊
算了,自己外扩吧
擦写频繁,用铁电才好呀
手上仅仅有片AT24c08,撸上
大不了10分钟存一次
保守估计50k次擦写
也能带电使用4k小时
几万次擦写后,再换地址保存吧,反正需要保存的数据不多
因为可复用的端口要留着玩键中断和AD
所以还是考虑用io去模拟 I方C 时序

就是这货

标准IIC接口
不多啰嗦了,上代码
还是压个包吧: iic.rar (951 Bytes, 下载次数: 16)
  1. #include "r_cg_macrodriver.h"
  2. #include "r_cg_cgc.h"
  3. #include "r_cg_port.h"
  4. #include "at24cxx.h"

  5. #define eeprom_SCK_OUT    PM0.5=0U; //记得IIC标准是需要开漏,这里貌似没用POM设置开漏也照样能用
  6. #define eeprom_SCK_HIGH   P0.5 = 1U;
  7. #define eeprom_SCK_LOW    P0.5 = 0U;

  8. #define eeprom_SDA_OUT     PM0.4=0U;
  9. #define eeprom_SDA_IN      PM0.4=1U;
  10. #define eeprom_SDA_HIGH    P0.4 = 1U;
  11. #define eeprom_SDA_LOW     P0.4 = 0U;
复制代码

  1. void flash()
  2. {
  3.     ;
  4. }
  5. void x24c08_init()  
  6. {
  7.     eeprom_SCK_OUT;
  8.     eeprom_SDA_OUT;   
  9.     eeprom_SCK_HIGH;
  10.     flash();
  11.     eeprom_SDA_HIGH;
  12.     flash();
  13. }
  14. void start()  
  15. {
  16.     eeprom_SDA_HIGH;
  17.     flash();
  18.     eeprom_SCK_HIGH;
  19.     flash();
  20.     eeprom_SDA_LOW;
  21.     flash();
  22.     eeprom_SCK_LOW;
  23.     flash();
  24. }
  25. void stop()  
  26. {
  27.     eeprom_SDA_LOW;
  28.     flash();
  29.     eeprom_SCK_HIGH;
  30.     flash();
  31.     eeprom_SDA_HIGH;
  32.     flash();
  33. }
  34. void writex(unsigned char j)  
  35. {
  36.     unsigned char i,temp;
  37.     temp=j;
  38.     for (i=0;i<8;i++)
  39.     {
  40.          
  41.         eeprom_SCK_LOW;
  42.         flash();
  43.         if(temp&0x80)
  44.         {eeprom_SDA_HIGH;}
  45.         else {eeprom_SDA_LOW;}
  46.         flash();
  47.         eeprom_SCK_HIGH;
  48.         flash();
  49.         temp=temp<<1;   //这里是个大坑,一定要先送高位再移位进行循环!!!!!!!!!!!!!!!!!!!!!!!
  50.     }
  51.     eeprom_SCK_LOW;
  52.     flash();
  53.     eeprom_SDA_HIGH;
  54.     flash();
  55. }
  56. unsigned char readx()  
  57. {
  58.     unsigned char i,j,k=0;
  59.     eeprom_SCK_LOW;
  60.     flash();
  61.     eeprom_SDA_HIGH;
  62.     for (i=0;i<8;i++)
  63.     {
  64.         flash();
  65.         eeprom_SCK_HIGH;
  66.         flash();
  67.         eeprom_SDA_IN;      
  68.         if (P0.4==1)
  69.         {j=1; }
  70.         else {j=0; }
  71.         k=(k<<1)|j;
  72.         eeprom_SDA_OUT;
  73.         eeprom_SCK_LOW;
  74.     }
  75.     flash();
  76.     return(k);
  77. }
  78. void clock()  
  79. {
  80.     unsigned char i=0;
  81.     eeprom_SCK_HIGH; flash();
  82. eeprom_SDA_IN;      
  83.     while ((P0.4==1)&&(i<255)){i++; }
  84. eeprom_SDA_OUT;
  85.     eeprom_SCK_LOW; flash();
  86. }

  87. unsigned char x24c08_read(unsigned char address)
  88. {
  89.     unsigned char i;
  90.     start();
  91.     writex(0xa0);
  92.     clock();
  93.     writex(address);
  94.     clock();
  95.     start();
  96.     writex(0xa1);
  97.     clock();
  98.     i=readx();
  99.     stop();
  100.     Delay_ms(1);
  101.     return(i);
  102. }

  103. void x24c08_write(unsigned char address,unsigned char info)
  104. {
  105.     start();
  106.     writex(0xa0);
  107.     clock();
  108.     writex(address);
  109.     clock();
  110.     writex(info);
  111.     clock();
  112.     stop();
  113.     Delay_ms(5);
  114. }
复制代码


代码从网上找的
太坑爹了
writex函数特别要注意
循环里面一定得先先送最高位再移位进行循环
害得哥又是抓波形,又是测试IO口,搞了好几个小时

字节突发连续传输模式函数就没有继续往下写了
反正保存的数据也不多

写个测试
  1. char u[18],t[18]="102410241024102488",i; //设置一个18位的字符串数据,1024,哇哈哈哈哈哈........

  2. for(i = 0;i<18;i++){
  3.                 x24c08_write(i,t[i]);
  4.          }
  5.          
  6.          for(i = 0;i<18;i++){
  7.                 u[i] = x24c08_read(i);
  8.                  }
复制代码


看看写入并读出的数据:

1024........88,
完整无误
卡蒙北鼻,水军在哪里
让楼主看到你们的大水..................

最新回复

已拿走,多谢  详情 回复 发表于 2015-11-8 13:17

赞赏

2

查看全部赞赏

点赞 关注
个人签名

So TM what......?


回复
举报

3416

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
纳尼,代码+注解都消失了》。。。。。
 
个人签名

So TM what......?

 


回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 
哥一句没看清,就想问楼主: 波形用什么抓的?

点评

哪句没看清?  详情 回复 发表于 2015-9-15 00:10
山寨逻辑分析  详情 回复 发表于 2015-9-15 00:08
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

4
 
freebsder 发表于 2015-9-15 00:07
哥一句没看清,就想问楼主: 波形用什么抓的?

山寨逻辑分析

点评

哦,哥释然了,看来只有哥这样的高手才用手。  详情 回复 发表于 2015-9-15 00:11
 
个人签名

So TM what......?

 

 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

5
 
freebsder 发表于 2015-9-15 00:07
哥一句没看清,就想问楼主: 波形用什么抓的?

哪句没看清?
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

6
 


哦,哥释然了,看来只有哥这样的高手才用手。

点评

高手用音频口抓的?  详情 回复 发表于 2015-9-15 00:12
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

7
 
freebsder 发表于 2015-9-15 00:11
哦,哥释然了,看来只有哥这样的高手才用手。

高手啊,逻辑分析爪

点评

哥只需用手一抓,便可测量波与它的形状,不吹,低调,从不显露武功。  详情 回复 发表于 2015-9-15 00:14
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

8
 


哥只需用手一抓,便可测量波与它的形状,不吹,低调,从不显露武功。

点评

楼主仿佛看到江湖即将刮起一阵腥风血雨 队长,别出招,是我......  详情 回复 发表于 2015-9-15 00:17
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

9
 
freebsder 发表于 2015-9-15 00:14
哥只需用手一抓,便可测量波与它的形状,不吹,低调,从不显露武功。

楼主仿佛看到江湖即将刮起一阵腥风血雨
队长,别出招,是我......

点评

楼主可练眼。 测于闪撇之间,量于寸远之外,映形于目,算频于心,骑得一匹好码,吟得一首好诗。  详情 回复 发表于 2015-9-15 00:27
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

10
 


楼主可练眼。
测于闪撇之间,量于寸远之外,映形于目,算频于心,骑得一匹好码,吟得一首好诗。

点评

吟得一手好湿啊 原本是一个诗人活生生被逼成了一个工程师  详情 回复 发表于 2015-9-15 13:59
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

11
 
斑竹,淫才啊
 
个人签名山中方七日,世上已千年。
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

12
 
freebsder 发表于 2015-9-15 00:27
楼主可练眼。
测于闪撇之间,量于寸远之外,映形于目,算频于心,骑得一匹好码,吟得一首好诗。

吟得一手好湿啊
原本是一个诗人活生生被逼成了一个工程师

点评

哥不小心显露独孤九贱,专业水军都不敢给你捧场了,罪过罪过  详情 回复 发表于 2015-9-15 20:02
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

13
 
ljj3166 发表于 2015-9-15 13:59
吟得一手好湿啊
原本是一个诗人活生生被逼成了一个工程师

哥不小心显露独孤九贱,专业水军都不敢给你捧场了,罪过罪过
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

855

帖子

5

TA的资源

一粒金砂(高级)

14
 
已拿走,多谢
 
个人签名作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表