久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4565|回復: 11
收起左側

單片機如何實現第一次開機時顯示默認數據,以后每次開機記憶上次關機時的數據

[復制鏈接]
ID:65581 發(fā)表于 2019-11-25 09:16 | 顯示全部樓層 |閱讀模式
如何實現第一次開機時顯示默認數據,以后每次開機記憶上次關機時的數據?
回復

使用道具 舉報

ID:213173 發(fā)表于 2019-11-25 13:23 | 顯示全部樓層
利用EEPROM掉電時保存數據。首次上電復位初始化時讀取的空白數據是0xff,不在規(guī)定范圍就采用默認數據。以后上電復位初始化先讀取EEPROM中保存的數據。
回復

使用道具 舉報

ID:25310 發(fā)表于 2019-11-25 14:21 | 顯示全部樓層
硬件上做掉電檢測,掉電時保存數據到EEPROM,再次開機初始化后讀取存入的數據。
回復

使用道具 舉報

ID:609989 發(fā)表于 2019-11-25 14:24 | 顯示全部樓層
使用EEPROM
回復

使用道具 舉報

ID:123289 發(fā)表于 2019-11-25 17:43 | 顯示全部樓層
簡單:在你每次關機前,將你需要開機顯示的數據,保存到非易失性存儲器中,這樣開機時就可以取到數據顯示了。你能做到嗎?
回復

使用道具 舉報

ID:647989 發(fā)表于 2019-11-25 19:20 | 顯示全部樓層
你可以外接一個存儲器,開機讀取就行
回復

使用道具 舉報

ID:7485 發(fā)表于 2019-11-25 19:59 | 顯示全部樓層
第一次開機一般都是開發(fā)人員操作,到了用戶手中肯定不是第一次開機。你只要考慮每次關機前保存需要保存的數據即可(保存方法視電路設計,有些也許需要外掛EEPROM),再開機時調出,或送顯示,或送相關寄存器。
回復

使用道具 舉報

ID:581066 發(fā)表于 2019-11-25 21:32 | 顯示全部樓層
使用內部flash保存數據,不知道樓主是使用的什么單片機,但是如果使用stc89c52rc 或者是STM32F103c8t6這兩個都是可以的,不需要外加什么東西,代碼就可以實現.
51如下
sfr ISP_DATA  = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD   = 0xe5;
sfr ISP_TRIG  = 0xe6;
sfr ISP_CONTR = 0xe7;


/*--------------------空停頓--------------------*/

void Nop(){}



/*--------------------開ISP,IAP--------------------*/

void ISP_IAP_enable()
{
//EA = 0;
ISP_CONTR = ISP_CONTR & 0x18;
ISP_CONTR = ISP_CONTR | 0x01;
ISP_CONTR = ISP_CONTR | 0x80;
}



/*--------------------關ISP,IAP--------------------*/

void ISP_IAP_disable()
{
ISP_CONTR = ISP_CONTR & 0x7F;
ISP_TRIG = 0x00;
//EA = 1;
}



/*--------------------觸發(fā)代碼--------------------*/

void ISPgoon()
{
ISP_IAP_enable();
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
Nop();
}



/*--------------------扇區(qū)擦除--------------------*/

void ISP_erase(uchar sector)                                        //扇區(qū)號(0~7)
{
ISP_ADDRL = 0;
ISP_ADDRH = (8192 + 512*(uint)sector)>>8;
ISP_CMD = ISP_CMD & 0xF8;
ISP_CMD = ISP_CMD | 0x03;
ISPgoon();
ISP_IAP_disable();
}



/*--------------------字節(jié)寫(強制操作)--------------------*/        //必須確認,目標區(qū)域的bin值已置11111111,否則在寫入前應先擦除該扇區(qū)

void ISP_write(uchar sector,uint offset,uchar ByteData)                //扇區(qū)號(0~7),地址偏移量(0~511),8位數據
{
offset = 8192 + 512*(uint)sector + offset;
ISP_ADDRL = offset;
ISP_ADDRH = offset>>8;
ISP_CMD = ISP_CMD & 0xF8;
ISP_CMD = ISP_CMD | 0x02;
ISP_DATA = ByteData;
ISPgoon();
ISP_IAP_disable();
}



/*--------------------字節(jié)讀(強制操作)--------------------*/

uchar ISP_read(uchar sector,uint offset)                        //扇區(qū)號(0~7) ,地址偏移量(0~511)
{
offset = 8192 + 512*(uint)sector + offset;
ISP_ADDRL = offset;
ISP_ADDRH = offset>>8;
ISP_CMD = ISP_CMD & 0xF8;
ISP_CMD = ISP_CMD | 0x01;
ISPgoon();
ISP_IAP_disable();
return (ISP_DATA);
}



