标题: 单片机C语言中long型数据要怎么写入AT24C02 [打印本页]

作者: wlhuang    时间: 2022-3-23 20:39
标题: 单片机C语言中long型数据要怎么写入AT24C02
1、这是数据类型的定义:unsigned long NewData;
2、AT24C02每次只写一个字节,如何写入long型的数据呢?
作者: lkc8210    时间: 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;

复制代码

作者: wufa1986    时间: 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];               
作者: munuc_w    时间: 2022-3-24 08:39
变量类型转换,把要写入的数据变换成字节类型的再写。
作者: zhxiufan    时间: 2022-3-24 08:52
连续写入4个字节也就是长整数的低、次低,次高,高字节。
作者: wlhuang    时间: 2022-3-24 11:00
zhxiufan 发表于 2022-3-24 08:52
连续写入4个字节也就是长整数的低、次低,次高,高字节。

感谢指导~
作者: wlhuang    时间: 2022-3-24 11:00
lkc8210 发表于 2022-3-24 00:20

感谢指导~
作者: wlhuang    时间: 2022-3-24 11:01
wufa1986 发表于 2022-3-24 08:27
unsigned char e[4];
unsigned long test;
unsigned char *d;       

感谢指导~
作者: wlhuang    时间: 2022-3-24 11:01
zhxiufan 发表于 2022-3-24 08:52
连续写入4个字节也就是长整数的低、次低,次高,高字节。

感谢指导~
作者: wlhuang    时间: 2022-3-26 19:44
lkc8210 发表于 2022-3-24 00:20

感谢分享,用分字节已能正常读写操作,谢谢~
作者: joyb    时间: 2023-8-31 10:01
lkc8210 发表于 2022-3-24 00:20

好方法真多
作者: lzd918    时间: 2023-8-31 11:32
分4个字节进行即可
作者: zzzzdddd11    时间: 2023-8-31 11:51
好方法真多

作者: liucan2020    时间: 2023-9-1 22:36
上面大佬的联合体真好,共用一个地址
作者: Hephaestus    时间: 2023-9-2 12:42
最简洁的写法是强制指针类型转换,这要水平不错才能写。

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

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1