/
文件名 : 宏晶EEPROMc
描述 : 该程序实现了对STC单片机的EEPROM的 *** 作。每隔05秒钟,单片机对EEPROM进行一次
读、擦除和写 *** 作,并把数值显示到数码管上。
确认试验是否成功:电源上电后,数码管的值在递增,观察值。关闭电源,待几秒后上电,
数码管显示的值会从断电钱的那个值开始显示。
创建人 : 东流
版本号 : 20
/
#include<reg52h>
#include<intrinsh>
/以下是配置STC单片机的寄存器/
sfr ISP_DATA = 0xC2;
sfr ISP_ADDRH = 0xC3;
sfr ISP_ADDRL = 0xC4;
sfr ISP_CMD = 0xC5;
sfr ISP_TRIG = 0xC6;
sfr ISP_CONTR = 0xC7;
#define uint unsigned int
#define uchar unsigned char
#define ISP_BYTE_READ 1 //ISP字节读
#define ISP_BYTE_PROGRAM 2 //ISP直接编程
#define ISP_SECTOR_ERASE 3 //ISP扇区擦除
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/
名称 : Delay()
功能 : 延时,延时时间为 10ms del
输入 : del
输出 : 无
/
void Delay_1ms(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/
名称 : ISP_ERASE()
功能 : EEPROM的扇区擦除
输入 : Address(擦除扇区的地址)
输出 : 无
/
void ISP_ERASE(Address)
{
ISP_ADDRL = Address;
ISP_ADDRH = Address >> 8;
ISP_CONTR = 0x83;
ISP_CMD = ISP_SECTOR_ERASE;
ISP_TRIG = 0x5a; //PDF手册中说先像 ISP_TRIG 中写入 0x5a, 然后写入 0xa5
ISP_TRIG = 0xa5;
_nop_();
_nop_();
}
/
名称 : ISP_READ()
功能 : 从EEPROM相应的地址中读出值
输入 : Address(想要读取EEPROM的地址)
输出 : Read_Data(从EEPROM读出的值)
/
uint ISP_READ(Address)
{
uchar Read_Data;
ISP_ADDRL = Address;
ISP_ADDRH = Address >> 8;
EA = 0;
ISP_CONTR = 0x83;
ISP_CMD = ISP_BYTE_READ;
ISP_TRIG = 0x5a;
ISP_TRIG = 0xa5;
_nop_();
_nop_();
Read_Data = ISP_DATA;
return Read_Data;
}
/
名称 : ISP_PROGRAM()
功能 : 实现EEPROM的字节编程
输入 : Address为编程的地址,Data_temp为想要编程的值
输出 : 无
/
void ISP_PROGRAM(Address, Data_temp)
{
ISP_DATA = Data_temp;
ISP_ADDRL = Address;
ISP_ADDRH = Address >> 8;
ISP_CONTR = 0x83;
ISP_CMD = ISP_BYTE_PROGRAM;
ISP_TRIG = 0x5a;
ISP_TRIG = 0xa5;
_nop_();
_nop_();
}
/
名称 : Main()
功能 : 主函数
输入 : 无
输出 : 无
/
void Main()
{
uint i;
uchar LED_Buffer = 0;
while(1)
{
for(i=0; i<100; i++)
{
LED_Buffer = ISP_READ(0x0000);
P0 = table[LED_Buffer % 10];
P2 = 1;
Delay_1ms(20);
P0 = table[LED_Buffer / 10 % 10];
P2 = 0;
Delay_1ms(20);
}
LED_Buffer++;
ISP_ERASE(0x0000); //注意:字节编程时必须要先要擦除整个扇区
ISP_PROGRAM(0x0000, LED_Buffer);
}
}
举个例子吧,如果说你在做一个项目,这个项目的代码很长,有5000多行,而且基本上裏面的同一个常量n就占了3000多行,如果说今后你要是想对这个常量n的值进行修改,如果在程序的开始没有定义一个#define
n,那么改起来不是很麻烦,3000多行啊,那不是要晕过去了~如果你事先定义了一个#define
n
‘常量值’,那么当你要修改程序内部的常量值时,只要修改n后面的常量值就等于把程序内部的要修改的相同常量值都改了,那就很方便了
在程序执行期间其值可以改变的量称为变量,变量类型又分为系统变量和用户自定义变量,用户自定义变量其实和系统变量含义是一样的,在学到结构化编程的时候,你就会明白自定义变量的意思了。系统变量分为四种,int整形变量,用户存放整数的变量,占4个字节的大小;float单精度浮点型,就是存放小数点的数值,占4个字节大小;double高精度浮点型,相对float而言,double保畱的小数点位数更精确,占8个字节的大小;char字符变量,主要存放字母,占1个字节的大小eg:“#define
n
10”c语言中这一句表示什么
表示n=10,在以下的程序中你可用n来表示数字10
这是一个宏定义,表示凡是在程序中出现的n变量,都被赋于值10。再纠正一下,在宏定义中,一般用大写。准确来说“#define
n
10”不是n=10的意思,
而是用10替换掉n,这是有区别的。
例如:#include
#define
n
a+b
void
main(){int
a=1,b=2;
printf
("%d",n5);}输出的是11,而不是15。
又例如:
#include
#define
n
(a+b)
#ifdef #define 是什么意思?
编译预处理结构
#ifdef
#define
#endif
为了有助于你理解举个ARM里的例子:
#ifdef _DMA1_Channel1
#define DMA1_Channel1 ((DMA_Channel_TypeDef ) DMA1_Channel1_BASE)
#endif /_DMA1_Channel1 /
这是ST库函数里面的一段
如果你自己编程要用到DMA1_Channel1 这个地址也就是((DMA_Channel_TypeDef ) DMA1_Channel1_BASE),只需要在你自己的函数的头文件里面
加上一句话 #define _DMA1_Channel1
然后把这个库函数包含进来就OK了
ifdef是什么意思#ifdef是一句电脑程序语句。
可以用它区隔一些与特定头文件、程序库和其他文件版本有关的代码。
可翻译为:如果宏定义了语句1则执行程序2。
#ifdef __APPLE__是什么意思#ifdef 是预编译命令
意思是如果程序中定义了 __APPLE__ 这个符号,则编译下列语句(#endif 或者#else之前的)
#ifdef _MSC_VER 是什么意思?你问的VC++程序里面的吧,是用来标明程序版本号的,没什么很实际的用途。
define是什么意思define
英 [dɪ'faɪn] 美 [dɪ'faɪn]
vt 定义;使明确;规定
n (Define)人名;(英)德法恩;(葡)德菲内
[ 过去式 defined 过去分词 defined 现在分词 defining ]
英文解释及例句:
V-T If you define something, you show, describe, or state clearly what it is and what its limits are, or what it is like 给…下定义; 解释
例:
The Convention Against Torture defines torture as any act that inflicts severe pain or suffering, physical or mental
《反酷刑条约》把酷刑定义为任何造成严重身心疼痛和受苦的行为。
有的时候为了程序的通用性,可以使用#define预处理宏定义命令,它的具体作用,就是方便程序段的定义和修改。
举个例子吧,如果说你在做一个项目,这个项目的代码很长,有5000多行,而且基本上裏面的同一个常量N就占了3000多行,如果说今后你要是想对这个常量N的值进行修改,如果在程序的开始没有定义一个#define N,那么改起来不是很麻烦,3000多行啊,那不是要晕过去了~如果你事先定义了一个#define N ‘常量值’,那么当你要修改程序内部的常量值时,只要修改N后面的常量值就等于把程序内部的要修改的相同常量值都改了,那就很方便了
在程序执行期间其值可以改变的量称为变量,变量类型又分为系统变量和用户自定义变量,用户自定义变量其实和系统变量含义是一样的,在学到结构化编程的时候,你就会明白自定义变量的意思了。系统变量分为四种,int整形变量,用户存放整数的变量,占4个字节的大小;float单精度浮点型,就是存放小数点的数值,占4个字节大小;double高精度浮点型,相对float而言,double保畱的小数点位数更精确,占8个字节的大小;char字符变量,主要存放字母,占1个字节的大小
define的单词意思“定义”。您所说的应该是C系语言中的宏定义。
define,无参宏定义的一般形式为:#define 标识符 字符串
define 函数定义一个常量。
常量类似变量,不同之处在于:
在设定以后,常量的值无法更改。
常量名不需要开头的美元符号 ($)。
作用域不影响对常量的访问 。
常量值只能是字符串或数字。
作用:
被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。
宏定义的作用范围仅限于当前文件,即file1c中定义 #define PI 314,在file2c中该宏定义不起作用;通过将#define PI 314定义在monh中,file1c和file2c分别#include "monh"的方式,该宏定义在file1c和file2c中都起作用。
在C或C++语言中,“宏”分为有参数和无参数两种。
define
[英][dɪˈfaɪn][美][dɪˈfaɪn]
vt
规定; 使明确; 精确地解释; 画出…的线条;
vi
(给词、短语等)下定义,构成释义;
网络
解释; 限定; 下定义;
第三人称单数:defines现在分词:defining过去式:defined过去分词:defined
1
Please listen while I define your duties
在我规定你的职责时,请仔细听好。
2
It 's important to define the o terms
如何定义“紧缩”和“增长”很重要。
define as是什么意思define as
定义为
双语例句
1
These o elements are easy to define as Eclipse core expressions inthe plug-in xml file
这两个元素可以很容易地定义为插件xml文件中的Eclipse核心表达式。
2
The beauty of our country or at least all of its south of North Scotland isas hard to define as it is easy to enjoy
我们国家的美,至少北苏格兰以南所有的地方之美欣赏容易,描绘难。(直择:欣赏起来容易,说明白难。)
#ifdef 在VC中是什么意思啊当标识符被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。
其中#else部分也可以没有,即:
#ifdef
程序段1
#denif
这里的“程序段”可以是语句组,也可以是命令行。这种条件编译可以提高C源程序的通用性。
您好 !
安卓手机Root后要直接在手机内部目录
修改安卓ROM系统里的apk程序
建议您安装使用RE, 在RE界面内更改framework-resapk
希望这能帮到您 !!
程序编译完成后就不能修改了
即使是免费软件,没有开放源代码,修改也是违法的。
为了防修改,发布软件时一般都会加壳,就这一项,够破解一阵子了
脱壳后,反汇编等,非高手都搞不定
程序不像word文档那样,可以随便改,有时一个字节的改变可能就没法用了
这个要分是用什么ROm的芯片还是单片机做的。如果是可编程控制器做的随时都可以用编程器改写程序。如果是可擦写的F EPROM写的程序,可以用紫外灯擦除原程序后继续使用编程器来再次写入。对于双列直插型的存储体,如果加密的还需要先解密才能再次写入。
以上就是关于STC89C51如何用程序修改单片机内部的eeprom,最好有C语言的例子,多谢先!!全部的内容,包括:STC89C51如何用程序修改单片机内部的eeprom,最好有C语言的例子,多谢先!!、【C语言】“define”是什么意思代表什么有什么用、#ifdef #define 是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)