PIC XC8 EEPROM操作


要做一個報警功能的東東,要求可以通過遙控來改變遙控內容。由於對系統的穩定性要求很高,所以用了看門狗。

可是看門狗復位會引起所有寄存器重置,恢復到默認狀態。遙控要改變的內容也被復位了,所以只能借助EEPROM來存儲報警標志了。

我用的是MPLAB X IDE +XC8 編譯器,XC8在語法上跟PICC有點不一樣

EEPROM操作有兩種方法,在該存儲空間中定義命名變量,或者使用塊訪問程序來讀取或寫入EEPROM。

 

1. EEPROM 對象

__eeprom限定符可用於指示應將變量定位到EEPROM中。

例  __eeprom int serialNos[4]  

將int 類型數組serialNos[]放到EEPROM中,注意,在XC8中int長度是16bit,而在其他MCU中,比如PC,int數值大小跟系統有關。

 

2. EEPROM初始化

對於那些支持對其EEPROM數據區域進行外部編程的器件,可以使用__EEPROM_DATA()宏將初始值放入可用於編程的HEX文件。

例:#include <xc.h>

__EEPROM_DATA(0,1,2,3,4,5,6,7);

該宏有8個參數,代表8個數據值,每個值為1BYTE。未使用的值用指定為零,否則編譯器會報錯。

每次使用時,__EEPROM_DATA將從EEPROM地址零開始寫入,自動遞增8。

若想使用更多的數據,可通過多次調用該宏來定義所需數量的EEPROM數據。最好將該宏放在所有函數定義之外。

該宏不能在運行時寫入EEPROM里,而是編程燒寫的時候裝入EEPROM中的。

使用__EEPROMSIZE來表示可用的EEPROM字節數。

 

3 . 訪問函數

可以調用庫函數來讀取和寫入EEPROM。

void eeprom_write(unsigned char addr, unsigned char value);
unsigned char eeprom_read(unsigned char addr);

使用這些函數時,會自動測試,並等待對EEPROM的所有並發寫操作完成,再去執行所需的操作。

 

4.  訪問宏

宏版本跟訪問函數不同,宏用法如下。

EEPROM_READ(address)

EEPROM_WRITE(address, value)

EEPROM_READ宏會返回讀取的字節。

在低檔和中檔器件中,如PIC8 PIC16 PIC18系列中,宏函數讀取不會等EEPROM寫操作完成,使用時應查詢標志。

再使用宏版本訪問時,最好將中斷關閉。

例 : xc.h

while (WR)

  continue;

value=EEPROM_READ(address);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM