找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机C语言中long型数据要怎么写入AT24C02

  [复制链接]
跳转到指定楼层
楼主
ID:289218 发表于 2022-3-23 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、这是数据类型的定义:unsigned long NewData;
2、AT24C02每次只写一个字节,如何写入long型的数据呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-3-24 00:20 | 只看该作者
  1. 1. 分字节写,分字节謮
  2. ulong Temp = 0xA5B6C7D8;
  3. //write**************
  4. IapProgramByte(0x0200, (uchar)(Temp >>24));
  5. IapProgramByte(0x0201, (uchar)(Temp >>16));
  6. IapProgramByte(0x0202, (uchar)(Temp >>8));
  7. IapProgramByte(0x0203, (uchar)(Temp));

  8. //Read***************
  9. Temp = 0x00;
  10. Temp |= (ulong)IapReadByte(0x0200)<<24;
  11. Temp |= (ulong)IapReadByte(0x0201)<<16;
  12. Temp |= (ulong)IapReadByte(0x0202)<<8;
  13. Temp |= (ulong)IapReadByte(0x0203);

  14. 2. 用联合体
  15. typedef union{
  16. uchar u8_dat[4];
  17. ulong u32_Dat;
  18. }union32;
  19. union32 union_Dat;
  20. ulong Temp = 0xA5B6C7D8;
  21. //write**************
  22. union_Dat.u32_Dat = Temp;
  23. IapProgramByte(0x0200, union_Dat.u8_dat[0]);
  24. IapProgramByte(0x0201, union_Dat.u8_dat[1]);
  25. IapProgramByte(0x0202, union_Dat.u8_dat[2]);
  26. IapProgramByte(0x0203, union_Dat.u8_dat[3]);

  27. //Read***************
  28. union_Dat.u8_dat[0] = IapReadByte(0x0200);
  29. union_Dat.u8_dat[1] = IapReadByte(0x0201);
  30. union_Dat.u8_dat[2] = IapReadByte(0x0202);
  31. union_Dat.u8_dat[3] = IapReadByte(0x0203);
  32. Temp = union_Dat.u32_Dat;

复制代码
回复

使用道具 举报

板凳
ID:879348 发表于 2022-3-24 08:27 | 只看该作者

unsigned char e[4];
unsigned long test;
unsigned char *d;       
test=0x11223344;       
d=(unsigned char*)&test;
  e[0]=d[0];       
  e[1]=d[1];
  e[2]=d[2];       
  e[3]=d[3];               
回复

使用道具 举报

地板
ID:752974 发表于 2022-3-24 08:39 | 只看该作者
变量类型转换,把要写入的数据变换成字节类型的再写。
回复

使用道具 举报

5#
ID:121859 发表于 2022-3-24 08:52 | 只看该作者
连续写入4个字节也就是长整数的低、次低,次高,高字节。
回复

使用道具 举报

6#
ID:289218 发表于 2022-3-24 11:00 | 只看该作者
zhxiufan 发表于 2022-3-24 08:52
连续写入4个字节也就是长整数的低、次低,次高,高字节。

感谢指导~
回复

使用道具 举报

7#
ID:289218 发表于 2022-3-24 11:00 | 只看该作者
回复

使用道具 举报

8#
ID:289218 发表于 2022-3-24 11:01 | 只看该作者
wufa1986 发表于 2022-3-24 08:27
unsigned char e[4];
unsigned long test;
unsigned char *d;       

感谢指导~
回复

使用道具 举报

9#
ID:289218 发表于 2022-3-24 11:01 | 只看该作者
zhxiufan 发表于 2022-3-24 08:52
连续写入4个字节也就是长整数的低、次低,次高,高字节。

感谢指导~
回复

使用道具 举报

10#
ID:289218 发表于 2022-3-26 19:44 | 只看该作者

感谢分享,用分字节已能正常读写操作,谢谢~
回复

使用道具 举报

11#
ID:1064915 发表于 2023-8-31 10:01 | 只看该作者
回复

使用道具 举报

12#
ID:221871 发表于 2023-8-31 11:32 | 只看该作者
分4个字节进行即可
回复

使用道具 举报

13#
ID:1092337 发表于 2023-8-31 11:51 | 只看该作者
好方法真多
回复

使用道具 举报

14#
ID:1040201 发表于 2023-9-1 22:36 | 只看该作者
上面大佬的联合体真好,共用一个地址
回复

使用道具 举报

15#
ID:883242 发表于 2023-9-2 12:42 | 只看该作者
最简洁的写法是强制指针类型转换,这要水平不错才能写。

笨一点的写法是用union,这种写法是人类看起来啰嗦,但实际上执行起来的汇编码也很简洁,跟上一种办法几乎没有差异。

最笨的写法就是沙发位的移位,不仅人类看起来啰嗦,大量无效本来可以优化的机器码,不仅浪费ROM,也占用了大量的运行时间。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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