单片机程序里如何初设EEPROM?

我想在单片机(STM8S)EEPROM里存一个常数,一次性的,单片机程序只会第一次用到一次,以后这个数都会随单片机采集而更新保存其它值,怎么在程序里定义?还是要另烧写EE... 我想在单片机(STM8S)EEPROM里存一个常数,一次性的,单片机程序只会第一次用到一次,以后这个数都会随单片机采集而更新保存其它值,怎么在程序里定义?还是要另烧写EEPROM??
我问的不是如何读写EEPROM,是如何存个初值,单片机运行程序时这个初值会改掉,以后会存不同的值,而不是每次单片机初始化都会存EEPROM那个初值。
展开
 我来答
意法半导体(中国)投资有限公司 2020-01-15
展开全部
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
wotongxin_1987
2010-09-15 · TA获得超过104个赞
知道答主
回答量:50
采纳率:0%
帮助的人:49.4万
展开全部
第一次运行用?
unsigned char i;
main()
{
i=23;//常数
W_eeprom();//写EEP
R_eeprom();//读EEP
i=1;
}
第一次编程用?分2个程序
1.初上电写EEP
2.再上电判断EEP,擦除,写入任意值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
20061002838
2010-09-14 · TA获得超过811个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:104万
展开全部
先写一个烧写EEPROM的程序吧,反正不是很难
或者就在你的程序里面下点功夫吧,举个例子EEPROM存储的是一些校准数据,比如ADC采集的时候的电源电压,你在程序里面先判断EEPROM里面有没有数据,没有的话就进入校准程序,这时你用一个精密的电源比如基准源作为模拟电源,这就保证了校准值的准确性,这个校准程序只会在你程序烧写完成之后运行一次,以后就不会再运行了。你可以参考一下这种方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汨_李国
2010-09-13
知道答主
回答量:25
采纳率:0%
帮助的人:12.8万
展开全部
#include<reg51.h>
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit sda=P3^6;//数据线
sbit scl=P3^7;//时钟线
uchar miao;
static uchar count=0;
void delay()
{;;}//短延时 函数
void Delay_ms(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void start()//开始
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();

}
void end()//结束
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void answer()//应答
{
uchar m;
scl=1;
delay();
while((sda==1)&&(m<10))m++;//等待应答(sda=1)
scl=0;
delay();
}
void init()//函数初始化
{
sda=1;
delay();
scl=1;
delay();
}
void init1() // 定时器0
{
TMOD=0x01;
TH0=0xe3;
TL0=0xee;
ET0=1;
TR0=1;
EA=1;
}
void disp()
{
uchar ge,shi,bai;
bai=miao/100;
shi=miao/10%10;
ge=miao%10;

P2=0xff;
P0=table[bai];
P2=tablewei[2];
Delay_ms(4);

P2=0xff;
P0=table[shi];
P2=tablewei[1];
Delay_ms(4);

P2=0xff;
P0=table[ge];
P2=tablewei[0];
Delay_ms(4);

}
void Tmer0() interrupt 1 //中断显示
{
TH0=0xe3;
TL0=0x33;
//count++;
disp();
// if(count==20)
// {
// count=0;
// }
}
void write_byte(uchar wdate)// 写一个字节
{
uchar n,temp;
temp=wdate;
for(n=0;n<8;n++)//将一个字节一位一位的移入SDA
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();

}
scl=0;
delay();
sda=1;
delay();

}
uchar read_byte() //读字节
{
uchar j,k;
scl=0;
delay();
sda=1;
delay();
for(j=0;j<8;j++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
return k; //返回八位即一个字节
}
void write_1(uchar address,uchar date) //要发送的地址和数据
{
start();
write_byte(0xa0);//器件固定地址
answer();//应答
write_byte(address);//器件首地址
answer();
write_byte(date);//要传送的数据
answer();
end(); //终止

}
uchar read_1(uchar address) //读出器件的数据
{
uchar date;
start(); //开始
write_byte(0xa0);//器件固定地址
answer();
write_byte(address); //器件首地址
answer();
start();
write_byte(0xa1);//器件固定址以及读出器件的数据
answer();
date=read_byte() ;//读回来的值送入date
end();
return date;//返回一个值

}
void main()
{
uchar a;
init();
init1();
while(1)
{
for(a=0;a<255;a++) //0~255数据和地址更新
{
write_1(a,a);
// if(count==20)
Delay_ms(255);
miao=read_1(a);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xialvfire
2010-09-13 · 超过26用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:66.1万
展开全部
你写一个程序用来完成存(写)这个初值的功能,然后下载到单片机中通电完成这个功能;然后再下载你的应用程序直接度这个eeprom单元里的数据就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghost4063
2010-09-13 · TA获得超过6528个赞
知道大有可为答主
回答量:2940
采纳率:75%
帮助的人:2831万
展开全部
可以在EEPROM中设两组数据,一组是你需要的数据,并且再增加一个校验,例如异或AA,而另一组是改写标志,也要带校验,在改写时,要同时改写这两组。
上电后,先看数据那一组,如果校验正确,则采用其中的数据。
如果数据组检验错,则看改写标志组,如果其校验正确,则认为是写数据时出错,你根据自己的需求另行处理;如果改写标志组也校验错,则认为是首次上电,你可以将初值写入,并将改写标志组写好。
关键是写完一组要回读,保证至少一组是正确的。

大体思路是这样,请参考
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式