日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1.EEPROM介紹Electrically Erasable Programmable Read Only Memory電氣可拭除可編程只讀存儲器發(fā)展過程:ROM – > PROM –> EPROM –> EEPROM2.EEPROM和FLASH的區(qū)別2.1 使用上的區(qū)別FLASH用于存放程序,在程序運(yùn)行過

1.EEPROM介紹

Electrically Erasable Programmable Read Only Memory電氣可拭除可編程只讀存儲器

發(fā)展過程:ROM – > PROM –> EPROM –> EEPROM

2.EEPROM和FLASH的區(qū)別

2.1 使用上的區(qū)別

FLASH用于存放程序,在程序運(yùn)行過程中不能更改。我們編寫的程序是燒錄到FLASH中的;

RAM用作程序運(yùn)行時(shí)的數(shù)據(jù)存儲器;

EEPROM用于存放數(shù)據(jù),是用來保存掉電后用戶不希望丟的數(shù)據(jù),開機(jī)時(shí)用到的參數(shù)。運(yùn)行過程中可以改變。

  FLASH是用于存儲程序代碼的,有些場合也可能用它來保存數(shù)據(jù),當(dāng)然前提是該單片機(jī)的FLASH工藝是可以自寫的(運(yùn)行中可擦寫),但要注意FLASH的擦寫次數(shù)通常小于一萬次,而且通常FLASH只能按塊擦除。EEPROM不能用來存程序,通常單片機(jī)的指令尋址不能到這個(gè)區(qū)域。EEPROM的擦寫次數(shù)應(yīng)有百萬次,而且可以按字節(jié)擦寫。EEPROM在一個(gè)PAGE內(nèi)是可以任意寫的,F(xiàn)LSAH則必須先擦除成BLANK,然后再寫入,而一般沒有單字節(jié)擦除的功能,至少一個(gè)扇區(qū)擦除。

2.2 結(jié)構(gòu)上的區(qū)別

  EEPROM和FLASH都是非易失性存儲器。

  FLASH的全稱是FLASH EEPROM,但跟常規(guī)EEPROM的操作方法不同。

  FLASH 和EEPROM的最大區(qū)別是FLASH按扇區(qū)操作,EEPROM則按字節(jié)操作,二者尋址方法不同,存儲單元的結(jié)構(gòu)也不同,F(xiàn)LASH的電路結(jié)構(gòu)較簡單,同樣容量占芯片面積較小,成本自然比EEPROM低,因而適合用作程序存儲器,EEPROM則更多的用作非易失的數(shù)據(jù)存儲器。當(dāng)然用FLASH做數(shù)據(jù)存儲器也行,但操作比EEPROM麻煩的多,所以更“人性化”的MCU設(shè)計(jì)會集成FLASH和EEPROM兩種非易失性存儲器,而廉價(jià)型設(shè)計(jì)往往只有 FLASH,早期可電擦寫型MCU則都是EEPRM結(jié)構(gòu),現(xiàn)在已基本上停產(chǎn)了。

3.EEPROM的使用方法

  AVRGCC里面自帶有EEPROM讀寫函數(shù)。

  使用時(shí)需包含頭文件#include ,部分讀寫函數(shù)如下:

#define eeprom_is_ready() bit_is_clear(EECR, EEWE)//檢測EEPROM是否準(zhǔn)備好。OK返回1(返回EEWE位)

#define eeprom_busy_wait() do {} while (!eeprom_is_ready())//等待EEPROM操作完成

extern uint8_t eeprom_read_byte (const uint8_t *addr);//讀取指定地址的一個(gè)字節(jié)8bit的EEPROM數(shù)據(jù)

extern uint16_t eeprom_read_word (const uint16_t *addr);//讀取指定地址的一個(gè)字16bit的EEPROM數(shù)據(jù)

extern void eeprom_read_block (void *buf, const void *addr, size_t n);//讀取由指定地址開始的指定長度的EEPROM數(shù)據(jù)

extern void eeprom_write_byte (uint8_t *addr, uint8_t val);//向指定地址寫入一個(gè)字節(jié)8bit的EEPROM數(shù)據(jù)

extern void eeprom_write_word (uint16_t *addr, uint16_t val);//向指定地址寫入一個(gè)字16bit的EEPROM數(shù)據(jù)

使用示例:

/*-----------------------------------------------------------------------------*從EEPROM中讀取配置信息*----------------------------------------------------------------------------*/uint8_tread_EEPROM_config(void){factory_mode=eeprom_read_byte((uint8_t*)0x10);short_address=eeprom_read_word((uint16_t*)0x11);transmit_power_DBM_uin=eeprom_read_byte((uint8_t*)0x13);pan_id=eeprom_read_word((uint16_t*)0x14);channel_page=eeprom_read_byte((uint8_t*)0x16);channel=eeprom_read_byte((uint8_t*)0x17);return1;}/*------------------------------------------------------------------------------*將從串口讀出的配置信息存放于EEPROM中*-----------------------------------------------------------------------------*/uint8_twrite_EEPROM_config(void){eeprom_write_byte((uint8_t*)0x10,factory_mode);eeprom_write_word((uint16_t*)0x11,short_address);eeprom_write_byte((uint8_t*)0x13,transmit_power_DBM_uin);eeprom_write_word((uint16_t*)0x14,pan_id);eeprom_write_byte((uint8_t*)0x16,channel_page);eeprom_write_byte((uint8_t*)0x17,channel);return1;}

  通過串口向單片機(jī)發(fā)送配置命令,單片機(jī)收到指令后,利用函數(shù)write_EEPROM_config()將相應(yīng)的配置信息存放于EEPROM中。系統(tǒng)初始化時(shí),利用函數(shù)read_EEPROM_config()從EEPROM中取出相應(yīng)的數(shù)據(jù),用于系統(tǒng)的初始化。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