avr單片機(jī)eeprom初始化配置說(shuō)明
ATmega16 包含 512 字節(jié)的 EEPROM 數(shù)據(jù)存儲(chǔ)器。它是作為一個(gè)獨(dú)立的數(shù)據(jù)空間而存在的,可以按字節(jié)讀寫。 EEPROM 的壽命至少為
100,000 次擦除周期。 EEPROM 的訪問(wèn) 由地址寄存器、數(shù)據(jù)寄存器和控制寄存器決定。
/*
EEPROM 數(shù)據(jù)存儲(chǔ)器
EEPROM 地址寄存器(EEARH 和 EEARL)
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1
EEAR0
Res: 保留
保留位,讀操作返回值為零。
EEAR8..0: EEPROM 地址
EEPROM地址寄存器 – EEARH和EEARL指定了512字節(jié)的EEPROM空間。EEPROM地址是線性
的,從0 到511。EEAR的初始值沒(méi)有定義。在訪問(wèn)EEPROM之前必須為其賦予正確的數(shù)據(jù)。
EEPROM數(shù)據(jù)寄存器 EEDR
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
MSB LSB
EEDR7.0: EEPROM 數(shù)據(jù)
對(duì)于EEPROM寫操作, EEDR是需要寫到EEAR單元的數(shù)據(jù);對(duì)于讀操作,EEDR 是從
地址EEAR讀取的數(shù)據(jù)。
EEPROM控制寄存器 EECR
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
– – – – EERIE EEMWE EEWE
EERE
Res: 保留
保留位,讀操作返回值為零。
EERIE: 使能EEPROM 準(zhǔn)備好中斷
若SREG 的I 為"1",則置位EERIE 將使能EEPROM 準(zhǔn)備好中斷。清零EERIE 則禁止此
中斷。當(dāng)EEWE 清零時(shí)EEPROM 準(zhǔn)備好中斷即可發(fā)生。
EEMWE: EEPROM 主機(jī)寫使能
EEMWE決定了EEWE置位是否可以啟動(dòng)EEPROM寫操作。當(dāng)EEMWE為"1"時(shí),在4個(gè)時(shí)鐘周
期內(nèi)置位EEWE將把數(shù)據(jù)寫入EEPROM的指定地址;若EEMWE為"0“,則操作EEWE不起
作用。EEMWE置位后4個(gè)周期,硬件對(duì)其清零。見(jiàn)EEPROM 寫過(guò)程中對(duì)EEWE 位的描述。
EEWE: EEPROM寫使能
EEWE為EEPROM寫操作的使能信號(hào)。當(dāng)EEPROM數(shù)據(jù)和地址設(shè)置好之后,需置位EEWE以便將
數(shù)據(jù)寫入EEPROM。此時(shí)EEMWE必須置位,否則EEPROM寫操作將不會(huì)發(fā)生。
*/
#include
#include
/*EEPROM的512字節(jié)讀寫操作*/
void EEPROM_write(unsigned int uiAddress, unsigned char
ucData)//寫數(shù)據(jù).存數(shù)據(jù)的地址0-511之間
{
while(EECR & (1<
EEDR = ucData;//設(shè)置數(shù)據(jù)
EECR |= (1<
unsigned char EEPROM_read(unsigned int uiAddress)//讀數(shù)據(jù)
{
while(EECR & (1<
EECR |= (1<
}