請教如何調用文件 掉電不丟失
1、讀取3參數個數 改動后 保存到 EEPROM
我的用法是 :
unsigned int Temp_Buf[3]; //定義緩存:
Read_Flash_Message(ks_Addr,Temp_Buf, 3);//讀取:函數是:void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len);
Save_Flash_Message(ks_Addr,Temp_Buf, 3);//保存 函數是 :void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len);
現在是 無法保存 調取的也不對
//以下為.h文件
//使用單片機內部的Flash,模擬EEPROM使用
//STC15W4K48S4 單片機,可以使用IAP命令擦寫內部Flash
//起始地址 0X0000 結束 0X27FF 其中,512Byte一個扇區
//一共20個扇區 一個扇區可以存儲一組參數,這樣就可以直接擦出整個扇區修改內容
#ifndef __IAP_EEPROM__H_
#define __IAP_EEPROM__H_
#include "STC15W.h"
#include "intrins.h"
#define ks_Addr 0X0000
#define tz_Addr 0X0200
#define tm_Addr 0X0400
//保存內容到Flash
void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len);
//從Flash讀取內容
void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len);
//讀取某地址一個字節
unsigned char Read_One_Byte(unsigned int addr);
void Erase_IAP(unsigned int addr);
void Write_One_Byte(unsigned int addr,unsigned char dat);
#endif
以下為.c文件
#include "IAP_EEPROM.h"
//#include //STC15W4K48S4 單片機,可以使用IAP命令擦寫內部Flash //起始地址 0X0000 結束 0X27FF 其中,512Byte一個扇區 //關閉IAP功能 void Close_IAP(void) { IAP_CONTR = 0; IAP_CMD = 0; IAP_TRIG = 0; IAP_ADDRH = 0; IAP_ADDRL = 0; } //擦除某地址所在的扇區 void Erase_IAP(unsigned int addr) { IAP_CONTR = 0x82;//允許IAP操作,設置IAP操作速度 IAP_CMD = 0x03;//扇區擦除命令 IAP_ADDRL = addr; IAP_ADDRH = addr >> 8;//地址賦值 IAP_TRIG = 0x5a; IAP_TRIG = 0xa5;//觸發命令 _nop_();_nop_();_nop_(); Close_IAP();//清空IAP操作寄存器等 } //在某地址寫入一個字節 void Write_One_Byte(unsigned int addr,unsigned char dat) { IAP_CONTR = 0x82;//允許IAP操作,設置IAP操作速度 IAP_CMD = 0x02;//IAP寫命令 IAP_ADDRL = addr; IAP_ADDRH = addr >> 8;//地址賦值 IAP_DATA = dat;//更新寫寄存器 IAP_TRIG = 0x5a; IAP_TRIG = 0xa5;//觸發 _nop_(); Close_IAP();//清空IAP操作寄存器等 } //讀取某地址一個字節 unsigned char Read_One_Byte(unsigned int addr) { unsigned char dat=0;//定義一個待返回的數據 IAP_CONTR = 0x82;//允許IAP IAP_CMD = 0x01;//IAP讀命令 IAP_ADDRL = addr; IAP_ADDRH = addr >> 8;//地址賦值 IAP_TRIG = 0x5a; IAP_TRIG = 0xa5;//觸發 _nop_();_nop_();_nop_();_nop_(); dat = IAP_DATA; Close_IAP();//清空IAP操作寄存器等 return dat; } //保存內容到Flash void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len) { unsigned int i=0; Erase_IAP(Addr);//擦除對應扇區 if(Len >= 511) Len = 511; Write_One_Byte(Addr,Len>>8);//長度寫入首地址 Write_One_Byte(Addr+1,(Len&0X00FF));//長度寫入首地址 for(i=0;i Write_One_Byte((Addr+2+i),Buf[i]); } } //從Flash讀取內容 void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len) { unsigned int i=0; *Len = Read_One_Byte(Addr); //首先讀取長度信息 *Len <<= 8; *Len += Read_One_Byte(Addr+1); if(*Len >= 511) *Len = 511; for(i=0;i<*Len;i++) { Buf[i] = Read_One_Byte(Addr+2+i); } } //
上一篇:單片機指紋識別程序
下一篇:單片機驅動EC11編碼器
推薦閱讀
史海拾趣
隨著市場的不斷拓展,FTDI也面臨著諸多挑戰,包括如何吸納優秀的技術人才、打擊假冒芯片以及提供本地化的技術支持等。為了應對這些挑戰,FTDI采取了多項措施,包括引進經驗豐富的工程師和潛力大學畢業生充實技術團隊,加強對本地分銷商的培訓,以及增加對重點應用市場的技術支持力度。這些措施不僅提升了FTDI的技術實力和市場響應速度,也進一步鞏固了其在全球市場的地位。
FTDI的歷史可以追溯到1992年3月13日,由弗雷德·達特(Fred Dart)創立。公司初期專注于個人電腦市場,推出了針對主板芯片組的解決方案。其中,早期的主要客戶之一是IBM,這些芯片被應用于AMBRA和PS/2系列的個人電腦中,為當時的計算機技術發展做出了重要貢獻。這一時期的成功不僅奠定了FTDI的技術基礎,也為其后續的市場拓展奠定了堅實的客戶基礎。
經過多年的發展,協順電子已經成為中國電子連接器行業的領軍企業之一。展望未來,公司將繼續堅持“以顧客為中心”的經營理念,不斷提升產品質量和技術水平;同時,公司也將積極探索新的業務領域和市場機會,推動公司的持續發展。此外,協順電子還將加強與國際知名企業的合作與交流,共同推動電子行業的發展和進步。
請注意,以上故事框架僅供參考,具體的故事內容需要根據協順電子(Finecables)公司的實際情況和發展歷程進行創作和補充。
為了進一步擴大市場份額,維峰電子積極開拓國內外市場。公司通過與國內外知名企業的合作,成功進入了多個領域,包括工業控制、汽車和新能源等。特別是新能源領域,維峰電子憑借其在電子連接器方面的技術優勢,成功開發出多款適用于新能源領域的產品,受到了市場的廣泛認可。
2015年,喬光電子經歷了重大股權變更,現任總經理顏非接手公司后,開啟了二次創業之路。2018年,公司在漳平市選址購地,并于2019年開始建設新工廠,同時決定構建自己的品牌。這一決策雖然對原有客戶造成了一定沖擊,但顏非堅信品牌是企業的靈魂,堅持走品牌化道路。經過幾年的努力,喬光電子不僅成功打造了“FTR”自主品牌,還獲得了“UL&TUV&VDE&CQC”等安規認證和多項國家專利證書,品牌影響力顯著提升。
在電子產品行業,產品質量和客戶服務是企業生存和發展的關鍵。Barnbrook深知這一點,因此在發展過程中始終堅持嚴格的品質管理和優質的客戶服務。公司建立了完善的質量管理體系,對每一道工序都進行嚴格把關,確保產品的穩定性和可靠性。同時,Barnbrook也重視客戶反饋和需求,不斷優化產品和服務,贏得了客戶的信任和好評。
他曾經是一位IC設計工程師,他勇于想象,敢于挑戰權威,在他35歲時,他創造出一個改變半導體產業格局的新器件,締造出一個新的半導體帝國,但41歲時,他英年早逝,將財富、景仰與遺憾留于后人。 他,就是FPGA的發明人了,Ross Freeman。“當他描述 ...… 查看全部問答∨ |
2010年第一季度過去,工廠開工嚴重不足,公司營業額部不到2009的第一度的1/4。在此情況下,公司出招,減員增效。如果公司第二季度銷售如不見起色,我估計就就有更狠招數過來。大蝦們,估計是啥招?… 查看全部問答∨ |
經過升入了解LM3S8962,規劃用LM3S8962開發三款產品 1. 數字式光源; 2.LED數字控制器 3.工業監控系統 頭疼的是,該芯片功耗有點大,據說芯片價格有點高,阻礙大規模使用的障礙!… 查看全部問答∨ |
在做完HSMC轉接板后, 我們完成了HMI板的設計和PCB繪制, 目前也已發到PCB廠家做板, 該板實現的功能:系統的人機界面模塊,主要包含了3.5寸的TFT LCD、按鍵、編碼器旋鈕以及擴展功能USB通訊接口。 預計一周后板 ...… 查看全部問答∨ |
想咨詢WinCE 上可不可以利用OpenGL ES開發動畫,我的主板是PCM9375(CPU為X86的結構)? 如果可以實現,大體怎樣實現? 謝謝各位了!… 查看全部問答∨ |
|
在定時上傳GPRS數據的情況下,當時間間隔小于10S時,向模塊打電話就會出現問題,連RING都接收不到。打電話提示都是:“對不起,您所撥打的電話暫時無法接通,請稍后再撥~~”。但是上傳時間間隔比較大時,就沒有問題,找不到好的解決方法,請大家幫 ...… 查看全部問答∨ |
WinCE5.0 下面用 DirectShow 開發的播放器,播放視頻時總是新開一個窗口并且自動最小化 我先創建了一個IGraphBuilder接口,查詢IVideoWindow,然后render一個文件,把IVideoWindow的owner設為一個dialog,把它的風格設為"WS_CHILD| WS_CLIPSIBLINGS",然后開始播放。 但是實際的結果是:視頻播放的窗口不是我指定的dialog的子窗口 ...… 查看全部問答∨ |
最近使用Quartus7.2老是出問題。 然后就重裝一次 發現licence無效(使用破解器破解的,但是我只是學習而已,沒有從事商業目的啊) 無法使用。于是全部卸載后,就將網絡斷開,重新安裝。 安裝并破解后,將網絡恢復。發現不支持EP2 ...… 查看全部問答∨ |
本帖最后由 dontium 于 2015-1-23 13:33 編輯 很早前就想問這個問題,現在低成本的MCU中都有集成多路10位甚至12位AD,可為何沒有單獨的低成本AD芯片,很多AD芯片比集成AD的MCU都貴,大大限制了用戶的選擇范圍。如果說封裝貴,可最起碼應該比MCU便 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- wince下如何關閉LCD背光燈
- 關于Driver Studio 3.2 的安裝詳解
- 差分電路PCB板上輸入端有3.7V的直流偏置,可能是什么原因?
- EEWORLD大學堂----Delfino雙核F2837xD性能介紹
- stm8l152c6t6不能輸出PWM波
- 藍牙協議棧移植出錯:安裝完bluez-libs-3.36后安裝expat2.0.1,沒有生成.pc文件
- 摸一摸,索一索!altium designer+度娘 ----開始學習中。。。
- 有人做過ICL7135 A/D的轉換嗎,誰有這個的中文詳細點的資料啊,例程也好的
- 8 bit cpu jpg解碼時完全可行的,看那個單片機高手能搞定!
- 請教一個TVS的使用問題