AT24C02跨页写数据函数

AT24C02写数据介绍

EEPROM的写数据分为:

  1. 字节写数据模式
  2. 页写数据模式;

字节写就是一个地址一个数据的写,页写是连续写数据,一个地址多个数据的写,但是页写不能自动跨页,如果超出一页长度,超出的数据会覆盖原先写入的数据。

STC单片机EEPROM读写

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
//****************************************************************

// --最简洁的的拿来就用保证没错^_^简洁至上!

//----------------------------------------------------------------

//--------------------------------//--------------------------------

//注意:以下为STC89系列的地址

//--------------------------------//--------------------------------

sfr isp_data = 0xe2;//ISP/IAP操作时的数据寄存器

sfr isp_addrh = 0xe3;//高地址

sfr isp_addrl = 0xe4;//低地址

sfr isp_cmd = 0xe5;//命令模式寄存器

sfr isp_trig = 0xe6;//命令触发寄存器

sfr isp_contr = 0xe7;//ISP/IAP控制寄存器

*/

/*

//--------------------------------//--------------------------------

//注意:以下为1T新STC系列的地址

//--------------------------------//--------------------------------

sfr isp_data = 0xc2;//ISP/IAP操作时的数据寄存器

sfr isp_addrh = 0xc3;//高地址

sfr isp_addrl = 0xc4;//低地址

sfr isp_cmd = 0xc5;//命令模式寄存器

sfr isp_trig = 0xc6;//命令触发寄存器

sfr isp_contr = 0xc7;//ISP_IAP控制寄存器

//----------------------------------------------------------------

uchar eeprom_read(uint addres);//

void eeprom_write(uint address,uchar wdata);//

void eeprom_eares(uint addres);//扇区擦除

//****************************************************************

// 扇区擦除

//----------------------------------------------------------------

void eeprom_eares(uint addres)

{

uchar i;

isp_addrl=addres; //低位地址

isp_addrh=addres>>8; //高位地址

isp_contr=0x01;

isp_contr=isp_contr|0x80; //设时间与充ISP操作。

isp_cmd=0x03; //扇区命命令

isp_trig=0x46; //触发

isp_trig=0xb9; //触发启动。

for(i=0;i<3;i++)

;

isp_addrl=0xff;

isp_addrh=0xff;

isp_contr=0x00;

isp_cmd=0x00;

isp_trig=0x00;

}

//****************************************************************

// 读数据

//----------------------------------------------------------------

unsigned char eeprom_read(unsigned int addres)

{

unsigned char i,z;

isp_addrl=addres; //低位地址

isp_addrh=addres>>8; //高位地址

isp_contr=0x01;

isp_contr=isp_contr|0x80; //设时间与充ISP操作。

isp_cmd=0x01; //写命令

isp_trig=0x46; //触发

isp_trig=0xb9; //触发启动。

for(i=0;i<3;i++)

;

isp_addrl=0xff;

isp_addrh=0xff;

isp_contr=0x00;

isp_cmd=0x00;

isp_trig=0x00;

z=isp_data;

return(z);

}

//****************************************************************

// 写数据

//----------------------------------------------------------------

void eeprom_write(unsigned int addres,unsigned char write_data)

{

unsigned char i;

isp_data=write_data; //要写入的数据。

isp_addrl=addres; //低位地址

isp_addrh=addres>>8; //高位地址

isp_contr=0x01;

isp_contr=isp_contr|0x80; //设时间与充ISP操作。

isp_cmd=0x02; //写命令

isp_trig=0x46; //触发

isp_trig=0xb9; //触发启动。

for(i=0;i<3;i++)

;

isp_addrl=0xff;

isp_addrh=0xff;

isp_contr=0x00;

isp_cmd=0x00;

isp_trig=0x00;

}

Anaconda超详细安装教程(Windows环境下)

什么是Python?

Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台的特点,可以在Linux、macOS以及Windows系统中搭建环境并使用,其编写的代码在不同平台上运行时,几乎不需要做较大的改动,使用者无不受益于它的便捷性。

C语言的一些“骚操作”及其深层理解

讲解嵌入式C语言的编程技巧,并进行深入解析。

一、隐藏的死循环

有时候,我们会发现for循环变成了一个死循环:

1
2
3
4
5
6
unsigned char i;

for(i = 4; i >= 0; i--)
{
....
}

我们本希望循环5次,然后结束,但实际情况是陷入了死循环。这种错误在实际开发中,还比较难发现。其原因在于i的类型,无符号整型是永远不小于0的。

DOS编程:VESA/VBE高分辨率图形驱动开发

在DOS中,如果你想要高于VGA模式的图形,你需要VESA BIOS扩展。 (VBE)。通常卡仅支持 VESA 模式的有限子集,并且存在不同的 VESA 标准版本(1.2、2.0、3.0)。 如果您有特定于卡的 VESA 驱动程序,则可以获得完整的 VESA 支持。

TDNN模型及其改进模型的理解

时延神经网络(TDNN)相当于CNN的前身,相当于1dcnn即一维CNN,它的共享权重被限制在单一的维度上,并且没有池化层,适用于语音和时间序列的信号处理。TDNN区别于只用了一帧特征的模型结构,是一个能够包含多帧的神经网络,若延时为2,则连续的3帧都能够出现,这里的隐含层用于特征抽取,若输入层每一帧有13维MFCC特征输入,网络有10个隐含层,那么连接的权重数目即为31310=390个。此时延时神经网络相当于把权重延时,隐藏层和输出层之间若采用该方法,这样整体的权重就大大减少,便于训练.

DOS编程:DJGPP保护模式下的中断调用

DJGPP是DOS下完整的32位的C/C++保护模式的编译器,运行于386以上机器。DJGPP有一个好帮手叫作Allegro,它是个图形/声音编程库,功能非常强大,应用于界面编程非常方便。可以Allegro编程库编写程序,然后用DJGPP编译。

DOS编程:鼠标中断INT 33h服务参考

BIOS中断33h,鼠标中断(由鼠标驱动程序 MOUSE.COM/MOUSE.SYS 注册,不是BIOS原生提供)。

注意:INT 33h 的功能号约定在 AX(16位) 里,不是 AH。这跟大多数走 AH 做功能号的 BIOS 中断不一样,是历史遗留的规范,容易写错。

DOS编程:VS Code DOS开发扩展插件

VS Code DOS 开发扩展是一种即插即用解决方案,用于在 C/C++ 中编写和调试 32 位保护模式 DOS 应用程序。

dos-dev - Visual Studio Marketplace

特征

  • 自动安装所需工具
  • 简单的项目初始化
    • 基于 CMake 的构建,无论是在 VS Code 中还是在命令行上
    • 用于调试的 VS 代码启动配置
    • C/C++ 开发的合理默认设置
    • 用于调试的 GDB 存根集成
    • 演示应用程序0x13等待按键时绘制像素的简单模式
    • 明智的 .gitignore
  • 通过 GDB 在 VS Code 和命令行中调试支持

快速入门

  • 安装 CMake
    • 在 Linux 上,通过包管理器安装这些包 libncurses5 libfl-dev libslirp-dev libfluidsynth-dev
  • 在 VS Code 中安装扩展
    • CTRL+SHIFT+P(或在 macOS 上)CMD+SHIFT+P
    • ext install badlogicgames.dos-dev
  • 打开一个新的空文件夹,然后
    • CTRL+SHIFT+P(或在 macOS 上)CMD+SHIFT+P
    • DOS: Init Project
      • 当系统要求安装 DOS 工具时,请选择 Yes
      • 当系统要求安装 clangd 时,请选择 Yes
    • 按下可在 DOSBox-x 中构建和调试演示应用程序。F5

要求

您需要安装以下第三方软件: