ee2prom擦除 c语言,浮点数在E2PROM中的存取方法.doc
PAGE
PAGE 1
浮點數據在E2PROM中的存取方法
摘 要 介紹了C51語言的浮點數在E2PROM中的存取方法。
關鍵詞 浮點數 非易失存儲器 存取方法 C51編程
1 引言
由于C語言的高效性和易維護性,因而C51語言在工程中得到了廣泛應用。以下所討論的問題中的程序舉例就是用C51語言編寫來實現其功能和目的。在我們設計產品的過程中,通常要將一些儀器參數保存起來,作為儀器正常工作的保障,這些浮點參數一般都保存在非易失性存儲器(E2PROM)中,以防丟失。
2 浮點數在E2PROM中的存取
2.1 浮點數在并行E2PROM中的存取
MCS-51單片機在智能化儀器儀表的設計中得到了廣泛的應用,同時C51單片機開發語言方便靈活的接口編程能力和強大的數據處理能力,在單片機的開發中占有重要地位。其特有的浮點數處理能力為智能化儀器儀表的非線性矯正、數字化校準提供了方便。在C51中,如果浮點數被分配在RAM存儲空間,如6264、6116、62256、62128等,其數據的存取由C51自動編譯完成,不必編寫專門的程序。而非易失性存儲器2817A、2864等雖然硬件接口沒有特殊要求,但寫周期與RAM不同,因此必須為浮點數存儲編寫專門的存儲程序。
一般情況下,用戶定義的浮點數在RAM中的地址、存儲方式對用戶是未知的。但是用戶可以通過C51的指針實現對C51浮點數的按字節訪問,C51語言的指針是它的一大特色,表現出很強的數據處理能力和靈活性。使用指針可以有效地表示復雜的數據結構,動態分配存儲器,直接處理內存地址等,簡化程序設計。浮點數在內存中的存儲方式如表1所示。
地址
0
1
2
3
內容
MMMMMMMM
MMMMMMMM
EMMMMMMM
SEEEEEEE
表1 浮點數在內存中的存儲
其中,S 符號位,1表示負,0表示正;
????? E 階碼(在兩個字節中)偏移最大為127;
????? M 23位尾數,最高位為1。
例如浮點數變量k=-12.5的十六進制表示為:0xC1 48 00 00,它按如下方式保存于內存RAM的連續4個字節中。
地址 內容
ADD+00H 0x00
ADD+01H 0x00
ADD+02H 0x48
ADD+03H 0xC1
通過以下語句可以直接對變量進行讀寫操作。
float xdata k, s ;定義浮點數k,s位于外部RAM
k=-12.5 ;為變量k賦值為-12.5
s= k ;為變量s賦值為-12.5
由于非易失性存儲器2817A、2864等的讀操作與RAM類似,而擦、寫時間周期比隨機存儲器RAM要長得多,一般一個字節的擦除和寫訪問時間為200μS或1 mS,最大的寫入周期(包括擦除和寫入)時間不超過10mS,典型時間為5mS。因此在實際應用中要滿足擦、寫周期時間要求,應根據芯片的要求設置等待或中斷、查詢。每個C51浮點數占用連續的4個字節的存儲單元,浮點數的存儲也必須是連續的4個字節存儲單元。以上語句不能完成浮點數在2817、2864等E2PROM中的保存,因此必須為浮點數存儲編寫專門的存儲程序。
定義ap是指向非易失性存儲器2817A、2864的指針,非易失性存儲器2817A、2864分配的地址為0x2200。利用指針將RAM中的浮點數依次取出,按字節依次連續存儲在非易失性存儲器2817A、2864中。也可以使用聯合(共用體)將RAM中的浮點數依次取出,按字節依次連續存儲在非易失性存儲器2817A、2864中。程序執行后,浮點數s的值就自動變為-12.5,并可以由浮點變量xx直接引用或參與運算。程序流程框圖如圖1所示,程序如下:
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define d2864 XBYTE[0x2200]
開始市
開始市
從RAM中按字節取浮點數
是否取完
按字節寫入EEPROM
是否寫完
延 時
從EEPROM中讀
是否讀完
結 束
N
Y
N
Y
N
Y
圖1 并行EEPROM2864程序框圖
#define s XFLOAT[0x0880]
/*4*0x880=0x2200浮點數占用4個字節*/
float xdata k=-12.5;
u
總結
以上是生活随笔為你收集整理的ee2prom擦除 c语言,浮点数在E2PROM中的存取方法.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绝地求生第一人称
- 下一篇: c 语言简单的聊天程序,写一个C-S程序