/*--------------------空白地址定位--------------------*/

uint ISP_locat(uchar sector)                                        //扇區(qū)號0~7
{
uint offset;
for(offset=0;offset<512&&ISP_read(sector,offset)!=255;offset++);
return (offset);                //返回512說明扇區(qū)已滿
}



/*--------------------整型寫(自動管理扇區(qū)空間)--------------------*/

void ISP_UintWrite(uchar sector,uint UintData)                        //扇區(qū)號(0~7),16位數據(0~65534,系統(tǒng)定義65535為空)
{
uint offset;
offset=ISP_locat(sector);        //低位
if(offset==512)                //扇區(qū)已滿
{
ISP_erase(sector);                //擦除扇區(qū)
offset=0;
}
ISP_write(sector,offset,UintData);
ISP_write(sector,offset+1,UintData>>8);
}



/*--------------------整型讀(自動管理扇區(qū)空間)--------------------*/

uint ISP_UintRead(uchar sector)                                        //扇區(qū)號(0~7)
{
uint offset;
offset=ISP_locat(sector);        //比高字節(jié)大1
if(offset<2)                        //這種情況說明整個扇區(qū)是空的
offset=2;                        //取第扇區(qū)上2個地址,即將第1和第0個地址位作為讀取區(qū),防止報錯
return (((uint)ISP_read(sector,offset-1)<<8)+ISP_read(sector,offset-2));
}
對于STM32F103我就上傳到附件了
希望能幫到你吧

flash保存數據.7z

188.03 KB, 下載次數: 9

評分

參與人數 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:65581 發(fā)表于 2019-11-26 07:38 | 顯示全部樓層
wulin 發(fā)表于 2019-11-25 13:23
利用EEPROM掉電時保存數據。首次上電復位初始化時讀取的空白數據是0xff,不在規(guī)定范圍就采用默認數據。以后 ...

謝謝,多謝指教!!!!!!
回復

使用道具 舉報

ID:65581 發(fā)表于 2019-11-26 07:39 | 顯示全部樓層
1723848676 發(fā)表于 2019-11-25 21:32
使用內部flash保存數據,不知道樓主是使用的什么單片機,但是如果使用stc89c52rc 或者是STM32F103c8t6這兩 ...

多謝指教!!!!!
回復

使用道具 舉報

ID:65581 發(fā)表于 2019-11-26 17:38 | 顯示全部樓層
wulin 發(fā)表于 2019-11-25 13:23
利用EEPROM掉電時保存數據。首次上電復位初始化時讀取的空白數據是0xff,不在規(guī)定范圍就采用默認數據。以后 ...

我用的是STM8S系列的,如何知道EEPROM首次上電復位初始化是讀取的數據是0xff?我查數據手冊也查不到?
回復

使用道具 舉報

ID:213173 發(fā)表于 2019-11-26 19:25 | 顯示全部樓層
realwudongcan 發(fā)表于 2019-11-26 17:38
我用的是STM8S系列的,如何知道EEPROM首次上電復位初始化是讀取的數據是0xff?我查數據手冊也查不到?

我這是依據STC單片機利用ISP/IAP技術將內部Data Flash當EEPROM而言的。STM8S是否采用相同方式不得而知。但不管采用的是什么技術,沒有寫入數據的存儲器無非全0或全1。只要在扇區(qū)起始地址寫入特定數據作為標識,同樣可以判斷是否首次上電。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区四区五区无卡码 | 日韩一区二区av | 国产视频导航 | 久久久久久一区 | h视频免费在线观看 | 日本三级电影免费观看 | 武道仙尊动漫在线观看 | 午夜精品一区二区三区免费视频 | 91色综合 | 中文字幕国产视频 | 四虎最新视频 | 欧美成视频 | 亚洲精品v日韩精品 | 狠狠涩| 九九热在线精品视频 | 午夜精品 | 狠狠干网站| 国产小视频在线观看 | 亚洲免费一区二区 | 97av在线| 日韩精品一区二区三区免费观看 | 国产精品69久久久久水密桃 | 精品成人一区 | 久久精品久久久久久 | 不卡一区二区三区四区 | 日韩国产一区二区 | 免费看国产a | 成人一区av偷拍 | 亚洲美女网站 | 国产免费麻豆视频 | 亚洲天堂精品一区 | 麻豆久久精品 | 亚洲欧美精品在线观看 | 午夜视频在线免费观看 | 国产精品久久亚洲 | 欧美一区不卡 | 粉嫩av久久一区二区三区 | 人人操日日干 | 国产真实乱全部视频 | 九九热在线免费视频 | 又爽又黄axxx片免费观看 |